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

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


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

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

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

 eXeL@B —› Протекторы —› Статическая трассировка кода
<< . 1 . 2 . 3 . 4 . 5 . 6 .
Посл.ответ Сообщение

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 11 декабря 2017 18:39 · Поправил: Boostyq New!
Цитата · Личное сообщение · #1

Всем привет,
Изучаю x86 драйвер, он защищен с помощью vmp
Случай достаточно простой, только некоторые функции мутированы (обфусцированы?), даже нет внешней упаковки
Для того чтобы посмотреть обфускацию целиком, нужна трасса от и до
Дебажить его у меня нет возможности, да и вообще хочу попробовать сделать это статически
Возможно идея глупая, но что если написать упрощенный процессор с обработкой нужных инструкций (операции стека, прыжки, вызовы), который бы "выполнял" код до тех пор пока не встретиться выход из функции
Правда не ясно что делать c вызовами API, stdcall мы же очищаем стек, но вот с другими соглашениями?
Дело даже не в проте, а вообще в целом
Я пыталась делать парсер конкретных команд под конкретный прот, но дело в том, что это не возможно реализовать, ибо число нелогичных приемов может быть очень большое, поэтому нужно спуститься на самый нижний уровень, для того чтобы выполнять код как сам процессор это делает
Возможно кто-то даст дельный совет, может кто-то уже делал подобное?
Так же я пыталась найти псевдо-код, как процессор выполняет команды, т.к. вмпрот любит использовать редкие команды, может у кого то есть линки?
Спасибо


Ранг: 314.0 (мудрец)
Статус: Участник

Создано: 24 декабря 2017 22:20 · Поправил: difexacaw New!
Цитата · Личное сообщение · #2

Boostyq

Нашёл через гугл --> Link <--

Именно из за этой инфы(in/out-f/r) я когдато и использовал beadisasm. Сейчас это умеет ксед.

Добавлено спустя 16 минут
Покопался в архивах и нашёл пример регистровой свёртки. Там даже крины есть

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

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 24 декабря 2017 22:36 New!
Цитата · Личное сообщение · #3

difexacaw пишет:
Нашёл через гугл

Спасибо, действительно очень полезная табличка по флагам
Однако все равно не ясно, мб вмпрот использует, то что процы не записывают undefined
Хотя на его месте я бы так не делала, неизвестно, что будет на новых процах и т.п.


Ранг: 524.9 (!)
Статус: Участник
_Вечный_Студент_

Создано: 25 декабря 2017 09:25 New!
Цитата · Личное сообщение · #4

VodoleY пишет:
надо выпросить у вамита сорцы


а что, есть надежда?

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

Создано: 25 декабря 2017 09:47 New!
Цитата · Личное сообщение · #5

VodoleY пишет: либо по difexacaw делать универсал

Смешно, да нуб он который несколько лет здесь в каждой второй теме писал о графах, а как оказалось он в них разбирается чуть лучше чем никак и с vmprotect аналогично, был уже эпичный фейл с фимкой.

VodoleY пишет: т.е. надо делать свой ллвм.. т.е полноценный компилер

Зачем, что во что будем компилировать, тем более полноценно? LLVM не считаю каким то особо сложным проектом в котором невозможно разобраться (по нему даже книга есть), chrome сложнее, а gcc хуже по состоянию кода и количеству легаси.

VodoleY пишет: тот же инт в соразрабы полез.. почитал.. отвалился

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

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 25 декабря 2017 12:29 New!
Цитата · Личное сообщение · #6

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

Вы абсолютно правы, все говорят, чтобы я попробовала, но с чего они вообще взяли, что я достойна >.<
Насчет теории конечно верно, но так же нужно вручную изучить вм, а уже потом куда-то прыгать
Вот например, обфускацию вмп я теперь понимаю лучше, пытаюсь написать автоматическое решение, а уже после можно думать о более верных вариантах с llvm или другой оптимизацией

| Сообщение посчитали полезным: shellstorm



Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 25 декабря 2017 12:49 New!
Цитата · Личное сообщение · #7

plutos пишет:
а что, есть надежда?

Надежда есть всегда, нужно только показать свои знания, умения и желание работать над проектом


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

Создано: 25 декабря 2017 13:31 · Поправил: Bronco New!
Цитата · Личное сообщение · #8

shellstorm пишет:
о качестве проекта

Проект имеет выхлоп, и весьма убедительный.
По разным слухам, на текущий момент, не считая авер контор (?), имеются ещё четыре(!) независимых источника с положительным результатом.
Все в привате, в паблик обсуждениях участия практически не принимают. Итого , за более чем 12 лет, всего пять более менее за конченых проектов, что говорит о сложности механизма обсуждаемой защиты.
В том что на поверхности, прежде всего х86, не полный анализ механизма, и как правило путаница в терминологии.
За 6 страниц топа, не считая постов Вамита, имхо, всего 2 полезных мысли:
1. вместо поиска патернов.. контролите состояние виртуальной машины
2. следующим этапом выделяют логические блоки, с них начинается оптимизация и доказательства лемм
Собственно так далеко с оптимизацией промежуточного кода не заходил, решал в основном разные прикладные задачи, что позволило более менее иметь представление об этому чудовище. Отсюда картина не полная, и остались вопросы:
1.Часто звучал термин пикод, что подразумевает наличие интерпретатора. Такого механизма не обнаружил, и вывод, что это стековая вм, правильный?
2.Сколько вм_регистров в реализации х64?

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

Создано: 25 декабря 2017 13:42 · Поправил: shellstorm New!
Цитата · Личное сообщение · #9

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

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

Bronco пишет: За 6 страниц топа, не считая постов Вамита, имхо, всего 2 полезных мысли

Полезность штука субъективная и думаю сами понимание, что разбор vmprotect это чистая коммерция, людей которых могут не так и мало, а вот готовых выкатить что то на паблик единицы.
1. Стековый\регистровый конечный автомат. в BH вроде бы за 2015 год был частичный разбор прота, опкоды, архитектура и вот это все.
2. Хз, я кроме скромно накрытого анпакми ничего не видел под x64. Нужен либо сам прот, либо куча анпакми с вариациями опций.

| Сообщение посчитали полезным: Bronco



Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 25 декабря 2017 13:47 New!
Цитата · Личное сообщение · #10

1.Часто звучал термин пикод, что подразумевает наличие интерпретатора. Такого механизма не обнаружил, и вывод, что это стековая вм, правильный?
Пикод есть в любом вмпроте, но это не значит что должен быть отдельный интерпретатор. До 3ей версии он был (цикл вм и таблица хендлеров), начиная с 3ей версии он стал распределенным (пикод интерпретируется в вм на лету) - цикл вм и таблица хендлеров отсутствует, но тела всех обработчиков (примитивов вм) остались.
Да, здесь стековая вм.
2.Сколько вм_регистров в реализации х64?
х64 не изучал, а для х32 - 16 регистров вм.

| Сообщение посчитали полезным: Bronco


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

Создано: 25 декабря 2017 14:02 New!
Цитата · Личное сообщение · #11

Другой разбор, куда скромнее, но ТС может будет интересно.

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

| Сообщение посчитали полезным: Boostyq, plutos


Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 25 декабря 2017 14:02 · Поправил: dosprog New!
Цитата · Личное сообщение · #12

VodoleY пишет:
кстати.. создатель поляк.. это между прочим.. один из первых метополиморфов..

Болгарин. На отладку, по слухам, ушло более года.
А поляки ничем никого не удивляли, почему-то.


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

Создано: 25 декабря 2017 14:11 New!
Цитата · Личное сообщение · #13

А есть у когонибудь древние vmp? Хочу покопать и крелку показать, что он нуб и овощь на примере солверов и прочего сферического говна в вакууме

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

Создано: 25 декабря 2017 14:13 New!
Цитата · Личное сообщение · #14

SegFault пишет: А есть у когонибудь древние vmp? Хочу покопать и крелку показать, что он нуб и овощь на примере солверов и прочего сферического говна в вакууме

этому пациенту ничего нельзя доказать, самого прота у меня к сожалению нет, а анпакми можно взять здесь: https://github.com/0xbadc0de1/VmP_DBG

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

Создано: 25 декабря 2017 15:02 New!
Цитата · Личное сообщение · #15

SegFault пишет:
А есть у когонибудь древние vmp?

Достаточно древние ?
v0.71 _http://rgho.st/7S4zgVrJL
v0.73 _http://rgho.st/6l6cLXY5h

| Сообщение посчитали полезным: ARCHANGEL


Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 28 декабря 2017 01:00 New!
Цитата · Личное сообщение · #16

dosprog пишет:
Болгарин. На отладку, по слухам, ушло более года.
А поляки ничем никого не удивляли, почему-то.

у меня ушло 3 месяца

Добавлено спустя 4 минуты
причем если вы эту тварь смотрели.. там по очереди надо 6 прерываний в определенном порядки отключать.. вобщем гадость. еще та.. но занятная до ушаса.. я кстати до сих пор генератор псевдо случайных.. от него тоскаю... он для морфа использовался

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 28 декабря 2017 15:44 · Поправил: dosprog New!
Цитата · Личное сообщение · #17

[offtop]
Нет, не ковырял его как следует.
Всё ограничилось только тем, что в начальных секторах диска поправил расширения COM и EXE, убрал крипчение новых секторов и поудалял попорченные исполняемые файлы. Какое-то время оно так и работало, компьютер-то был чужой. А потом всё переформатировал заново и всех делов, - когда все данные там зарезервировали.
Образ остался с тех пор - лежит, думал полностью его отдизасмить, в принципе, там на пару-тройку тысяч строк текста получилось бы - но руки так и не дошли.
Да и необходимости такой не было - вещь довольно занудная.
Так тот архив и лежит до сих пор без дела: --> Link <--.
.. двадцать лет, псд..
[/offtop]


Ранг: 524.9 (!)
Статус: Участник
_Вечный_Студент_

Создано: 19 января 2019 01:28 New!
Цитата · Личное сообщение · #18

SegFault пишет:
Еще есть Metasm, с помощью него недавно неплохая статья вышла по деобфускации VM в ci.dll (виндовая security либа ).


Никто не пробовал установить эту штуку?
У меня почему-то при команде
hg clone https://www.cr0.org/progs/metasm/hg/ metasm

Вылетает ошибка HTTP error 404 Not found, The requested URL /hg/ was not found on this server.

хотя сайт вроде бы на месте, но что-то да не так.
Кто-нибудь может попробовать и сказать что получилось?
Спасибо!

Ранг: 370.2 (мудрец)
Статус: Участник

Создано: 19 января 2019 01:52 · Поправил: ntldr New!
Цитата · Личное сообщение · #19

Как отключить функции ci.dll, либо подменить их на свои. Простой пример универсального кода, работает от Vista SP0 до Последней 10ки. Публикую чтобы поржать как легко обходится вся эта безопасность через неясность, которой увлекается Microsoft.

Code:
  1. #define in_reg(a,base,size) ( (>= base) && (< base+size)  )
  2.  
  3. PIMAGE_SECTION_HEADER pe_find_section_unsafe(IN PVOID image, IN PCSTR name)
  4. {
  5.          PIMAGE_DOS_HEADER     d_head = (PIMAGE_DOS_HEADER)image;
  6.          PIMAGE_NT_HEADERS     n_head = (PIMAGE_NT_HEADERS)((PUCHAR)d_head + d_head->e_lfanew);
  7.          PIMAGE_SECTION_HEADER p_sect = IMAGE_FIRST_SECTION(n_head);
  8.  
  9.          for (USHORT i = 0; i < n_head->FileHeader.NumberOfSections; i++, p_sect++) {
  10.                  if (strcmp(p_sect->Name, name) == 0) return p_sect;
  11.          }
  12.          return NULL;
  13. }
  14.  
  15. static void search_ci_callbacks_in_kernel(IN PVOID KernelBase, IN PVOID CI_DllBase)
  16. {
  17.          PIMAGE_SECTION_HEADER p_kernel_data = pe_find_section_unsafe(KernelBase, ".data");
  18.          PIMAGE_SECTION_HEADER p_ci_page     = pe_find_section_unsafe(CI_DllBase, "PAGE");
  19.          
  20.          if (p_kernel_data == NULL || p_ci_page == NULL) {
  21.                  return;
  22.          }
  23.  
  24.          PUCHAR ptr = ((PUCHAR)KernelBase + p_kernel_data->VirtualAddress);
  25.          PUCHAR end = (ptr + p_kernel_data->Misc.VirtualSize - sizeof(ULONGLONG));
  26.          PUCHAR function_ptr = NULL;
  27.          ULONG  found_count = 0;
  28.  
  29.          for (; ptr < end; ptr += sizeof(ULONGLONG))
  30.          {
  31.                  PUCHAR pointer = *(PUCHAR*)ptr;
  32.                  if (!in_reg(pointer, (PUCHAR)CI_DllBase + p_ci_page->VirtualAddress, p_ci_page->SizeOfRawData)) continue;
  33.                  DbgMsg("ptr = %p, ciCallback = %p\n", ptr, pointer);
  34.          }
  35. }


Функция search_ci_callbacks_in_kernel запущенная в kernel mode распечатывает список адресов CI калбеков и указателей на них в секции данных ядра. Сделав *((PVOID*)ptr) = my_function можно заменить функции безопасности на свои, винда хавает и не хрюкает.

Количество, очерёдность, названия и назначения CI каллбеков в разных версиях винды отличаются. Дизассемблер вам в руки, смотрите начиная с экспортируемой функции CiInitialize, в которой идёт заполнение структуры каллбеков и разберётесь что где как.

PS: для большей стабильности можно добавить проверку выравнивания адресов CI функций на 16, но оно и так отработает без ложняков.

| Сообщение посчитали полезным: plutos, dosprog, Orlyonok, mak, rthax, dezmand07


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

Создано: 19 января 2019 15:44 New!
Цитата · Личное сообщение · #20

plutos

На гитхаб ходили? https://github.com/jjyg/metasm/

Ранг: -12.1 (нарушитель)
Статус: Участник

Создано: 19 января 2019 22:33 New!
Цитата · Личное сообщение · #21

plutos, какую хорошую тему вы затронули . Буквально недавно подумал о том, что нужно бы попробовать поработать с подобными программами. А тут оказывается все не так просто. Для обфусцированного кода, говорят, хорошая вещь. Даже Ида с ней не сравнится, потому-как не "заточена" под это (разве, что плугины какие-нибудь есть).

Если не трудно, напишите позже удалось вам запустить Metasm и какие первые впечатления?

P.S. Есть еще подобные программы и, вроде-как, не хуже Metasm, а в чем-то может даже и лучше - это Miasm и VxStripper. Может кто-нибудь работал с этими программами? Интересно было бы узнать мнение - стоит тратить время на эти программы или нет?


Ранг: 524.9 (!)
Статус: Участник
_Вечный_Студент_

Создано: 20 января 2019 04:07 · Поправил: plutos New!
Цитата · Личное сообщение · #22

Diabolic пишет:
На гитхаб ходили?

Тут дело не в гитхаве. Metasm у меня был установлен и работал как часы на windows 7. Потом была смена user account'a
а вместе с ней все enviromental variables были потеряны. Вот я и решил обновить Ruby, а вместе с ним и Metasm.
(hg pull -u) или на худой конец просто переустановить с помощью Mercurial hg clone. Но на гитхабе нет gh repository для miasma.
Поэтому я и хочу узнать, что случилось с https://www.cr0.org/progs/metasm/hg/, в этом мой вопрос.

dma пишет:
Если не трудно, напишите позже удалось вам запустить Metasm и какие первые впечатления?P.S. Есть еще подобные программы и, вроде-как, не хуже Metasm, а в чем-то может даже и лучше - это Miasm и VxStripper. Может кто-нибудь работал с этими программами? Интересно было бы узнать мнение - стоит тратить время на эти программы или нет?


Удалось, и какое-то время он у меня исправно работал, а потом перестал. (см. выше)
Впечатления хорошие. С установкой немного пришлось повозиться, но потом все работало. Нужно конечно читать мануалы, но они есть и толковые.
Чтобы убедиться что все хорошо, пробуем ruby -rmetasm -e 'p metasm::VERSION'. Если видим версию , значит успех!

Metasm описан в книге "Practical Reverse Engineering" Chapter 5 ■ Obfuscation (на форуме была ссылка), там есть даже тесты и упражнения.

Great metasm tutorial: --> here<--.

VxStripper - не знаю, не пробовал, а Miasm легко устанавливается на Ubuntu, Kali, FreeBSD.

Время (если оно есть, конечно)тратить стоит, можно много нового узнать. Но это конечно на любителя. Вроде меня.

Update:

На всякий случай еще раз скопировал
select metasm.rb and metasm folder; copy ; goto D:\Ruby24-x64\lib\ruby\2.4.0 ;
paste
(понятно, что D:\Ruby24-x64\lib\ruby\2.4.0 нужно заменить with the directory where you installed ruby) (win)

и все заработало!

Так что вопрос мой отпал как-то сам собою...

| Сообщение посчитали полезным: dma


Ранг: -12.1 (нарушитель)
Статус: Участник

Создано: 20 января 2019 05:19 New!
Цитата · Личное сообщение · #23

plutos, спасибо за относительно подробный ответ и внимание. Когда писал вам вопрос аж руки тряслись от страха . Думал, что или проигнорируют, либо пошлют в гугл или посоветуют искать себя в чем-нибудь другом. Привык уже к стандартным ответам одного о-о-очень известного и авторитетного человека на нашем форуме, который не любит когда его ник в одном посте упоминают больше одного раза .

Ранг: 69.0 (постоянный)
Статус: Участник

Создано: 20 января 2019 06:30 New!
Цитата · Личное сообщение · #24

plutos пишет:
пробуем ruby

Интересный язык, в brew его ковырял..


Ранг: 524.9 (!)
Статус: Участник
_Вечный_Студент_

Создано: 20 января 2019 07:10 New!
Цитата · Личное сообщение · #25

dma пишет:
Когда писал вам вопрос аж руки тряслись от страха


Да ну, это уже лишнее! Мы что, папуасы какие-то?
Подавляющее большинство людей на этом форуме очень знающие, толковые и отзывчивые люди, всегда готовые помочь. Если нормальный вопрос, показывающий, что человек сам думает и ищет, то, как правило, и нормальный ответ.

| Сообщение посчитали полезным: sefkrd, DrVB_5_6


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

Создано: 21 января 2019 20:43 New!
Цитата · Личное сообщение · #26

ntldr пишет:
Как отключить функции ci.dll, либо подменить их на свои

Вот только это проверяется патчгардом в rs5 а может и ниже. Если ты тестил то просто не дождался подарка алсо в 10 там есть колбек который ставится только на хбоксе, вполне возможно он в другом модуле. Ну хотя мало кто захочет похакать хбокс.

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

Создано: 21 января 2019 22:58 New!
Цитата · Личное сообщение · #27

Boostyq пишет:
Так же я пыталась найти псевдо-код, как процессор выполняет команды


--> Link <-- - неплохой сайт где по каждой инструкции есть псевдокод.

Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 21 января 2019 23:43 · Поправил: Boostyq New!
Цитата · Личное сообщение · #28

bartolomeo пишет:
--> Link <-- - неплохой сайт где по каждой инструкции есть псевдокод.

Хе-хе, в мануале интела всего навалом
Но там едва ли актуальная инфа, переводить такие штуки можно с ума сойти
Да и время идет, у меня уже свои таблицы имеются ^^
<< . 1 . 2 . 3 . 4 . 5 . 6 .
 eXeL@B —› Протекторы —› Статическая трассировка кода

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

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