понедельник, 25 августа 2014 г.

Отключение ASLR при отладке third-party приложения под iOS

В этой статье дается простая короткая инструкция как пропатчить third-party приложение под iOS что бы отключить ASLR при отладке. Предполагается что у читателя в наличии

  1. iOS 7.0-7.0.4 устройство с evasi0n jailbreak и компьютер с Mac OS X 10.9.4, установленным XCode 5.1.1 и МаchOView 2.4 (возможно, для других версий тоже будет работать, я не пробовал)

  2. некоторый опыт в отладке third-party приложения для iOS, ну и желательно знать что такое ASLR




Что ж, приступим.

Для начала выберем исполняемый файл, в который мы будем отлаживать и в котором нам нужно отключить ASLR. Пусть это будет демон /usr/sbin/absd, отвечающий за авторизацию в некоторых сервисах Apple. Конечно absd тут исключительно для примера, на самом деле можно взять любой исполняемый файл.


Используем scp для того что бы скопировать наш исполняемый файл на компьютер (здесь и далее 192.168.1.112 — это IP адрес нашего iOS устройства):



$ scp root@192.168.1.112:/usr/sbin/absd ./




WARNING! Перед тем как что-то делать с absd, обязательно сохраните где-нибудь копию!

Затем воспользуемся утилитой codesign из XCode и извлечем из нашего исполняемого файла plist со списком entitlements (не знаю как это по-русски, может «список прав»?):



$ codesign -d --entitlements - absd > absd.entitlements




После этого открываем исполняемый файл в MachOView и находим Mach-заголовок для интересующей нас архитектуры. В случае fat binary таких заголовков будет несколько — по одному на каждую архитектуру, случае если у нас не fat binary — заголовок будет всего один. В заголовке найдите флаг MH_PIE и запомните соответствующее смещение. В MachOView все это выглядит он вот так:


Флаг нужно сбросить, но в MachOView это сделать нельзя, поэтому откроем исполняемый файл в любом HEX-редакторе, перейдем по соответствующему смещению и сбросим флаг. Потом переподпишем исполняемый файл с сохраненными entitlements:



$ codesign -s - --entitlements absd.entitlements -f absd




и скопируем его обратно на устройство

$ scp ./absd root@192.168.1.112:/usr/sbin/absd




Вот собственно и все. Теперь если вызвать демона — например авторизировавшись в iMessage, — и загнать его под отладку в lldb, мы увидим


(если вы сидите на gdb вместо lldb, используйте соответствующие команды). Как видим из скриншота, никакого больше ASLR! Вот собственно и вся инструкция — простая и короткая, как я и обещал в начале статьи.


Happy debugging!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий