Что с этим делать?

Тема в разделе "WASM.RESEARCH", создана пользователем corehook, 28 мар 2011.

  1. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Из спортивного интереса разбираю бинарник трояна SpyEye ( SpyEye_binary_1d1f81a3c11ee4300752db47c61496db ), в следствии чего появилось пару вопросов, так как я недавно начал заниматься этим увлекательным делом.

    И так, первый уровень насколько я понял это UPX, "снимается" на ура. После снимаю дамп, заранее вписав новую точку входа.
    Правлю checksum и запускаю файл снова в OllyDBG.

    Дальше я делаю bp VirtualAlloc и ставлю бряк на запись в выделенную память. Куда копируется "некоторая функция"
    Переход в эту функцию идет так, скажем если выделенная память находится в :
    push 200000 + F31
    ret

    Значит вопросы.
    Перед переходом к 200F31 есть вызов двух функций:
    Код (Text):
    1. 00438382   50               PUSH EAX
    2. 00438383   68 63633200      PUSH 326363
    3. 00438388   E8 C6040000      CALL spyeye.00438853 < -- one
    4. 0043838D   E8 7F94FCFF      CALL spyeye.00401811 < -- two
    5. 00438392   C3               RETN
    Код (Text):
    1. 00438853   55               PUSH EBP
    2. 00438854   8BEC             MOV EBP,ESP
    3. 00438856   81C4 ACFEFFFF    ADD ESP,-154
    4. 0043885C   C9               LEAVE
    5. 0043885D   C2 2800          RETN 28
    Код (Text):
    1. 00401811   55               PUSH EBP
    2. 00401812   8BEC             MOV EBP,ESP
    3. 00401814   81C4 18FFFFFF    ADD ESP,-0E8
    4. 0040181A   C9               LEAVE
    5. 0040181B   C3               RETN
    Объясните мне плиз, зачем нужны эти функции ? Я вижу что они ничего не делают, стало быть это "запутывание" ?

    Дальше идет самое интересное. Я скопировал участок кода, куда переходит управление, в иду и вот что я вижу
    в "точке входа"
    Код (Text):
    1. .code:00000F31                 push    ebp
    2. .code:00000F32                 mov     ebp, esp
    3. .code:00000F34                 add     esp, 0FFFFF634h
    4. .code:00000F3A                 push    ebx
    5. .code:00000F3B                 jmp     loc_C9
    Прыгаем сюда :
    Код (Text):
    1.  push    esi
    2. .code:000000CA                 push    edi
    3. .code:000000CB                 call    sub_A2F
    4. .code:000000D0                 test    dword ptr [ebp-8], 800h
    5. .code:000000D7                 jmp     loc_6AA
    Прыгаем сюда :
    Код (Text):
    1.  jnz     loc_1DC
    2. .code:000006B0                 push    7465C950h
    3. .code:000006B5                 call    sub_FD1
    4. .code:000006BA                 mov     ebx, eax
    Ну и так далее начинаются прыжки из блока в блок. Путем трейсинга и визуального анализа ( find ret ) я "выдернул" вот такую функцию : http://www.everfall.com/paste/id.php?fcg0rzl8e017

    Ясно видно что код размазали на блоки, вопрос есть ли средства для автоматического восстановления таких функций ?
    Или все же это трассировка и ручной анализ ?

    P.S. бинарь запакованный\распакованный прилагаю
    P.S.S сильно не ругайтесь если это какая-нибудь стандартная хрень :)
     
  2. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Вот вся функция : http://www.everfall.com/paste/id.php?jzobu0q2d1ra
    Нет, можно конечно протрейсить и понять, но не легче ли снять "запутывания" ( или как оно называется ? ) и засунуть код в Hex-Ray

    P.s. меня больше интересует не анализ этой функции в hex-rays, а быстрое и удобное решение таких проблем.
     
  3. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Потыкав дальше я начинаю думать что это всего лишь восстановление импорта =\
     
  4. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    В общем дамп снят, файл ушел к Иде, если у кого нибудь есть ответ на мой вопрос по поводу автоматизации то топик можно не закрывать, а меня в дурдом за мой монолог %)
     
  5. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Восстанавливается элементарно в IDA ( строим граф из базовых блоков, определяем циклы, для всех jmp нодов _не_ циклов присоединяем блоки в которые прыгает джамп ), через idc/плагин/idapython.
     
  6. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    Оп, ща попробую
     
  7. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Если нет Case-ветвлений, то пересобрать процедуру очень просто. Иначе автоматический RCE проблемный, в основном изза избыточности массивов.