Странное поведение 64-битного приложения iOS для заголовков, инструменты тестирования

#ios #encryption

#iOS #шифрование

Вопрос:

У меня есть 64-битное приложение для iOS, но различные инструменты и функции, похоже, не работают на нем. Это приложение было загружено из App Store, поэтому оно прошло все проверки Apple и т. Д.

Это 64-битное приложение, как видно из заголовка mach-o-

 Mach header
  magic      cputype cpusubtype  caps    filetype ncmds sizeofcmds   flags
MH_MAGIC_64 16777228          0  0x00     EXECUTE    47       5480       NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE
  

Похоже, что в командах загрузки заголовка даже нет LC_ENCRYPTION_INFO_64 (как 64-разрядного приложения), и отсутствует вся информация о cryptoffset, cryptid и т. Д-

 root# otool -l myApp | grep -i crypt
root#
root# otool -l myApp | grep -i LC_ENCRYPTION_INFO
root#
  

Использование nm для получения функций, классов и методов, на которые ссылаются в приложении и в динамически загружаемых библиотеках, встречается с ошибкой.

 nm myApp
nm: object: myApp malformed object (unknown load command 4)
  

И, наконец, когда я дамп с помощью class-dump-z, я получаю null, это результат, независимо от того, делаю ли я это в стандартном двоичном файле из App Store или сначала расшифровываю с помощью Clutch.

 /**
* This header is generated by class-dump-z 0.2a.
*
* Source: (null)
*/
  

Lipo также выдает ошибку

 root# lipo -info myApp
dyld: lazy symbol binding failed: Symbol not found: _map_fd
Referenced from: /usr/bin/lipo
Expected in: dyld shared cache

dyld: Symbol not found: _map_fd
Referenced from: /usr/bin/lipo
Expected in: dyld shared cache

Trace/BPT trap: 5
  

Что происходит?

Ответ №1:

Оказывается, сначала нужно использовать dylib и dumpdecrypted — https://github.com/stefanesser/dumpdecrypted а затем используйте новейшую версию class-dump, работающую на OSX — http://stevenygard.com/projects/class-dump / это позволит вам успешно выполнить сброс класса arm64-битных двоичных файлов.