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

 eXeL@B —› Протекторы —› Исследование защиты Themida
<< . 1 . 2 . 3 .
Посл.ответ Сообщение

Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 13 августа 2009 09:51 · Поправил: blueboar2
· Личное сообщение · #1

Решил тут поразбираться со страшным зверем которого зовут Themida. Причем не так, как большинство - как бы получше сграбить дамп, чтоб проверки протектора обмануть, а именно по хакерски - дизассемблировать и понять структуру протектора.

Я понимаю, что в каждом случае штамм Themida отличается друг от друга (из-за ее возможностей, и разных настроек при запуске). Но не будете же вы спорить, что один раз ее дизассемблировав второй и последующие разы пойдут проще?

Как подопытный кролик пошел The Bat 4.0.24 (авторские права автора The Bat я не нарушаю, так как взламывать его прогу я не собираюсь, а сам использую Outlook). Естественно, пока я Themida не взломал, но несколько шагов уже сделал. Результаты моих изысканий оформил тут:

http://bigblueboar.narod.ru/kill_themida.rar

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



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 23 декабря 2009 23:14
· Личное сообщение · #2

esec.fr.sogeti.com/blog/2009/10/02/71-how-to-implement-a-new-process-in-metasm интересная статтья, думаю в тему. если что не взыщите



Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 25 декабря 2009 12:28
· Личное сообщение · #3

Обновил документ. 15 обработчиков, около 70 разобранных команд виртуальной машины



Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2010 16:16
· Личное сообщение · #4

Итак, первый этап пройден. Виртуальная машина ЗАКОНЧИЛАСЬ. Оно и ежу понятно, что закончилась она только первая VM, а там еще куча предстоит. Но пока она вышла обратно в ассемблерный код и пытается найти экспорты KERNEL32.DLL

А вся виртуалка (к слову сказать около 400 байт) делала следующее:

- Сохранила на стеке некую константу непонятного вида
- Сохранила на стеке базу KERNEL32.DLL (найденную ранее в ассемблерном коде)
- Сохранила на стеке адрес, по которому находится код, запускающий следующую VM

И... все. Для этого нужно 400 байт



Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2010 11:08
· Личное сообщение · #5

Продвинулись далее. В связи с этим откорректированное предыдущее сообщение:

А вся виртуалка (к слову сказать около 400 байт) делала следующее:

- Сохранила на стеке ХЭШ строки 'LoadLibraryExA'
- Сохранила на стеке базу KERNEL32.DLL (найденную ранее в ассемблерном коде)
- Сохранила на стеке адрес, по которому находится код, запускающий следующую VM
- Сохранила букву 'L' в памяти

А ассемблерный код за ней делал следующее

- Нашел экспорты KERNEL32.DLL
- Нашел из них те, что на букву L
- Из них вычислил хэш и нашел функцию LoadLibraryExA
- Сохранил ее адрес.

И снова занырнул в виртуалку. Разбираюсь



Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2010 07:40
· Личное сообщение · #6

Очередное дополнение. Функция все-таки вызывала не LoadLibraryExA, а просто LoadLibraryA. Во второй ВМ она занесла на стек адрес строки 'USER32.DLL' и вызвала LoadLibraryA чтобы ее загрузить. Ковыряю третью ВМ



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 03 февраля 2010 13:25
· Личное сообщение · #7

blueboar2 пишет:
Ковыряю третью ВМ

Это не виртуальные машины.



Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2010 14:04
· Личное сообщение · #8

Да знаю я. Одна виртуальная машина, но разные программы. Извиняюсь за нарушение терминологии




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 03 февраля 2010 14:14
· Личное сообщение · #9

а покрыто ВМ что нибудь такое
Code:
  1. loc_56CAAC:
  2.                 mov     byte ptr ss:SL_1stCharOfProcName[ebp], 'L'
  3.                 push    0D9DA1CE9h      ; kernel32_LoadLibraryA
  4.                 push    ss:SL_hKernel32_fake[ebp]
  5.                 lea     eax, SecurLib_GetProcAddress1[ebp]
  6.                 call    eax
  7.                 push    eax
  8.                 lea     ecx, _USER32_DLL[ebp] ; "USER32.dll"
  9.                 push    ecx
  10.                 call    eax             ; kernel32_LoadLibraryA
  11.                 test    eax, eax
  12.                 jnz     short loc_56CAE2
  13.                 pop     eax
  14. loc_56CAD5:
  15.                 mov     eax, 0
  16.                 lea     ecx, SL_ErrorHandle[ebp]
  17.                 jmp     ecx
  18. loc_56CAE2:
  19.                 mov     ss:SL_hUser32[ebp], eax
  20.                 pop     eax
  21.                 lea     ecx, _ADVAPI32_DLL[ebp] ; "ADVAPI32.dll"
  22.                 push    ecx
  23.                 call    eax
  24.                 test    eax, eax
  25.                 jz      short loc_56CAD5
  26.                 mov     ss:SL_hAdvapi32[ebp], eax
  27.                 cmp     ss:SL_flNT[ebp], 1
  28.                 jnz     short loc_56CB32
  29.                 mov     byte ptr ss:SL_1stCharOfProcName[ebp], 'L'
  30.                 push    0D9DA1CE9h      ; kernel32_LoadLibraryA
  31.                 push    ss:SL_hKernel32_fake[ebp]
  32.                 lea     eax, SecurLib_GetProcAddress1[ebp]
  33.                 call    eax
  34.                 lea     ecx, _NTDLL_DLL[ebp] ; "NTDLL.dll"
  35.                 push    ecx
  36.                 call    eax             ; kernel32_LoadLibraryA
  37.                 test    eax, eax
  38.                 jz      short loc_56CAD5
  39.                 mov     ss:SL_hNtdll[ebp], eax
  40. loc_56CB32:
  41.                 mov     byte ptr ss:SL_1stCharOfProcName[ebp], 'G'
  42.                 push    0A817731Ah      ; kernel32_GetLocalTime
  43.                 push    ss:SL_hKernel32_fake[ebp]
  44.                 lea     eax, SecurLib_GetProcAddress1[ebp]
  45.                 call    eax
  46.                 lea     ecx, dword_56CA8D[ebp]
  47.                 push    ecx
  48.                 call    eax             ; kernel32_GetLocalTime
  49.                 lea     eax, dword_56CA8D[ebp]
  50.                 movzx   ebx, word ptr [eax+0Eh]
  51.                 movzx   eax, word ptr [eax+0Ch]
  52.                 shl     eax, 10h
  53.                 or      eax, ebx
  54.                 shl     ebx, 10h
  55.                 add     ebx, ecx
  56.                 add     eax, 0B8736746h
  57.                 xor     eax, ebx


Адреса конечно-же другие, т.к. версия Фимы другая

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 16.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2010 14:19
· Личное сообщение · #10

А в конце это что? SEED? Или хэш какой-нить? Из времени то




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 03 февраля 2010 16:12
· Личное сообщение · #11

генерятся константы для антидампинга

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 30 октября 2012 14:47
· Личное сообщение · #12

http://bigblueboar.narod.ru/kill_themida.rar

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



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 30 октября 2012 20:23
· Личное сообщение · #13

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

http://zalil.ru/33908860


<< . 1 . 2 . 3 .
 eXeL@B —› Протекторы —› Исследование защиты Themida
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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