Сейчас на форуме: padad42664, kris_sexy, site-pro, vasilevradislav (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Как найти место где прога закрывается (exit code=1)
Посл.ответ Сообщение

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

Создано: 09 июля 2007 23:30
· Личное сообщение · #1

OllyDbg можно кроме взлома использовать для диагностики неполадок софта, короче есть программа
и она сразу после запуска (появляется меню) закрывается без каких либо сообщений об ошибках.
Можно ли как то узнать в каком месте происходит вызов exit code 0 или 1 ?



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

Создано: 09 июля 2007 23:40
· Личное сообщение · #2

трейсь потихоньку) можешь еще попробывать ExitProcess поискать



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

Создано: 09 июля 2007 23:49
· Личное сообщение · #3

поймать ExitProcess или более высокоуровневые функции(выявленные по ida-сигнатурам или еще как).
а также поставить bpx на адрес из [esp], когда стоим на точке входа(когда очутимся там, смотрим EAX).



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

Создано: 09 июля 2007 23:58
· Личное сообщение · #4

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



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

Создано: 10 июля 2007 02:56
· Личное сообщение · #5

HavocTracer
В Ольге жмеш Ctrl+n, находишь в списке ExitProcess, жмешь Enter и видишь все явные его вызовы.




Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 10 июля 2007 07:13
· Личное сообщение · #6

Или бряк на PostQuitMessage



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

Создано: 10 июля 2007 10:43
· Личное сообщение · #7

ZwTerminateProcess и смотреть адреса возврата...

-----
Shalom ebanats!




Ранг: 20.5 (новичок)
Активность: 0.020
Статус: Участник

Создано: 10 июля 2007 11:09
· Личное сообщение · #8

Ставишь бряк на ExitProcess, дебагаешь и когда вылетишь на этот бряк, смотришь в стеке (esp) адрес возврата. Если прога на C, как правило срабатывает. Если на Delphi, тоже работает, но там много фокусов с переходами, и лучше как правило посмотреть в DeDe у главной формы в .OnCreate или в . OnShow ссылку на Application.Terminate, Form.Close и т. п.



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

Создано: 31 июля 2007 12:55
· Личное сообщение · #9

Хорошо, когда есть много разных советов! PostQuitMessage и ExitProcess это конечно все правильно, но в тот единственный раз, когда я столкнулся с аналогичной ситуацией бряки на эти функции мне не сильно помогли. А точнее вообще не помогли ибо не срабатывали(самому с трудом вериться). Если кто знает - почему, поделитесь если не влом. А простая трассировка - вещь хорошая!!! Не кидайте в меня камни, но если прога падает сразу после запуска, то долго трассировать не придется, а если локализовывать через F8 (если речь об Ольге) - все же поняли о чем я? То все найдется быстро. Другое дело можно ли будет устранить такое нехорошее поведение, ибо если программа умирает сразу, то жить ей совсем не хочется . Если вы считаете, что мой способ долгий слишком, то уверяю - обратная раскрутка стэка после бряка на закрывающие функции тоже дело довольно продолжительное!




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

Создано: 01 августа 2007 02:22
· Личное сообщение · #10

Можно ещё так exitcode посылать...

mov eax,1
ret




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

Создано: 01 августа 2007 03:10 · Поправил: sotona
· Личное сообщение · #11

asmonavt пишет:
А точнее вообще не помогли ибо не срабатывали(самому с трудом вериться). Если кто знает - почему, поделитесь если не влом.

посмотри мой пост в этой теме. второй абзац.
программе не обязательно вызывать ExitProcess. Вот к примеру:

int main() {
printf("blabla");
return 0;
}

большинство компиляторов(а возможно даже все) сгенерируют код без вызова ExitProcess.
здесь произойдет обычное mov eax, 0 и ret.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 01 августа 2007 03:30
· Личное сообщение · #12

HavocTracer
Дал бы уже прогу давно, а то щас всем форумом дружно гадать будем как там у тебя прога закрывается.
Есть вероятность, что она закрывается не по ExitProces, а по ExitThread, если мультипоточности нет. Да и если прога не вызывает никаких функций выхода из процесса, то после последнего RET'а она перейдет на заглушку, адрес которой на верхушке стека в момент запуска. А в заглушке как раз
push eax
call ExitProcess


-----
Уважайте других и пишите грамотно.




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

Создано: 01 августа 2007 05:22
· Личное сообщение · #13

А про TerminateProcess забыли?




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

Создано: 01 августа 2007 08:58
· Личное сообщение · #14

Трейсь тихо по F8,упадёт на вызове.Ставь бряк,перезагрузись.Рун,бряк,снимай его и трейсь дальше.
Так Быстрей найдёшь

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



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


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