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

 eXeL@B —› Основной форум —› Olly Debugger: трейсинг многопоточных приложений
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

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

Я вообще крякер начинающий. Вообще я программист, но асм знаю, и иногда отладчиками пользовался, чтобы изучать то, что мне компилятор нагенерил. Но сейчас вот пришлось поломать одну прогу. Аернее, исследовать просто. Меня крайне инетересует код, исполняемый в отдельном потоке. Я использую OllyDbg версии 1.10.

//Суть проблемы:

Когда я ставлю бряк на точку входа во вновь созданный поток (или просто в опциях ставлю Break on new thread created), дебагер прогу успешно останавливает на нужной бряке, но потом отлаживаемое приложение виснет, через 5 секунд выкатывается сообщение /*вольный перевод*/ "Олли вставил в каких-то своих целях небольшой кусок кода в отлаживаемое приложение, отлаживаемый процесс не отвечает в течение 5-ти секунд... Дальнейшая работа препарируемой программы может быть нестабильной, как можно скорее убейте ее" и там дальше два варианта. Подождать еще 5 секунд или продолжить.

Собственно после того, как я отвечаю "нет", работа "жертвы" останавливается и на всякие там F7/F8/F9 не реагирует. Соответственно отттрейсить поток я не могу.

Я пробовал активировать поток (ну для чего-то ведь нужна кнопочка Actualize в окне Threads!). Пробовал бряки на функциях, вызываемых из потока ставить. Результат один и тот же, и он описан выше.

//Собственно, вопрос:

Как можно (и можно ли вообще) трейсить работу не главного потока приложения с помощью средств OllyDbg?

З.Ы. SoftIce не предлагать.




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 06 января 2006 17:26
· Личное сообщение · #2

ну по крайней мере в справке пишут, что можно:
Особенность OllyDbg в том, что он позволяет просто и эффективно управлять потоками. Если Вы проходите по программе, трассируете её, выполняете till return (до возврата) или till selection (до выбранного), эти действия останавливают все потоки кроме основного, и возобновляют этот поток, даже если он был приостановлен. В этом случае, если Вы приостанавливаете или возобновляете потоки вручную, действия откладываются. Если Вы запускаете отлаживаемое приложение, OllyDbg восстанавливает первоначальные состояния потоков. (Заметьте, что с точки зрения Отладчика, hit trace (пошаговая трассировка), эквивалентна свободному выполнению).

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



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

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

Честно говоря, я почитал справку, и то что ты здесь написал. Однако как конкретно брякнуть неосновной поток, там не написано...

А насчет каркаса приложения, я так и сделал. Я соорудил простейший счетчик с программируемой задержкой и грубо синхронизировал его через PostMessage. Собственно во время работы дебаггера удается протрейсить только конструктор (там точка входа в программу) самого приложения (поток, кстати, именно там порождается, сразу с флагом CreateSuspended=false, т.е. его выполнение начинается сразу после создания, вернее, разумеется, проверки условия CreateSuspended). После того, как конструктор заканчивается, главный поток оставнавливается. При этом дебаггер явно как-то сам отсележивает исполняющийся дополнительный поток, в котором стоит счетчик, сам дебаггер отнимает ~50% процессороного времени. Стало быть, поток дебаггеру подвластен. Но при попытке брякнуть этот поток происходит то, что я описал в предидущем посте.




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 06 января 2006 18:05
· Личное сообщение · #4

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




Ранг: 84.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 06 января 2006 19:35
· Личное сообщение · #5

Оля внедряет код еще и для работы с SSE регистрами. Рекомендуется отключать.



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 января 2006 21:55
· Личное сообщение · #6

Я извиняюсь, я сейчас далеко от дебаггера и хелпа к нему, а качать долго и некогда. Вы, ребята, не могли бы подсказать, где там этот code injection отключается?



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

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

Я кажись понял, что вы имели ввиду, когда сказали, что рекомендуется откючать. Это "Allow code injection..."? Тогда непойдет. Я пробовал - результат тот же. Олька всё равно впихивает свой код в программу. Я весь хелп переворошил и ничего не нашел. Может эту инъекцию вызывает еще какая-нибудь опция по умолчанию?

Я скопировал все настройки из статьи "Olly от А доЯ" - код внедряться прекратил, однако теперь он при входе в поток выполняет несколько команд, потом выполняет выхов подпрограммы и останавливается (paused) вернуть его из этого состояния невозможно. Может кто знает лекарство от этого?




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 08 января 2006 00:39
· Личное сообщение · #8

Monster

Олька отстой. Попробуй заюзать вот такой дебагер www.smidgeonsoft.com/

-----
have a nice day




Ранг: 6.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 мая 2006 20:13
· Личное сообщение · #9

Monster пишет:
при входе в поток выполняет несколько команд, потом выполняет выхов подпрограммы и останавливается (paused) вернуть его из этого состояния невозможно. Может кто знает лекарство от этого?

Точно так же доходит до call dword ptr ds:[<&ntdll.CsrNewThread>>; ntdll.CsrNewThread потом на следеющем Call останавливаеться.С этим еще никто не разобрался?



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

Создано: 11 мая 2006 20:40
· Личное сообщение · #10

Monster пишет:
Я вообще крякер начинающий.


правильно выбранный ник - половина успеха, ты на верном пути ;)

Monster пишет:
Когда я ставлю бряк на точку входа во вновь созданный поток (или просто в опциях ставлю Break on new thread created), дебагер прогу успешно останавливает на нужной бряке, но потом отлаживаемое приложение виснет, через 5 секунд выкатывается сообщение


ты это под win 9x проделываешь, угадал?



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

Создано: 11 мая 2006 20:45
· Личное сообщение · #11

Nimnul пишет:
Олька отстой.

Что может быть лучше Ольки?
Разьве что айс.



Ранг: 6.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 мая 2006 21:36
· Личное сообщение · #12

Пробовал в отладчике что Nimnul сказал PEBrowsePro там всё нормально работает но очень непривычно в нем отлаживать.Asterix пишет:
ты это под win 9x проделываешь, угадал?
нет это в WinXP SP2



Ранг: 6.3 (гость)
Активность: 0=0
Статус: Участник

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

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



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

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

Ни разу не замечал таких проблем. У кого есть такое приложеньице, может приаттачите? Только если там не в антидебажных штучках дело.



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

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

timon пишет:
Ну что кто нить разобрался с трейсингом многопоточных приложений в Олли???Времени то много прошло,мож кто понял.



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

HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);


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


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