Сейчас на форуме: rmn, exp50848 (+7 невидимых)

 eXeL@B —› Основной форум —› Деобфускация нативного кода.
Посл.ответ Сообщение


Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 09 сентября 2013 12:30 · Поправил: neomant
· Личное сообщение · #1

Здравствуйте, все заинтересованные этой темой.

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

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

* с безусловным переходом проблем нет, он может быть выявлен статическим анализом;
* с условным переходом сложнее: как распознать действительно ли он условный или же представлен
таковам лишь обфускатором;
* с вызовом функции и возвратом из неё ещё интереснее: как распознать, что это действительно вызов и
возврат, а не переходы;
* как определить конечную точку графа.

Предлагаю в этой ветке выкладывать ссылки на имеющиеся инструменты, исходные коды и мат. часть.,
вопросы и свои измышления по теме.

-----
Следуй за белым кроликом





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 09 сентября 2013 12:34 · Поправил: reversecode
· Личное сообщение · #2

гугл коде optimize плагин для ida
--> Link <--



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 09 сентября 2013 17:49
· Личное сообщение · #3

Тоже думаю о том как реализовать. Пришел пока к следующим вариантам:
-нужен эмулятор инструкций;
-на каждой инструкции помечать какие регистры юзаются/перезаписываются для простенького анализа данных;
-после каждой команды по маскам искать цепочки команд. Тут получается заточка под какой-либо обфускатор.



Ранг: 36.1 (посетитель), 11thx
Активность: 0.020
Статус: Участник

Создано: 09 сентября 2013 18:05 · Поправил: Jonny
· Личное сообщение · #4

reversecode пишет:
гугл коде optimize плагин для ida

на данный момент валится на переходах, которые не выполняются (возврат из подпрограммы, условный переход). Там не хватает эмулятора инструкций.
P.S. Я имею ввиду optimice плагин.



Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 09 сентября 2013 18:54 · Поправил: vden
· Личное сообщение · #5

Тоже понемногу занимаюсь данным вопросом

Я пришел к тому что нужен многопроходный анализатор. Обобщая, он должен строить граф и учитывать все изменения, которые делает код.
Это передача данных из регистра-регистр, регистр-память, память-регистр.

Многопроходный, потому что очень часто за 1 раз удастся только добыть некоторые данные. А граф нужно будет перестроить с учетом полученных данных.

как распознать действительно ли он условный или же представлен таковам лишь обфускатором
легких путей нет. нужно анализировать все ветвления и если повезет лишнее можно будет выкинуть (например если ведет на несуществующий адрес или условие заведомо ложное).

простые штучки могут отметаться на лету, например

xor eax, eax
jnz ..
jz ..

Кстати еще могут быть ветвления-дубликаты, т.е. обе ветки в ветвлении делают одно и тоже, но по разному разбавлены мусором.

как распознать, что это действительно вызов и возврат, а не переходы
Думаю, никак. Я вижу 2 варианта:
1. пользователь отмечает что этот call - либо call либо jmp
2. задать шаблон, допустим, все callы при анализе данной функции либо call либо jmp

как определить конечную точку графа
Есть такая идея. При входе в функцию, мы можем знать адрес возврата. Соответственно, если при анализе функции найден прыжок на адрес возврата - это выход. Ну а так, конечные точки это там где анализ застопорился

В идеале граф нужно строить в p-коде в SSA форме. Это поможет провести больше оптимизаций в дальнейшем.

После всех оптимизаций код можно ассемблировать и записывать на место оригинальной функции.

На самом деле все конечно же сложнее. И это без учета всякой само-модификации кода.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 09 сентября 2013 19:16
· Личное сообщение · #6

reversecode пишет:
коде optimize плагин для ida


По демо вещь действительно хорошая, но пока оценить не смог, не получается прикрутить к IDA IDApython.
Нигде не могу найти инсталл python с python27.dll

Как вижу тема действительно актуальна. Писать отдельный инструмент смысла нет. Сам думал в виде
плагина для Олли, чтоб не заморачиваться ещё с загрузкой трейсом и дизасмом.

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

-----
Следуй за белым кроликом





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 09 сентября 2013 19:27
· Личное сообщение · #7

выбирай любой
http://www.python.org/ftp/python/2.7/python-2.7.msi
там на ftp много их
и optimize лучше с svn обновить последний




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 09 сентября 2013 19:30
· Личное сообщение · #8

neomant
А с Immunity Debugger разве не идёт инсталл питона 2.7? --> Заполнить форму надо и вперёд <--

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 09 сентября 2013 19:36 · Поправил: mysterio
· Личное сообщение · #9

>> python v2.7 << там же и другие версии. Да и собственно уже выше дали ссылку ;)

-----
Don_t hate the cracker - hate the code.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 09 сентября 2013 19:54
· Личное сообщение · #10

Всё оказалось проще: python не ставился нормально под Windows 7 64, на XP 32 встал нормально и кинул
свою python27.dll.
Прикрутил optimice и... как всегда и сразу же разочаровался. Ничего заявленного в демо не увидел, зато на
первых попавшихся двух приложениях на точке входа плаг вылетает с ошибками. Сегмент новый создан, но
он пуст.

-----
Следуй за белым кроликом





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 09 сентября 2013 19:55
· Личное сообщение · #11

> авно назревает идея написания такого инструмента

Какого инструмента, вообще о чём вы говорите. Сия задача даже людям не под силу, в случаи пермутации. Давай, пробуй. Пиши

| Сообщение посчитали полезным: dosprog


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 09 сентября 2013 20:24
· Личное сообщение · #12

можно еще такого зверя вспомнить --> Link <--
жаль канул в лету вместе с его авторами
хотя примеры работы вроде как кого то даже устроили по выхлопу


 eXeL@B —› Основной форум —› Деобфускация нативного кода.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати