Из спортивного интереса разбираю бинарник трояна SpyEye ( SpyEye_binary_1d1f81a3c11ee4300752db47c61496db ), в следствии чего появилось пару вопросов, так как я недавно начал заниматься этим увлекательным делом. И так, первый уровень насколько я понял это UPX, "снимается" на ура. После снимаю дамп, заранее вписав новую точку входа. Правлю checksum и запускаю файл снова в OllyDBG. Дальше я делаю bp VirtualAlloc и ставлю бряк на запись в выделенную память. Куда копируется "некоторая функция" Переход в эту функцию идет так, скажем если выделенная память находится в : push 200000 + F31 ret Значит вопросы. Перед переходом к 200F31 есть вызов двух функций: Код (Text): 00438382 50 PUSH EAX 00438383 68 63633200 PUSH 326363 00438388 E8 C6040000 CALL spyeye.00438853 < -- one 0043838D E8 7F94FCFF CALL spyeye.00401811 < -- two 00438392 C3 RETN Код (Text): 00438853 55 PUSH EBP 00438854 8BEC MOV EBP,ESP 00438856 81C4 ACFEFFFF ADD ESP,-154 0043885C C9 LEAVE 0043885D C2 2800 RETN 28 Код (Text): 00401811 55 PUSH EBP 00401812 8BEC MOV EBP,ESP 00401814 81C4 18FFFFFF ADD ESP,-0E8 0040181A C9 LEAVE 0040181B C3 RETN Объясните мне плиз, зачем нужны эти функции ? Я вижу что они ничего не делают, стало быть это "запутывание" ? Дальше идет самое интересное. Я скопировал участок кода, куда переходит управление, в иду и вот что я вижу в "точке входа" Код (Text): .code:00000F31 push ebp .code:00000F32 mov ebp, esp .code:00000F34 add esp, 0FFFFF634h .code:00000F3A push ebx .code:00000F3B jmp loc_C9 Прыгаем сюда : Код (Text): push esi .code:000000CA push edi .code:000000CB call sub_A2F .code:000000D0 test dword ptr [ebp-8], 800h .code:000000D7 jmp loc_6AA Прыгаем сюда : Код (Text): jnz loc_1DC .code:000006B0 push 7465C950h .code:000006B5 call sub_FD1 .code:000006BA mov ebx, eax Ну и так далее начинаются прыжки из блока в блок. Путем трейсинга и визуального анализа ( find ret ) я "выдернул" вот такую функцию : http://www.everfall.com/paste/id.php?fcg0rzl8e017 Ясно видно что код размазали на блоки, вопрос есть ли средства для автоматического восстановления таких функций ? Или все же это трассировка и ручной анализ ? P.S. бинарь запакованный\распакованный прилагаю P.S.S сильно не ругайтесь если это какая-нибудь стандартная хрень
Вот вся функция : http://www.everfall.com/paste/id.php?jzobu0q2d1ra Нет, можно конечно протрейсить и понять, но не легче ли снять "запутывания" ( или как оно называется ? ) и засунуть код в Hex-Ray P.s. меня больше интересует не анализ этой функции в hex-rays, а быстрое и удобное решение таких проблем.
В общем дамп снят, файл ушел к Иде, если у кого нибудь есть ответ на мой вопрос по поводу автоматизации то топик можно не закрывать, а меня в дурдом за мой монолог %)
Восстанавливается элементарно в IDA ( строим граф из базовых блоков, определяем циклы, для всех jmp нодов _не_ циклов присоединяем блоки в которые прыгает джамп ), через idc/плагин/idapython.
Если нет Case-ветвлений, то пересобрать процедуру очень просто. Иначе автоматический RCE проблемный, в основном изза избыточности массивов.