Как распаковать и дизассемблеровать mach-o бинарник (OSX 64 bit)?

Привет, я пытаюсь вскрыть OSX mach-o бинарник.

К сожелению дизассемблировка дает меня bullshit, видимо бинарник закриптован, или использует packer (или на самом плохом варинате обфускацию).
Меня нужно получить/определить алгоритм шифровки, и декриптовать бинарник.

Load Commands
Используя otool -l myTarget сделал дамп команд загрузки бинарника
(некаких флагов на факт крипта.... но всетаки она закриптована)
https://www.dropbox.com/s/yg78mesn3w9mm7n/load_com...

Disassembling
Используя otool -tvV myTarget сделал дамп всего __text __TEXT сегмента
https://www.dropbox.com/s/ag6xq1n2k9nm4eq/text_seg...
Как видите никакой полезной информации, одна каша.

LLVM дизассемблер сразу отказывается
(__TEXT,__text) section
Segmentation fault: 11


Инъекция с помощью cycript
Я попробовал `cycript` для дампа `основного образа бинарника` из Виртаульной Памяти, а потом патчил дамп обратно в бинарник с помощью `dd` инструмента,
но кажется этот трюк не прошел, и бинарник был поврежден.

Инъекция dylib
Меня удался сделать инекцию dylib в процесс, и я имею мой троянский поток в процессе,
т.е. я могу вызвать любой метод, вижу все классы и все поле обектов, могу делать swizzle любого метода,
но это не дает мне шанс на дизассемблировку, и опять бинарник остается черным ящиком.

Debuggers
`gdb`/`lldb` отказываются запустить/присоединиться к процессу, т.к. бинарник использует `pt_deny_atach`/`sysctl`/`kauth` техники анти-дебаггинга.

Я попробовал патчить свой OSX kernel для игнорирование `pt_deny_atach`/`sysctl`/`kauth` (т.к. assembly к бинарнику не доступно и я не смогу снять `nop`-ом эти вызовы)
Но после этого процесс даже не запускается, просто зависает (В то время как `Github` и `iTunes` запускаются без каких то проблем, и клюют на патч).

Декриптованный кусок кода
Это единственное что меня удалось найти,
В бинарнике используется довольно популярная библиотека AquaticPrime.
Я интегрировал библиотеку на моем тестовом проекте и компилировал его, потом сравнил мой код, с кодом которое находится в бинарнике.

Мой код (decrypted)
https://www.dropbox.com/s/mw2e8cvzt0u5vwy/decytpted.png

Код в бинарнике (encrypted)
https://www.dropbox.com/s/o70qq90trz5h914/encrypted.png

Допалнительная информация
Есть такой трюк mangling, но смотря на размеры функции, зашифорванные варианты довольно большие.
Я начал думать на mangling, т.к. на самом начале (когда я начал реверсить этот бинарник) , все дизассемблеры отказывались сообщая (corrupted file), но бинарник запускался, оказался что оффсеты сегментов указаны неверно, я исправил их вручную и дизассемблеры стали читать его.
Как думаете, есть тут признаки на mangling?

Файл
https://www.dropbox.com/s/pp2ex3uhqp3aeut/hop.app.zip
Contents/MacOS/Hopper Disassembler v3 - сам бинарник (исправлены оффсеты)
Contents/MacOS/Headers - classdump, имена классов и методов, адресы имплемнтации и полей.

Можете посоветовать некоторые дополнительные техники (или предложение, что я могу попробовать), чтобы получить чистый асемблай?

P.S. модераторы/пользователи, знаю текст с ошибками (я иностранец), если возможно поправьте граматику плз.
  • Вопрос задан
  • 6069 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы