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

 eXeL@B —› Программирование —› Помогите новичку, я не умею трассировать программы!
Посл.ответ Сообщение

Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 07 ноября 2006 02:52
· Личное сообщение · #1

Вобщем дело обстоит так, пишу сейчас мини-отладчик(на асме с использованием "Ap0x Unpack Engine"), так вот не могу понять как можно реализовать там функцию трассировки программы, ну что-то типа:

Trace proto: :DWORD

Trace proc Times:DWORD
pushad

Some Code

popad
ret
Trace endp

Так вот проблема в том, каким макаром это дело реализовать? Переменная Times должна отвечать за количество раз сколько трассировать(типа нажимать на F7 или F8 в Оле).

1ab7_07.11.2006_CRACKLAB.rU.tgz - Ap0x SDK.rar

-----
все багрепорты - в личные сообщения





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 07 ноября 2006 05:11
· Личное сообщение · #2

смотри статьи iczelion'а
в вообще, ставишь бряк на след. команду, запускаешь, опять ставишь бряк и т.д..

-----
Тут не могла быть ваша реклама





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 07 ноября 2006 10:06
· Личное сообщение · #3

...то есть вписываешь 0xCC туда где хочешь остановить, и потом продолжаешь жертву. Отладчик ждёт событий от жертвы, и след. событием будут exception вызваный твоей int 3.



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 07 ноября 2006 15:09
· Личное сообщение · #4

В твоем SDK слишком много букв и не у всех есть время его смотреть и тем более за тебя писать то, что тебе надо!?
Так что буду отталкиваться от написанного товарищами!
В отладчике останавливаемся на системном бряке и смотрим память процесса в WinHEX.
Переходим на EP и видим, стоит 0ССh естественно в WinHEX в отладчике будет нормальный код, делаем выводы сами, почему так происходит.
Запускаем отладчик и останавливаемся на этом EP, где было до запуска 0CCh
Смотрим опять память процесса в WinHEX
И видим 0CCh, уже нет, жмем F7 и опять смотрим память процесса в WinHEX, видим, 0CCh нет.
Значит отладчик при “трассировки” 0CCh не применяет!
Берем чистую Олю и что мы видим:

Адрес и код начала “трассировки F7”
00433D1D push 0 ; case 0x89D
00433D1F call _Animate ; Call Procedure
00433D24 pop ecx
00433D25 push 1
00433D27 push 0
00433D29 push 3
00433D2B push 0
00433D2D push 0
00433D2F call _Go ; Call Procedure
00433D34 add esp, 14h
00433D37 jmp loc_434212

Дальше методом анализа… используем готовый и полностью рабочий код – ИМХО

P. S.
Кто не согласен доказательство в студию!!!

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 07 ноября 2006 16:15
· Личное сообщение · #5

Demon666
стоп, насколько я знаю есть три способа трассировки:
1) software breakpoint - 0xCC
2) hardware breakpoint
3) int 1

1) и 3) делаются очень просто из ring3 - ты получаешь EXCEPTION_BREAKPOINT или EXCEPTION_SINGLE_STEP от debug api.

Кста, про твоё заявление "смотрим память процесса в WinHEX, видим, 0CCh нет" это значение будет в начале след. инструкции долю секунды, пока исполняется инструкция и не случится exception. Как только он случается, отладчик сразу меняет байт на который показывает EIP на оригинальное значение.

P.S. если конечно оля использует int3 для реализации F7/F8.



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 07 ноября 2006 18:52
· Личное сообщение · #6

s0larian пишет:
Кста, про твоё заявление "смотрим память процесса в WinHEX, видим, 0CCh нет" это значение будет в начале след. инструкции долю секунды, пока исполняется инструкция и не случится exception. Как только он случается, отладчик сразу меняет байт на который показывает EIP на оригинальное значение.

Сейчас по CRC32 проверил точно(!) лепит именно 0CCh “на доли секунды”.

P. S.
Проверял на F8

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 07 ноября 2006 21:33
· Личное сообщение · #7

олька может и инт3 бряки юзать и хардварные..

-----
Тут не могла быть ваша реклама





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 ноября 2006 22:04
· Личное сообщение · #8

StepInto делается либо выставлением Trap флага, либо выставлением трассировочного бита в DR7 регистре. StepOver делается с помощью дизассемблера, проверяются префиксы повторения и всякие call и если совподает, то ставим либо HardWare breakpoint либо INT3 (CC). ВСЁ это легко делается из ring3.

ЗЫ Каждый раз лепить бряк на следующюю команду нельзя, иначе мы просто проскочем какой нибудь JCC.

-----
Yann Tiersen best and do not fuck




Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 08 ноября 2006 08:03
· Личное сообщение · #9

PE_Kill пишет:
проверяются префиксы повторения и всякие call и если совподает, то ставим либо HardWare breakpoint либо INT3 (CC).

Да-да именно после call Оля и пихает 0CCh

PE_Kill
Ты, наверное, исследовал “трассировку” в Оли, если да(?) то respect! ;)

А где автор? Вот, блин, привычка запостил и соскочил.
P. S.
Наверно через месяц появитццо.

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 08 ноября 2006 11:43
· Личное сообщение · #10

ага, появиццо он... И будет просить пофиксить ему асм движок отладчика



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 09 ноября 2006 00:27
· Личное сообщение · #11

Demon666 пишет:
Наверно через месяц появитццо

Неправда! Просто я не могу понять метод, предложенный Demon666 - сочетать отладчик и WinHEX... я просто другими хекс-редакторами пользуюсь... и вообще мне кажется, что алгоритм должен быть рекурсивным... Кто-нибудь смотрел мой код? Я там использовал функцию "DebugStep" для трассировки. Как можно вернуться к основному коду после:

call DebugStep

call [DebugLoopAddr]

"Основной код"

-----
все багрепорты - в личные сообщения





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 09 ноября 2006 01:02
· Личное сообщение · #12

Demon666 я ничего не исследовал, просто сам писал отладчик...

-----
Yann Tiersen best and do not fuck




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 09 ноября 2006 01:09
· Личное сообщение · #13

PE_Kill пишет:
просто сам писал отладчик

а сорсы на паблик выложишь? Или хотя бы скриншоты(если он с ГУИ)...

-----
все багрепорты - в личные сообщения





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 09 ноября 2006 01:10
· Личное сообщение · #14

нет, приват

-----
Yann Tiersen best and do not fuck




Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 09 ноября 2006 08:09
· Личное сообщение · #15

PE_Kill пишет:
я ничего не исследовал, просто сам писал отладчик...

PE_Kill
Ну, тогда два вопроса, если не займет много времени, сильно интересно!?
1. Какая причина была написать свой отладчик?
2. Какие статьи читались (ведь начало-то было? (мы не рождены, чтобы все сразу знать)), для того чтобы грамотно организовать работу своего отладчика, ну и на каком языке программирования писался отладчик!?

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





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

Создано: 09 ноября 2006 09:10 · Поправил: Hellspawn
· Личное сообщение · #16

могу подкинуть примера простеньких отладчиков (если конечно можно их так назвать)
сам по ним учился... есть асм/дельфя

-----
[nice coder and reverser]





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 09 ноября 2006 09:13
· Личное сообщение · #17

Demon666 пишет:
Какие статьи читались

msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/debugging_reference.asp
msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/writing_the_debugger_s_main_loop.asp



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 09 ноября 2006 12:04
· Личное сообщение · #18

Hellspawn
Да-да, конечно, спасибо! Сорс никогда лишним не бывает, особенно если там можно увидеть грамотную оптимизацию кода, ну и дакучи Delphi, если на чистом API!

s0larian
Спасибо, но у меня есть MSDN ;)
Причина была задать такие вопросы, потому что пишет очень интересно ну и самое главное оригинально!
Особенно после:
PE_Kill пишет:
Ну как как, внук как то плакал, что "игра больше не играет" ну я ипостарался помоч, вот и помог


P. S.
???!

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





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

Создано: 09 ноября 2006 12:29
· Личное сообщение · #19

вот держи там много примеров...

a514_09.11.2006_CRACKLAB.rU.tgz - deb.7z

-----
[nice coder and reverser]





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 09 ноября 2006 23:50
· Личное сообщение · #20

Все статья которыми я пользовался я уже выкладывал на форуме, да и тема такая уже была поищи. Demon666 пишет:
Какая причина была написать свой отладчик?

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

Писал на Delphi с VCL ибо тут на размер насрать, и грамотный отладчик без OOP хер напишешь ИМХО, первый я писал на Delphi без VCL, потом запутался в коде и грохнул его, потом написал всё с нуля и оформил классом, теперь всё просто...

-----
Yann Tiersen best and do not fuck




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 10 ноября 2006 00:44
· Личное сообщение · #21

Hellspawn, спасибо, будем разбираццо... Может кто ещё подскажет... есть тут у меня сорсы Алекса(Трейсер), хотя вполне подойдёт иксзелионовский трейсер. Так вот там проблема при трассировке, если в коде есть IsDebuggerPresent, то такой трейсер-отладчик негодится, поэтому я как самый большой лентяй на свете и взял Ap0x SDK

-----
все багрепорты - в личные сообщения



 eXeL@B —› Программирование —› Помогите новичку, я не умею трассировать программы!
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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