Привет, я пытаюсь вскрыть 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. модераторы/пользователи, знаю текст с ошибками (я иностранец), если возможно поправьте граматику плз.