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

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


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

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

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

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

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

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

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


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

Создано: 18 декабря 2017 10:32 · Поправил: Gideon Vi New!
Цитата · Личное сообщение · #2

Я всё ждал, когда до этого дойдёт. Почему-то все переживали за рилтаймы и прочие страшные вещи и ни кто не спросил, как ТС собирается обрабатывать выхлоп после камланий с бубном. Или все ждали того же? )


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

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

Boostyq пишет:
Получилось около 50.000 строк ассемблера, при это всего 5 вызовов апи внутри, при этом известные мне приемы занимают всего около 8.000 строк

После вмпрота соотношение чистый код / мусор составляет от 1/50 и более, зависит от опций прота.
Вот примерное реальное соотношение кода средней функции с простой виртуализацией без наворотов:
чистый асм код - 1000 строк (~ 7кБ кода), значимый виртуализованный код - 65000 строк, полный код с мусором - около 3 млн. строк.
Такой объем кода вручную "очистить" конечно можно, но сколько на это нужно времени, и уверен, что после 1-2 функций у вас пропадет всё желание заниматься этим.
Вывод: только полноценный декомпилятор может прожевать такие объемы информации за несколько минут.

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


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

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

Gideon Vi пишет:
Я всё ждал, когда до этого дойдёт. Почему-то все переживали за рилтаймы и прочие страшные вещи и ни кто не спросил, как ТС собирается обрабатывать выхлоп после камланий с бубном. Или все ждали того же? )

Начну со сворачивания очевидного трюка с флагами
Инструкции, которые лишь переписывают флаги: cmp(cf,af,of,sf,zf,pf), test(cf,af,of,sf,zf,pf), clc(cf), cmc(cf), bt(cf), stc(cf)
Идем сверху вниз, если в блоке обнаружена инструкция которая изменяет флаги, храним ее адрес, идем дальше, если есть инструкция которая использует какой-либо флаг, то сбрасываем, а если встречаем инструкцию, которая переписывает все эти флаги, тогда инструкцию по адресу можно убрать
Повторяем до тех пор, пока в блоке не будет результатов
Code:
  1. 0x2cd41: bt         cx, sp                           // SP=>0x1CAC; CX=>0x0; CF<=0;
  2. 0x2cd45: mov        byte ptr [ebp - 0xbe], dl        // DL=>0x0; EBP=>0xEFE01FDC; S8(0xEFE01F1E)<=0x0;
  3. 0x2cd4b: cmp        ah, 0xb6                         // AH=>0x0; CF<=1; AF<=1; OF<=0; SF<=0; ZF<=0; PF<=0;
  4. 0x2cd4e: bt         bx, 8                            // BX=>0x3282; CF<=0;
  5. 0x2cd53: clc                                         // CF<=0;
  6. 0x2cd54: mov        edx, eax                         // EAX=>0x0; EDX<=0x0;
  7. 0x2cd56: bt         ax, ax                           // AX=>0x0; AX=>0x0; CF<=0;
  8. 0x2cd5a: stc                                         // CF<=1;
  9. 0x2cd5b: mov        dword ptr [ebp - 0xac], eax      // EAX=>0x0; EBP=>0xEFE01FDC; S32(0xEFE01F30)<=0x0;
  10. 0x2cd61: cmp        bh, 0x1c                         // BH=>0x32; CF<=0; AF<=1; OF<=0; SF<=0; ZF<=0; PF<=0;
  11. 0x2cd64: shr        edx, 0x10                        // EDX=>0x0; EDX<=0x0; CF<=0; AF<=0; OF<=0; SF<=0; ZF<=1; PF<=1; CF<=0; OF<=0;
  12. 0x2cd67: cmc                                         // CF=>0; CF<=0;
  13. 0x2cd68: clc                                         // CF<=0;
  14. 0x2cd69: shr        esi, 0x18                        // ESI=>0x0; ESI<=0x0; CF<=0; AF<=0; OF<=0; SF<=0; ZF<=1; PF<=1; CF<=0; OF<=0;
  15. 0x2cd6c: jmp        0x1dc8c                          // EIP<=0x1DC8C;

Code:
  1. 0x2cd45: mov        byte ptr [ebp - 0xbe], dl        // DL=>0x0; EBP=>0xEFE01FDC; S8(0xEFE01F1E)<=0x0;
  2. 0x2cd54: mov        edx, eax                         // EAX=>0x0; EDX<=0x0;
  3. 0x2cd5b: mov        dword ptr [ebp - 0xac], eax      // EAX=>0x0; EBP=>0xEFE01FDC; S32(0xEFE01F30)<=0x0;
  4. 0x2cd64: shr        edx, 0x10                        // EDX=>0x0; EDX<=0x0; CF<=0; AF<=0; OF<=0; SF<=0; ZF<=1; PF<=1; CF<=0; OF<=0;
  5. 0x2cd69: shr        esi, 0x18                        // ESI=>0x0; ESI<=0x0; CF<=0; AF<=0; OF<=0; SF<=0; ZF<=1; PF<=1; CF<=0; OF<=0;
  6. 0x2cd6c: jmp        0x1dc8c                          // EIP<=0x1DC8C;

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

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

Boostyq
Еще вариант - загнать всё это в IR и прогнать через оптимизирующий компилятор. Помоему даже LLVM поддерживает из коробки constant folding и прочие оптимизации.

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



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

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

Так понимаю логика не фонтан у тс. Может следует пересмотреть задачу с учётом полученных знаний, я бы так сделал.

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

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

difexacaw пишет:
Так понимаю логика не фонтан у тс.

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

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

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

VodoleY
Я бы вообще респект ТС высказал даже за ту работу, которая уже проделана

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



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

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

VodoleY

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


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

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

Boostyq пишет:
Пока не знаю, что дальше делать

у вас есть 5 передач управления на системные апи. имена известны, количество аргументов документировано.
В открытом виде ничего нет - это аксиома. Все указатели, константы и косвенные смещения декриптуются за долго до формирования макроса ресторе контекста, и адреса возврата в вм, это отдельные служебные функции, и они могут повторятся, и наверняка есть в Вашем промкоде. Виртаулизация отдельная тема.
Итого. В среднем до 5-6 инструкций при передачи аргументов для вызова апи, + от 2 до 5 на обработку ретурна, + пролог, +эпилог. Это тот минимум который надо искать. И не советовал бы спешить зачищать это мясо.


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

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

Раз тут заговорили про Symbolic execution, то хотелось бы услышать мнения и отзывы людей, имеющих конкретный опыт непосpедственной работы, со следующими toolkits or frameworks:

KLEE, KLOVER, Pex, Anger, S2E, Triton

Плюсы, минусы, рекомендации.

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

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

plutos пишет: Плюсы, минусы, рекомендации.

Половиной перечисленного пользовался.
Чем лучше или хуже, здесь зависит от языка и целей, а еще, что у DSE есть под капотом, какой используется енжин SMT\SAT, есть ли в наличии транслятор в промежуточный язык, etc.
Например S2E можно использовать для драйверов, тритон не рассчитан на ядро из коробки, но в тоже время тритон это законченный фреймворк, а S2E это скорее компонент для написания своего движка. Другой момент это язык, например Pex это .net, а тот же KLEE заточен на инфраструктуру LLVM. В общем нет ничего универсального, выбирается под задачу и язык.

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



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

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

По Тритону интересная статейка с примером, просто "до кучи":
http://ak42.io/2016/09/26/solving-a-crack-me-with-triton-and-pin-a-k-a-the-lazy-way/

| Сообщение посчитали полезным: mak, Gideon Vi



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

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

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

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

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

difexacaw пишет: Вы хоть крэшдамп разобрать то сможите, сомневаюсь. У вас бесконечная синь будет, скилл не тот что бы это в ядре юзать.

Многие уже читали удивительные истории о графах и циклах, так что расскажите еще одну о разборе крашдампа, очень интересно, рили.

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

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

shellstorm
я вообще не перестаю поражаться этому клиническому ***, тема называется - статическая трассировка кода, а полоумный хакер винХП почемуто считает что всё ядро ОС должно быть загружено в солвер, и угар в том, что хеккер считает, что всё упадет в бсод внутри солвера, сука это клиника

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

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

SegFault пишет: считает что всё ядро ОС должно быть загружено в солвер, и угар в том, что хеккер считает, что всё упадет в бсод внутри солвера, сука это клиника

Несколько лет доходила суть DBI и еще пару лет будет доходить что такое DBT.

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


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

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

shellstorm
точняк, элита просто медленно думает)


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

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

shellstorm

> Многие уже читали удивительные истории о графах и циклах,

Я данную задачу давно решил, ну а вы можите дойти до бреда - всяких солверов и прочего. Покажите решение или технику, тогда можно будет что то обсудить. А фантазии на счёт симуляции ядра средствами дби так и остаются не более чем фантазиями. Как я и говорил не тот скилл у вас, что бы собирать это дерьмо, вы это сделать не можите(юзер ньюби, только без обид - описание реальности), имхо. Думаю даже это принципиально невозможно. Я показал ключ к технике, рабочее ядро, хоть и старую версию. Так понимаю когнитивные проблемы, тоесть тупо упёрся человек в какую то надуманную систему и далее переубедить невозможно. Думаю в таком случае это уже не системная тема, а как обычно - разбор косячного разума.

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

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

difexacaw пишет: Думаю даже это принципиально невозможно.

Чем бы ты думал *** нуб, если бы не краш и еще несколько человек ты бы и о DBI ничего не знал.
Привет тебе из 2007-го.


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


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

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

shellstorm

Распечатайте на туалетной бумаге. Был долгий путь, в основе лежит очень древний способ обхода AVM. Тогда появилась идея и была развита. Сейчас же то, что вы обсуждаете совершенно не актуально и примитивно. Но это только ваше дело. И не нужно оскорблений, зачем они.

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

Из за таких как вы свернулись все ресурсы. Впрочем с точки зрения викс это хорошо.

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

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

difexacaw пишет: Был долгий путь, в основе лежит очень древний способ обхода AVM

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

difexacaw пишет: Есть решения, если вы застряли

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

difexacaw пишет: где работает разум

Покажи работу разума на данной задаче, как ТС оптимизировать код? И прекращай уже форсить свои недомоторы, это просто куча неработающего хлама, а если неймется, то создай тему в офтопе и найду время, чтобы пройтись по ним с дотошностью присущей товарищу Берии, ибо этот креатив неплохой генератор лулзов.


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

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

shellstorm

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

> Покажи работу разума на данной задаче

Я привёл решение, оно оптимальное и тс к нему придёт.

Я не понимаю чем вы не довольны и почему так агрессивны. Впрочем это не важно, но просто интересно.

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

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

Воу, да тут целая война
Вообщем, чем дальше, тем сложнее, насчитала 5 слоев разной обфускации
Руками получается свернуть, по 3 из них есть наброски для решения автоматически, но пока ничего всерешающего нет
Должен быть какой-то вариант правильнее, но пока не хватает знаний, чтобы решить
Самое плохое, что я уже давно ушла от универсальности, т.е. если начиная решать первые два слоя я делала деобфускатор умным, в том плане, что это подойдет для любой обфускации, то теперь уже узконаправленные трюки вмп

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

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

difexacaw пишет: Ну а почему у вас батхёрт начался я хз

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

difexacaw пишет: Я привёл решение, оно оптимальное и тс к нему придёт.

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

difexacaw пишет: Я не понимаю чем вы не довольны и почему так агрессивны

Сейчас напоминаешь Шелдона Купера, не нужно путать агрессию со стебом, немого серьезно воспринимать человека которые присвоил чужие идеи, когда люди месяцами объяснили зачем, как и почему, а в итоге все это начал выдавать за свои откровения, еще не понимаю зачем косплеишь одного из мемберов этого форума, думаю без ника поймешь о ком речь, но он в отличии от тебя программист и сейчас работает в google, а ты все тот же сумрачный гений. Это нужно умудриться настроить всех сколь нибудь шарящих во всем этом людей против себя, это уже какая то патология, ведь после задаешь вопросы на этом же форуме, зная, что в лучшем случае проигнорят, а в худшем просто будут угорать.


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

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

запихните ваш асм в компилятор к примеру msvc
скомпильте и дизассемблируйте его еще раз
обфускация должна уйти, может не вся но думаю большая часть

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


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

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

reversecode пишет:
запихните ваш асм в компилятор к примеру msvc
скомпильте и дизассемблируйте его еще раз
обфускация должна уйти, может не вся но думаю большая часть

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


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

Создано: 23 декабря 2017 01:25 · Поправил: reversecode New!
Цитата · Личное сообщение · #28

так работал плагин optimice на питоне на старой либе miasm для ida, но там был nasm
--> Link <--
before --> Link <--
after --> Link <--

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

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

shellstorm
зачем ты наметал столько бисера перед этой ***?
reversecode
уже советовали, х86 переводим в IR и дальше натравливаем оптимизирующий LLVM компиль, или любой другой. тут всмысл в том, что лет 5 назад это звучало гиковски аля клерковская асм хуета. Но время идет, и щас все это говно можно чуть не с опен сорс скачать и решить задачу


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

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

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

информацию нужно уметь подавать правильно, тогда она попадает в нужные отделы мозга мгновенно

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

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

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

информацию нужно уметь подавать правильно, тогда она попадает в нужные отделы мозга мгновенно

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

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

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