eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

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

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

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

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

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

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

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 13 августа 2009 10:19 New!
Цитата · Личное сообщение · #2

чтобы понять стурктуру протектора - нужно разбирать стуртуру протектора, а именно ВМ, т.к. вся основная логика находится там.

в твоем доке по сути вообще ничего нет!!! ну показал ты как проиходит декомпрессия кода фемиды + как она заполняет первоначальный импорт после поиска базы kernel32.dll и переходит на свой основной код.

это вообще самый первый слой. в нем и так нет смысла, это считай что фемиду накрыли UPX и ты счас снял UPX.

далее ты идешь в код фемиды, где она подгрузит копии kernel32.dll, user32.dll, advapi32.dll и сама оттуда себе заполнит импорт.
далее идет антиотладка: дешифрует строки со всякими дровами, именами окон, и ищет их в процессах.

это и так все известно.

далее идет распаковка коды программы, если есть маркеры, то выделение областей ВМ + настройка антидампа.
далее идет заполение импорта по ее таблице в коде все вызовы в импорт заполняются через 0xE9 (jmp).

ну и се. запуск проги. это все и так было всем известно в общих чертах.

а вот основное что творится в ВМ протектора, это вопрос!!!!!

P.S. неясно зачем делал коментарии для каждой строчки кода, думаешь новичку расписать весь стаб фемиды на 200 листах с коментариями в каждой ?

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

Создано: 13 августа 2009 10:33 New!
Цитата · Личное сообщение · #3

Это только начало. Я просто хотел проверить нужно это кому-то или нет. Стоит продолжать ковырять или нет. А насчет того, что это "всем известно в общих чертах" - так именно что "в общих чертах". Да, я снял UPX. Но я ведь не останавливаюсь - и дешифрую дальше.

Насчет PS: Даже если и так - это что, плохо? Новичкам тоже нужно просвящаться


Статус: Пришелец

Создано: 13 августа 2009 10:35 New!
Цитата #4

Ведь она монстровидная – и поэтому пакует сама себя
Ну я бы сказал что в большинстве протов основной код прота упакован чем-нибудь.

На счёт декомпрессии согласен с RSI. Наверно не стоило так подробно процесс расписывать. Для взлома прота это не нужно.

Тем не менее хорошая работа, наверно долго сидел. А терпение и труд всё перетрут.


Ранг: 1288.1 (!!!!)
Статус: Модератор

Создано: 13 августа 2009 10:49 New!
Цитата · Личное сообщение · #5

blueboar2 пишет:
Я просто хотел проверить нужно это кому-то или нет. Стоит продолжать ковырять или нет

конечно нужно и продолжать стоит. Любая инфа всегда полезна.


Ранг: 500.6 (!)
Статус: Участник

Создано: 13 августа 2009 11:10 New!
Цитата · Личное сообщение · #6

blueboar2 пишет:
Я просто хотел проверить нужно это кому-то или нет.


Нужно. Продолжай дальше.

Ранг: 4.2 (гость)
Статус: Участник

Создано: 13 августа 2009 12:23 New!
Цитата · Личное сообщение · #7

Конечно нужно, и хотя на форум обратился я сам, я имею несколько десятков друзей каторые страдают от этой ошибке посиживая на Windows 7. Я не могу на языке програмирования написать логику Themida но кое что я знаю.

Ранг: 4.2 (гость)
Статус: Участник

Создано: 13 августа 2009 12:26 New!
Цитата · Личное сообщение · #8

Предупреждаю, что фемида настолько самоупорядовачная что может удалять файлы, я знаю два из них oreans.sys и oreans32.sys


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 13 августа 2009 12:30 · Поправил: OKOB New!
Цитата · Личное сообщение · #9

blueboar2 пишет:
Но не будете же вы спорить, что один раз ее дизассемблировав второй и последующие разы пойдут проще?


Буду спорить...
Подход топикстартера к Фиме в корне неверен. И больше чем формирование усидчивости ничего не даст. Фима - аля набор кубиков и из этих кубиков в зависимости от опций защиты и положения звезд на небе формируется стаб защиты. При этом при одних и тех-же опциях защиты порядок следования большинства "кубиков" произвольный, раскриптовщики участков генерируются каждый раз разные, или находящиеся в коде перед участком или висящие на 16 потоках. При всем этом и сами участки-кубики и декрипторы каждый раз уникальным образом обсфуцированы. Из версии в версию все больше из них покрыты виртуальной машиной. Посему применяемый подход для дальнейшего использования результатов потребует кропотливой деобфускации кода и однозначной идентификации его с опцией защиты. Находящееся под ВМ вообще останется скрытым так как добраться до него при таком подходе не удастся.

В этом случае верным подходом является работа все-же в статике с нерабочим дампом самой Фимы, где в юните AsmBridge в необсфуцированном виде можно найти все "кубики" и код настраивающий константы в коде этих кубиков до обфускации, криптования или виртуализации и т.п.


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 13 августа 2009 12:35 New!
Цитата · Личное сообщение · #10

Skarabey пишет:
Предупреждаю, что фемида настолько самоупорядовачная что может удалять файлы, я знаю два из них oreans.sys и oreans32.sys


Её файлы, что хочет то и делает. Они все равно сидят у нее в середине стаба и по необходимости она их всегда "сгенерит". Кроме указаных тогда еще узнай oreans64.sys и xprot.vxd.

Ранг: 4.2 (гость)
Статус: Участник

Создано: 13 августа 2009 12:42 · Поправил: Skarabey New!
Цитата · Личное сообщение · #11

blueboar2

Надеюсь тебе это поможет в твоих иследованиях:
ссылка:http://wasm.ru/article.php?article=themida2005

файл:
{ Атач доступен только для участников форума } - themi.docx

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

Создано: 13 августа 2009 13:33 New!
Цитата · Личное сообщение · #12

Добрался я таки до виртуальной машины. Нашел список подпрограмм (для каждого опкода) и саму "виртуальную программу". Вполне может быть что там не одна ВМ, или это ВМ для Themida, а для программы своя. Но самое главное, что процесс идет и это радует. Документ по указанному мной адресу обновил.

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

Создано: 13 августа 2009 13:43 New!
Цитата · Личное сообщение · #13

Skarabey: Этот документ я еще год назад читал


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 13 августа 2009 15:35 · Поправил: OKOB New!
Цитата · Личное сообщение · #14

blueboar2 пишет:
Добрался я таки до виртуальной машины.

И немного повезло - это похоже CISC виртуальная машина (опкоды однобайтовые) и основной цикл ее из стааааарой Фимы в чистом виде выглядит так:
Code:
  1.                 nop
  2.                 nop
  3.                 pusha
  4.                 pushf
  5.                 cld
  6.                 call    $+5
  7.                 pop     edi
  8. loc_570DC6:
  9.                 sub     edi, 11111111h
  10.                 mov     eax, edi
  11. loc_570DCE:
  12.                 add     edi, 11111111h
  13.                 cmp     eax, [edi+2Ch]
  14.                 jnz     short loc_570DDB
  15.                 jmp     short loc_570DEE
  16. loc_570DDB:
  17.                 mov     [edi+2Ch], eax
  18. loc_570DDE:
  19.                 mov     ecx, 11111111h
  20.                 jmp     short loc_570DEA
  21. loc_570DE5:
  22.                 add     [edi+ecx*4+3Ch], eax
  23.                 dec     ecx
  24. loc_570DEA:
  25.                 or      ecx, ecx
  26.                 jnz     short loc_570DE5
  27. loc_570DEE:
  28.                 mov     esi, [esp+24h]
  29.                 mov     ebx, esi
  30.                 add     esi, eax
  31.                 mov     eax, [edi+30h]
  32.                 mov     ecx, 1
  33. loc_570DFE:
  34.                 lock cmpxchg [edi+30h], ecx
  35.                 jz      short loc_570DFE
  36.                 nop
  37.                 nop
  38.                 lodsb
  39.                 movzx   eax, al
  40.                 jmp     dword ptr [edi+eax*4]


а вот это проверка флага занятости виртуальной машины в ее контексте lock cmpxchg [edi+30h], ecx

получено так как советовалось в посте 9. Двойные NOPы по тексту листинга, разметка Фимы для участков кода которые не должны быть подвергнуты обфускации.

А что касается описаной процедуры распаковки, то это стандартный aPLib depack, он всюду используется в Фиме.



{ Атач доступен только для участников форума } - depack.asm

Ранг: 4.2 (гость)
Статус: Участник

Создано: 13 августа 2009 16:37 New!
Цитата · Личное сообщение · #15

А словами для новичка, что надо сделать???


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 13 августа 2009 16:53 New!
Цитата · Личное сообщение · #16

Skarabey пишет:
что надо сделать???


Сделать с чем?? Если с тем, что падает под Семеркой, то если старая Фимида, то ничего не сделаешь (совместимость заявлена начиная с версии 2.0.6.0 - [+] Fully tested against Windows 7 beta)

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

Создано: 13 августа 2009 18:26 New!
Цитата · Личное сообщение · #17

OKOB, я конечно понимаю, ты умный и все такое. Но есть одно НО. Может ты все и знаешь о фемиде, чего рассказываешь. И я даже готов поверить что твой способ ее взлома действенен и лучше моего погружения.

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

Если сказать что косинус это такая функция, которая получается извлечением корня из единицы минус квадрата синуса, это может будет и правильно математически, но изучающему или новичку абсолютно ничего не даст. А когда он выучит синусы и косинусы, до всего этого он дойдет сам.

Извините, если обидел или резко выразился. Это ИМХО


Ранг: 233.1 (наставник)
Статус: Участник

Создано: 13 августа 2009 19:23 · Поправил: OLEGator New!
Цитата · Личное сообщение · #18

blueboar2 пишет:
Как подопытный кролик пошел The Bat 4.0.24

а вроде там юзается старая версия темиды.
Лучше всётаки практиковаться на свежих?
Текущая Beta-версия The Bat! - v4.2.9.6
_http://www.ritlabs.com/download/files3/the_bat/beta/tb4296.rar
заоодно и страждующим на руборде поможешь
RSI пишет:
неясно зачем делал коментарии для каждой строчки кода

Опытному человеку это кажется через чур, а для новичков - самое то!

2 blueboar2:
Небольшое пожелания...
Если собрался досконально разбираться, то плиз распиши подробно как и по каким признакам темида определяет, что запущена под виртуальной машиной (Vmware, Virtbox и тд)
з.ы.
палишься...
Сотри в свойствах дока инфу о предприятии...
ворд- зло

Ранг: 35.3 (посетитель)
Статус: Участник

Создано: 13 августа 2009 21:21 · Поправил: neprovad New!
Цитата · Личное сообщение · #19

2 blueboar2:
имхо начинать разобраться с виртуальной машиной лучше со своих образцов. Делаем простое приложение, допустим на Delphi, защищаем его с нужными настройками вирт. машины, убираем упаковку и прочие опции, чтоб они не мешали исследованию и начинаем смотреть как все это будет выглядеть внутри вм.
Code:
  1. program Demo03;
  2. {$APPTYPE CONSOLE}
  3.  
  4. begin
  5.  asm
  6.   DB $eb,$fe
  7.  end;
  8.  {$I VM_Start.inc}
  9.  asm
  10. @xx:
  11.   nop;
  12.   nop;
  13.   nop;
  14.   nop;
  15.   mov eax,1
  16.   nop;
  17.   mov ebx,2
  18.   nop;
  19.   mov ecx,3
  20.   nop;
  21.   mov edx,4
  22.   nop;
  23.   mov esi,5
  24.   nop;
  25.   mov edi,6
  26.   nop;
  27.   rol eax,9
  28.   nop;
  29.   xor eax,eax
  30.   nop;
  31.   nop;
  32.  end;
  33.  {$I VM_End.inc}
  34. end.

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 13 августа 2009 22:46 New!
Цитата · Личное сообщение · #20

blueboar2 пишет:
Но где описание твоего способа? На русском и по пунктам


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

а то что-то пошло такое понятие, что мол взлом программы это 1,2,3,4,5. и все.

P.S. это мое ИМХО. но сама задумка по исследованию хороша!

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 14 августа 2009 03:31 New!
Цитата · Личное сообщение · #21

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

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

+1
А вообще нормальный подход чел сам пытается разобраться . А подход верен или не верен вопрос риторический . Не бросит фиму может наработает свой подход.


Ранг: 539.1 (!)
Статус: Участник
оптимист

Создано: 14 августа 2009 04:39 · Поправил: ClockMan New!
Цитата · Личное сообщение · #22

blueboar2 пишет:
Но где описание твоего способа? На русском и по пунктам. Для новичков

на разбор сложного прота могут уйти годы и делиться этими знаниями со "сканерами" (наверное за эти слова меня запинают) не кому неохото темболее это может приносить неплохой доходНовичёк пускай начинает с upx

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

Создано: 14 августа 2009 05:21 New!
Цитата · Личное сообщение · #23

Ну и как вас понять . Одни говорят что молодец, продолжай в том же духе, ура. А другие - нафига делиться с новичками, себе же хуже.


Ранг: 539.1 (!)
Статус: Участник
оптимист

Создано: 14 августа 2009 05:27 New!
Цитата · Личное сообщение · #24

blueboar2 пишет:
Ну и как вас понять

Решать тебе что сосвоими знаниями делать
blueboar2 пишет:
себе же хуже

Мне хуже от этого нестанет может кому небуть другому


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 14 августа 2009 11:08 New!
Цитата · Личное сообщение · #25

blueboar2 пишет:
Извините, если обидел или резко выразился

Да ради бога, на то оно и ИМХО.
А по делу... Я тебе предлагаю удочку, а ты хочешь сразу жареную рыбу.
Тем более, что ты смело перешагнул через ту всю инфу, что есть в сети и решил изобрести свой велосипед.
А по пунктам того, что я тебе советую:
1) берешь старую версию Фимы, именно Фимы, а не приложение защищенное ею, хотя она собою и защищена (начиная с версии 1.8.0.0).
2) берешь UnThemida v3.0 (ColdFever) TmdUnPacker v2.0 (okdodo) и "распаковываешь"
3) Далее грузишь в ИДУ и ищешь строку 'AsmBridge'
4) И исследуешь ниже этого адреса (много кусков покрыто ВМ и покриптовано wsprintf)

Если последуешь совету и возьмешь версию 1.8.5.5, то поделюсь ключами для wsprintf

OLEGator пишет:

распиши подробно как и по каким признакам темида определяет, что запущена под виртуальной машиной (Vmware...


Vmware стандартным образом
Code:
  1.                 mov     ecx, 0Ah
  2.                 mov     eax, 4855D704h
  3.                 add     eax, 0DF78164h  ; 564D5868h = 'hXVM'
  4.                 mov     ebx, 8685D465h
  5.                 mov     edx, 34B640h
  6.                 sub     edx, 345FE8h    ; 5658h = 'VX'
  7.                 in      eax, dx
  8.                 cmp     ebx, 'VMXh'
  9.                 jnz     short loc_5AA389
  10.                 mov     ss:VMWare_flag[ebp], 1
  11. loc_5AA389:

Ранг: 1.7 (гость)
Статус: Участник

Создано: 14 августа 2009 17:35 · Поправил: Модератор New!
Цитата · Личное сообщение · #26

to blueboar2
Продолжай в том же духе, когда вертолёт изобрели, его тоже пинали мол нах нам нужен, планеры рулят, етс...

Без не по сабжей обойтёсь, и так топик не совсем подлежит основному форуму ввиду флуда, но я пока терплю

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

Создано: 17 августа 2009 07:35 New!
Цитата · Личное сообщение · #27

Документ обновил. Разобрал, как выбирается команда из потока и перешел на первый обработчик


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 17 августа 2009 11:04 · Поправил: OKOB New!
Цитата · Личное сообщение · #28

to blueboar2

упорно идешь своим путем, тогда хоть вместо того, чтобы выполнять деобфускацию в 8 дублей используй наработки других
http://www.woodmann.com/forum/showthread.php?t=12015
а в 23 посте в этом же топе попытка замутить дизасм КИСК виртуальной машины. Подход там исследовательский, но можно юзать - только нужно хэндлеры подеобфускатить и поставить их в соответствие с опкодами.

Архив из 23 поста не качается поэтому в прицепе

{ Атач доступен только для участников форума } - rev.rar

Из 1го тоже (в редактировании файл не цепляется, поэтому постом ниже)


Ранг: 520.1 (!)
Статус: Участник
Победитель турнира 2010

Создано: 17 августа 2009 11:08 New!
Цитата · Личное сообщение · #29

Сырцы деобфускатора из 1го поста в www.woodmann.com/forum/showthread.php?t=12015

{ Атач доступен только для участников форума } - oreans.rar

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

Создано: 17 августа 2009 11:58 · Поправил: blueboar2 New!
Цитата · Личное сообщение · #30

Я читал про этот "деобфускатор". Мне пока удобнее делать вручную. Возможно потом я устану и напишу что-нибудь свое. Возможно я изобретаю велосипед. Но его интересно изобретать .

Файл переименовал http://bigblueboar.narod.ru/kill_themida.rar - там теперь два файла

И потом - я правильно понимаю, что запаковав одну и ту же программу ДВА раза (с одними опциями) мы получим абсолютно идентичные виртуальные машины с одинаковыми же командами, они будут отличаться лишь:

- Степенью обфускации (т.к. она зависит от генератора случайных чисел)
- Сами опкоды будут другие, так как зависят от ключа (BL). Но после расшифровки будут опять одинаковыми
- Может они будут и разными, но только в том случае, если в "виртуальных опкодах" тоже есть динамические опкоды или свой вид обфускации, зависящий от случайных чисел
. 1 . 2 . 3 . >>
 eXeL@B —› Протекторы —› Исследование защиты Themida

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS