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

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


Ранг: 90.1 (постоянный), 89thx
Активность: 0.290.56
Статус: Участник

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

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

-----
В облачке многоточия





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

Boostyq

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

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

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

cdd3_24.12.2017_EXELAB.rU.tgz - Int29.rar

-----
vx





Ранг: 90.1 (постоянный), 89thx
Активность: 0.290.56
Статус: Участник

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

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

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

-----
В облачке многоточия





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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


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

-----
Give me a HANDLE and I will move the Earth.




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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

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

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

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

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




Ранг: 90.1 (постоянный), 89thx
Активность: 0.290.56
Статус: Участник

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

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

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

-----
В облачке многоточия


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


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

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

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

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

-----
Everything is relative...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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

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

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

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


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

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

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

-----
Everything is relative...


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

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

bd25_25.12.2017_EXELAB.rU.tgz - prez-vmprotect.zip

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

Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

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

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

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





Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

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

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



Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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



Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

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

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

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

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

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

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

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

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

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

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 19 января 2019 01:28
· Личное сообщение · #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.

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

-----
Give me a HANDLE and I will move the Earth.




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 19 января 2019 01:52 · Поправил: ntldr
· Личное сообщение · #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, но оно и так отработает без ложняков.

-----
PGP key <0x1B6A24550F33E44A>


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

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

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

plutos

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



Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

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

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

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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 20 января 2019 04:07 · Поправил: plutos
· Личное сообщение · #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)

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

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

-----
Give me a HANDLE and I will move the Earth.


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

Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

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

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




Ранг: 77.2 (постоянный), 73thx
Активность: 0.190.15
Статус: Участник

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

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

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




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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


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

-----
Give me a HANDLE and I will move the Earth.


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

Ранг: 145.8 (ветеран), 190thx
Активность: 0.140.36
Статус: Участник

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

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

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



Ранг: 42.8 (посетитель), 16thx
Активность: 0.020.06
Статус: Участник

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

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


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




Ранг: 90.1 (постоянный), 89thx
Активность: 0.290.56
Статус: Участник

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

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

Хе-хе, в мануале интела всего навалом
Но там едва ли актуальная инфа, переводить такие штуки можно с ума сойти
Да и время идет, у меня уже свои таблицы имеются ^^

-----
В облачке многоточия



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


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