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

 eXeL@B —› Вопросы новичков —› Callback для каждой инструкции в OllyDbg PDK 1.10
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2014 15:51
· Личное сообщение · #1

Приветствую.

Есть ли в OllyDbg PDK 1.10 callback, который будет вызываться перед каждой следующей инструкцией, передавая ему в качестве аргумента эту самую инструкцию?

Необходимо написать плагин, который останавливал бы выполнение отлаживаемого приложения на каждом условном переходе. В интернете готового решения не нашёл.

Заранее благодарю за возможные ответы.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 21 октября 2014 16:07
· Личное сообщение · #2

Есть у Криса Касперски такая книга, как Искусство дизассемблирования. Там есть раздел про OllyDbg. И там он (Крис) рассказывает про такую вот задачу, объясняет, почему такого нет и быть не может, и говорит, как в такой ситуации вести себя. Мне (да и похоже, что всем остальным) лень это всё опять пересказывать, качните и почитайте.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2014 16:39
· Личное сообщение · #3

Вы про "Хакерские трюки или как поставить бряк на jmp eax"?

Добавлено спустя 19 минут
Кстати, сам же Крис писал, что поставить бряки на все условные переходы возможно через меню "Condition to pause run trace", и даже приводил таблицу шаблонов для "The command is one of" в OllyDbg. Достаточно будет написать:

JCC CONST ; любой условный переход по конкретному адресу
JCC R8 ; любой 8-битный регистр
JCC R16 ; любой 16-битный регистр
JCC R32 ; любой 32-битный регистр
etc

В чём тогда проблема? Я Вас не так понял?



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

Создано: 21 октября 2014 17:56 · Поправил: unknownproject
· Личное сообщение · #4

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

-----
TEST YOUR MIGHT





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 21 октября 2014 18:24 · Поправил: ARCHANGEL
· Личное сообщение · #5

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

Однако, если имеется ввиду получение инструкции при трассировке, то такое в PDK возможно.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2014 18:28
· Личное сообщение · #6

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


Я имел ввиду, что мне необходимо. Делать буду сам, просто спросил про наличие соответствующего callback'а.

Добавлено спустя 7 минут
ARCHANGEL пишет:
Однако, если имеется ввиду получение инструкции при трассировке, то такое в PDK возможно.


Не подскажете, пожалуйста, при помощи какого callback'а?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 октября 2014 18:40 · Поправил: reversecode
· Личное сообщение · #7

b0r3d0m пишет:
Не подскажете, пожалуйста, при помощи какого callback'а?

а вы не хотите скачать сами PSDK и почитать его? там даже хелп есть
вообще если очень сильно непонятно, то Олег вроде жив еще? почему к нему не обратиться? он дружелюбен и отзывается



Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2014 19:39
· Личное сообщение · #8

reversecode пишет:
а вы не хотите скачать сами PSDK и почитать его? там даже хелп есть


Да, я его уже прочитал. Точнее, посмотрел список всех callback'ов. Ничего похожего я там не обнаружил, вот и спрашиваю.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 21 октября 2014 20:09
· Личное сообщение · #9

взводить трэйс флаг и ловить debugevent.dwDebugEventCode == EXCEPTION_SINGLE_STEP в ODBG_Pluginmainloop

-----
[nice coder and reverser]


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

Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2014 23:45 · Поправил: b0r3d0m
· Личное сообщение · #10

Спасибо за ответ!

Hellspawn пишет:
взводить трэйс флаг


В смысле, из кода? Если так, то спасибо, гляну.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 октября 2014 11:17
· Личное сообщение · #11

b0r3d0m ну да, например так:
Code:
  1. TRACE_FLAG = $100;
  2. ...
  3. procedure SetTraceMode(const trace:integer);
  4. begin
  5.   Tracing:=trace;
  6.   Cont.ContextFlags:=CONTEXT_CONTROL;
  7.   GetThreadContext(pi.hThread,cont);
  8.   If (trace = 0) then cont.EFlags:= cont.EFlags xor TRACE_FLAG;
  9.   If (trace = 1) then cont.EFlags:= cont.EFlags or  TRACE_FLAG;
  10.   SetThreadContext(pi.hThread,cont);
  11. end;

или пройтись по PDK и попробовать функции с trace в названии.

-----
[nice coder and reverser]




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 22 октября 2014 13:32
· Личное сообщение · #12

Я так понимаю, компилировать придётся при помощи BC5.5 или VC5.0, т.к. только для них есть собранные .lib-файлы, верно?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 22 октября 2014 13:37
· Личное сообщение · #13

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




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 октября 2014 13:39
· Личное сообщение · #14

Эх, ну мой блог точно никто не читает
Неверно, можно собрать с Visual Studio 2008/2010/2012. Думаю, и 2013 можно.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 22 октября 2014 13:42 · Поправил: b0r3d0m
· Личное сообщение · #15

Archer пишет:
Неверно, либ на то и либ, что его разные компиляторы могут подхватить.


StackOverflow говорит обратное.

ARCHANGEL пишет:
Эх, ну мой блог точно никто не читает


Можно ссылку, пожалуйста?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 октября 2014 14:03 · Поправил: ARCHANGEL
· Личное сообщение · #16

b0r3d0m

--> Там есть пример плагина в 2012 студии<--

--> Зеркало <--

-----
Stuck to the plan, always think that we would stand up, never ran.


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

Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 22 октября 2014 14:15
· Личное сообщение · #17

Спасибо за ссылку!

Ваш пример у меня собирается.

Судя по тому, что я вижу в архиве, ollydbgvc7.lib Вы собирали самостоятельно, верно? Если так, то каким именно образом? Собирать-то его не из чего, .c-файлы в PDK есть только для примеров.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 октября 2014 22:12
· Личное сообщение · #18

Нет, взял из сдк.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 22 октября 2014 22:36
· Личное сообщение · #19

ARCHANGEL пишет:
Нет, взял из сдк.


Из какого SDK? PDK 110? Просто в текущей версии там есть лишь OLLYDBG.lib, который от Вашего отличается хешем.

$ md5sum.exe "e:\temp\ollydbgvc7.lib"
\78c307baa1891955921fed52df36d3aa *e:\temp\ollydbgvc7.lib

$ md5sum.exe "e:\temp\plug110\Vc50\OLLYDBG.LIB"
\a4d2ff06679125f834e78e89073877a6 *e:\temp\plug110\Vc50\OLLYDBG.LIB




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 октября 2014 22:43
· Личное сообщение · #20

plugSDK 1.10 (VC + BC + .NET) - PDK 1.3

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 23 октября 2014 14:39 · Поправил: b0r3d0m
· Личное сообщение · #21

ARCHANGEL пишет:
plugSDK 1.10 (VC + BC + .NET) - PDK 1.3


Спасибо, понял, это модифицированный PDK.

В общем, решил делать так:

- На callback'е ODBG_Paused каждый раз запоминать текущее состояние регистров
- При выборе соответствующего пункта меню плагина вызывать функцию Startruntrace, передав ей в качестве аргумента ранее сохранённую информацию о состоянии регистров
- На callback'е ODBG_Pluginmainloop проверять, что мы попали в него по причине EXCEPTION_DEBUG_EVENT и EXCEPTION_SINGLE_STEP, после чего доставать из объекта структуры DEBUG_EVENT текущий адрес и по нему узнавать, что за инструкция должна выполниться. Если это какой-либо условный переход, то вызывать функцию Tempbreakpoint на этот адрес

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

Код можно посмотреть тут.

Скажите, пожалуйста, в чём может быть причина? Может, кто-то уже сталкивался с подобной ситуацией?

Заранее благодарю.



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

Создано: 23 октября 2014 15:09 · Поправил: VodoleY
· Личное сообщение · #22

b0r3d0m можно поменять нафик все условные переходы на int3 и обрабатывать бряк.. аля наномиты в арме, можно заменять на jmp -2 (зацикливая прогу) как это делает обсид. НО проблема главная в том.. что при СЛОЖНОМ коде (морфы, крипто, самомодификация) очень сложным будет анализатор код, чтоб расставить эти точки. поэтому. варианта 2 я вижу. 1ый это не парить мозк и делать трассу.. простой трейс. и уже ловить в ней нужные вам переходы. 2ой. как писал крис, использовать спец дебаг комманды проца(не все их имеют) для остановки проца (хардварно) на условных переходах, типа как хардвар бряк. Минусы и там, и там. в 1ом случае, это очень низкая скорость трейса и большой обьем логов. во 2ом. специализированный проц.
З,Ы. я когдато.. столкнулся с подобной проблемой. но поступил вообще люто. НО зато для новичков возможно самое то. 1. делается листинг. в IDA lst file. дальше grep-ом или мальенькой самописной прогой фильтруем комманды, котоые начинаются с j и 2ая буква не m .. имее почти чистый список условных переходов в проге, на самом деле их не так уж и много. у мну, при экзешнике 6мб писанном на сях их было окло 20к. 3. делаем скрипт, которые по этим адресам расставляет брейкпоинты(или в текстовом редакторе или маленькой прожкой) .. ДА ДА 20к брейкпоинтов. маленький скрипт с протоколированием EIP срабатывания брейкпоинта и run

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




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 23 октября 2014 15:36
· Личное сообщение · #23

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


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

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


Так я это и делаю. Или Вы про то, что плагин тут не нужен? Если так, то изначально именно такой способ и хотел использовать, однако проблема оказалась в том, что TextBox "Command is one of" в меню "Set condition" имеет ограниченный размер, в который не поместятся все варианты условных переходов.



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

Создано: 23 октября 2014 15:46 · Поправил: VodoleY
· Личное сообщение · #24

b0r3d0m ыыыыыыы вот что значит.. правильно поставленное ТЗ)) для ВАС и для последующих.. пишите сразу. КОПАЮ ВМпрот. пытаюсь.... тото тото. Теперь встречный вопрос.. накой ляд, вам бряки, на условыне переходы, под вмпротом? и предвидя ваш вопрос.. я задам встречный. вы согласны что олька использует дебаг апи?(имеется ввиду для отладки целевого приложения)

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




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 23 октября 2014 16:04
· Личное сообщение · #25

VodoleY пишет:
накой ляд, вам бряки, на условыне переходы, под вмпротом?


Чтобы понять, на основе каких именно данных она принимает решение не запускаться на определённом компьютере.

VodoleY пишет:
вы согласны что олька использует дебаг апи?


Наверное, а что это меняет и какой вопрос Вы думали, что я задам?



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

Создано: 23 октября 2014 16:12 · Поправил: VodoleY
· Личное сообщение · #26

b0r3d0m херней вы маетесь уважаемый. берите Sweper от Vam-ита и читайте теорию по вм протекту. Месяца через 2-3 упорных исследований, возвращайтесь. У вас будут милионы срабатываний условных переходов, информации вам даст это НОЛЬ. для этого виртуализация кода и придназначена. т.е. Имееш исходники=толку ноль. Вы конечно можете продолжать тратить на это время.. на свой плаг, только когда его доделаете, согласитесь со мно.
З.Ы. если все таки интерестны пути создания трасс условных переходов, то тему можете оставить.. если для вашей задачи.. то можете закрывать

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




Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

Создано: 23 октября 2014 16:19 · Поправил: b0r3d0m
· Личное сообщение · #27

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


В любом случае интересно, почему приведённый мной код не работает так, как ожидается.



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

Создано: 23 октября 2014 16:22
· Личное сообщение · #28

b0r3d0m потому что нет понимания процесса. Арчи. наверно пора.

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




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

Создано: 23 октября 2014 16:27 · Поправил: dosprog
· Личное сообщение · #29

VodoleY пишет:
у мну, при экзешнике 6мб писанном на сях их было окло 20к.


)) Это круто, я признал.
Но в таком случае начинает работать принцип "если информация исчерпывающа - то она бесполезна ввиду её нереального объёма".





Ранг: 10.7 (новичок), 2thx
Активность: 0.060
Статус: Участник

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

VodoleY пишет:
потому что нет понимания процесса. Арчи. наверно пора.


Понимания процесса чего? Это раздел для новичков.


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Callback для каждой инструкции в OllyDbg PDK 1.10
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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