eXeL@B —› Основной форум —› Деобфускация нативного кода. |
Посл.ответ | Сообщение |
|
Создано: 09 сентября 2013 12:30 · Поправил: neomant · Личное сообщение · #1 Здравствуйте, все заинтересованные этой темой. Давно назревает идея написания такого инструмента, так как подобных достойных не встречал. Может быть ошибаюсь, но думаю, что это наболевший вопрос для многих. Сам пока нахожусь в самом начале, т.е. пытаюсь решить задачу построения графа потока управления обфусцированного кода. Сразу же столкнулся с несколькими нетривиальными задачами: * с безусловным переходом проблем нет, он может быть выявлен статическим анализом; * с условным переходом сложнее: как распознать действительно ли он условный или же представлен таковам лишь обфускатором; * с вызовом функции и возвратом из неё ещё интереснее: как распознать, что это действительно вызов и возврат, а не переходы; * как определить конечную точку графа. Предлагаю в этой ветке выкладывать ссылки на имеющиеся инструменты, исходные коды и мат. часть., вопросы и свои измышления по теме. ----- Следуй за белым кроликом |
|
Создано: 09 сентября 2013 12:34 · Поправил: reversecode · Личное сообщение · #2 |
|
Создано: 09 сентября 2013 17:49 · Личное сообщение · #3 Тоже думаю о том как реализовать. Пришел пока к следующим вариантам: -нужен эмулятор инструкций; -на каждой инструкции помечать какие регистры юзаются/перезаписываются для простенького анализа данных; -после каждой команды по маскам искать цепочки команд. Тут получается заточка под какой-либо обфускатор. |
|
Создано: 09 сентября 2013 18:05 · Поправил: Jonny · Личное сообщение · #4 |
|
Создано: 09 сентября 2013 18:54 · Поправил: vden · Личное сообщение · #5 Тоже понемногу занимаюсь данным вопросом Я пришел к тому что нужен многопроходный анализатор. Обобщая, он должен строить граф и учитывать все изменения, которые делает код. Это передача данных из регистра-регистр, регистр-память, память-регистр. Многопроходный, потому что очень часто за 1 раз удастся только добыть некоторые данные. А граф нужно будет перестроить с учетом полученных данных. как распознать действительно ли он условный или же представлен таковам лишь обфускатором легких путей нет. нужно анализировать все ветвления и если повезет лишнее можно будет выкинуть (например если ведет на несуществующий адрес или условие заведомо ложное). простые штучки могут отметаться на лету, например xor eax, eax jnz .. jz .. Кстати еще могут быть ветвления-дубликаты, т.е. обе ветки в ветвлении делают одно и тоже, но по разному разбавлены мусором. как распознать, что это действительно вызов и возврат, а не переходы Думаю, никак. Я вижу 2 варианта: 1. пользователь отмечает что этот call - либо call либо jmp 2. задать шаблон, допустим, все callы при анализе данной функции либо call либо jmp как определить конечную точку графа Есть такая идея. При входе в функцию, мы можем знать адрес возврата. Соответственно, если при анализе функции найден прыжок на адрес возврата - это выход. Ну а так, конечные точки это там где анализ застопорился В идеале граф нужно строить в p-коде в SSA форме. Это поможет провести больше оптимизаций в дальнейшем. После всех оптимизаций код можно ассемблировать и записывать на место оригинальной функции. На самом деле все конечно же сложнее. И это без учета всякой само-модификации кода. |
|
Создано: 09 сентября 2013 19:16 · Личное сообщение · #6 reversecode пишет: коде optimize плагин для ida По демо вещь действительно хорошая, но пока оценить не смог, не получается прикрутить к IDA IDApython. Нигде не могу найти инсталл python с python27.dll Как вижу тема действительно актуальна. Писать отдельный инструмент смысла нет. Сам думал в виде плагина для Олли, чтоб не заморачиваться ещё с загрузкой трейсом и дизасмом. Суть проблемы в алгоритмах составления графа потока управления, его оптимизации, деморфинга, чистки кода от мертвого и от лишних инструкций. ----- Следуй за белым кроликом |
|
Создано: 09 сентября 2013 19:27 · Личное сообщение · #7 |
|
Создано: 09 сентября 2013 19:30 · Личное сообщение · #8 neomant А с Immunity Debugger разве не идёт инсталл питона 2.7? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 09 сентября 2013 19:36 · Поправил: mysterio · Личное сообщение · #9 ----- Don_t hate the cracker - hate the code. |
|
Создано: 09 сентября 2013 19:54 · Личное сообщение · #10 Всё оказалось проще: python не ставился нормально под Windows 7 64, на XP 32 встал нормально и кинул свою python27.dll. Прикрутил optimice и... как всегда и сразу же разочаровался. Ничего заявленного в демо не увидел, зато на первых попавшихся двух приложениях на точке входа плаг вылетает с ошибками. Сегмент новый создан, но он пуст. ----- Следуй за белым кроликом |
|
Создано: 09 сентября 2013 19:55 · Личное сообщение · #11 > авно назревает идея написания такого инструмента Какого инструмента, вообще о чём вы говорите. Сия задача даже людям не под силу, в случаи пермутации. Давай, пробуй. Пиши | Сообщение посчитали полезным: dosprog |
|
Создано: 09 сентября 2013 20:24 · Личное сообщение · #12 можно еще такого зверя вспомнить жаль канул в лету вместе с его авторами хотя примеры работы вроде как кого то даже устроили по выхлопу |
eXeL@B —› Основной форум —› Деобфускация нативного кода. |