Расшифровываем бинарники приложений iOS

Антон Титков
Development Разработка программ для AppStore Разработка программ для Cydia
Ман пригодится для многих твикоделов и хакеров,тк позволяет расшифровать исполняемый файл iOS приложения для изучения в дизассемблере,поиске уязвимостей и просто снятии дампа заголовочных файлов для дальнейшего изучения.
Cейчас я просто покажу расшифрование на примере Яндекс.Музыка(выбор пал случайно:)) и как получить дамп заголовочных файлов.

Информация

Нам нужно:
1)GDB последней версии(из Cydia не брать,там он поломан).Можно сделать самому или заюзать мой GDB под armv7 для iOS 4.3+ http://clck.ru/d/P9A_QahA1AQOV
2)Установленный SSH на девайсе
Хорошо если стоят otool,plutil,file и grep,если нет,то то же самое надо на компе.



Первым делом подключаемся к девайсу по ssh



Далее получаем путь к приложению YandexMusic
ls -ld /var/mobile/Applications/*/YandexMusic.app



У меня нет нужных утилит на iPad,так что я буду все через утилиты Mac)

Выгружаем исполняемый файл на компьютер.



Выводим нужную нам информацию о бинарнике



Информация

cryptoff -определяет оффсет,с которого начинается зашифрованная часть(в данном случае 0x1000)
cryptsize -определяет размер зашифрованной части
cryptid -определяет,зашифрованы данные или нет


Возвращаемя к девайсу

Подключаем к работе gdb и вводим команды

set sharedlibrary load-rules ".*" ".*" none
set inferior-auto-start-dyld off
set sharedlibrary preload-libraries off
rb doModInitFunctions
r




Далее нам надо сделать дамп памяти приложения.
dump memory <имяфайла> <адресначала> <адресконца>
адрес начала считается так: cryptoff+0x1000 (в данном случае 0x2000)
адрес конца так: cryptoff+cryptsize+0x1000 (в данном случае 0xA1000)



После создания дампа вводим kill,затем q
Теперь выгружаем дамп на компьютер



После выгрузки копируем расшифрованный код обратно в бинарник
dd seek= 4096 bs=1 conv=notrunc if=./yandex_dump.bin of=./YandexMusic

значение для seek высчитывается просто.берем оффсет архитектуры(в данном случае 0) и прибавляем cryptoff(в данном случае 4096)



После этого открываем готовый файл в любом Hex редакторе и ищем "/usr/lib/dyld" (без кавычек),затем
ищем ближайший байт со значением 0x01 и меняем на 0x00,сохраняем,и если все правильно,то
cryptid будет 0 если ввести команду
otool -l YandexMusic | grep crypt

Так расшифровывается исполняемый файл iOS приложения.
Чтобы снять дамп хедеров,нужна утилита class-dump;
Вводим class-dump -H YandexMusic и на выходе получаем дамп.
Удачи!
5 июня 2012, 14:34

Ответы