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

 eXeL@B —› Программирование —› Обработка обсалютно всех исключений в программе
Посл.ответ Сообщение

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

Создано: 14 сентября 2007 07:26 · Поправил: Faza
· Личное сообщение · #1

Нужно перехватить обработку абсалютно всех исключений произошедьших в программе и передать управление в определенный участок кода. SEH и VEH не приемлемы так как не в состоянии обработать исключение типа jmp 000000 и не верный опкод, после такого программа валится а обработчики не получают исключение.



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

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

Запустить процесс из-под отладки?

-----
Security through obscurity is just an illusion





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

Создано: 14 сентября 2007 08:09
· Личное сообщение · #3

Видимо у тебя кривая реализация так как такой код работает нормально:
(сишный компиль не позволяет вставялять асм код в виде опкода. но если подредактировать exe в ручную, на место xor eax,eax \ jmp eax, написать что-то левое, то будет работать в любом случае. на фасме этой проблемы вообще нет. )
__try{
__asm{
xor eax,eax
jmp eax
}
}
__except(EXCEPTION_EXECUTE_HANDLER){
_asm{
nop
}
}
MessageBox(0,"","",MB_OK);

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 14 сентября 2007 11:28 · Поправил: W[4Fh]LF
· Личное сообщение · #4

tnt17 пишет:
сишный компиль не позволяет вставялять асм код в виде опкода.


Если речь о VC:

__asm {
__emit 0x90
__emit 0x90
}



и для gcc:

__asm __volatile (
".byte 0x90;"
".byte 0x90;"
);




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

Создано: 14 сентября 2007 12:13
· Личное сообщение · #5

Faza пишет:
SEH и VEH не приемлемы так как не в состоянии обработать исключение типа jmp 000000 и не верный опкод, после такого программа валится а обработчики не получают исключение.


Как это не получают??? Все прекрасно получают и обрабатывают, ты что-то накосячил. Если у тебя обработчик в dll, то глянь в PeHeader>OptionalHeader>Dll Characteristics, там есть такое поле как "Image does not use SEH", возможно здесь собака зарыта.

Когда-то и у меня был подобный вопрос, но он звучал чуть по другому:
Как перехватить все ОБРАБОТЧИКИ исключений. Казалось бы ставишь VEH и все ок, но грабли в том, что обработчик VEH всплывает перед ПЕРВЫМ обработчиком SEH, а если этот обработчик SEH вернет EXCEPTION_CONTINUE_SEARCH, то мы перейдем ко второму обработчику SEH и об этом наш VEH обработчик никаких уведомлений не получает. Вот такие пироги. Может кто, что-то подскажет по этому поводу?




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

Создано: 14 сентября 2007 12:35
· Личное сообщение · #6

W[4Fh]LF
у меня Pelles C,он не пропустит ниодин из этих вариантов.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 14 сентября 2007 14:50
· Личное сообщение · #7

перехват сплайсингом ntdll->KiUserExceptionDispatcher ?



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

Создано: 15 сентября 2007 22:32
· Личное сообщение · #8

Faza что опять стар изучаешь ?



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

Создано: 16 сентября 2007 01:55 · Поправил: Tim
· Личное сообщение · #9

tnt17 пишет:
у меня Pelles C,он не пропустит ниодин из этих вариантов.

ну-ну, как же...

из справки:
The __asm keyword invokes the inline assembler and can appear wherever a C statement is legal. It cannot appear by itself. It must be followed by an assembly instruction or a group of instructions enclosed in braces. The set of valid instructions depends on the target processor (see option /T). It can be X86 instructions (Intel386, Intel486, Pentium, Pentium Pro, Pentium II, Pentium III and Pentium 4) or ARM instructions (ARM v4, ARM v5, XScale). Besides processor instructions, a few directives are also supported: DB, DW, DD, DQ, ALIGN and LTORG.

To emit literal data into the code sequence, use DB (1 byte), DW (2 bytes), DD (4 bytes) or DQ (8 bytes). For DB, either a quoted string, or one or more numerical values, separated by commas, are accepted. For DW, DD and DQ, one or more numerical values, separated by commas, are accepted. In Microsoft mode (see option /Ze) _emit is accepted as an alias for DB (X86 only).

__asm {
db 0x90
_emit 0x90
}


-----
MicroSoft? Is it some kind of a toilet paper?





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

Создано: 16 сентября 2007 02:01
· Личное сообщение · #10

Tim
А теперь вьедь в смысл моего поста:
у меня Pelles C,он не пропустит ниодин из этих вариантов. , речь идет о вариантах предложенных выше. Да, признаюсь я не юзаю его так часто, чтобы сталкиваться с такой проблемой, у меня основной язык программирования это - фасм.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 16 сентября 2007 02:07
· Личное сообщение · #11

tnt17 пишет:
Tim
А теперь вьедь в смысл моего поста:
у меня Pelles C,он не пропустит ниодин из этих вариантов. , речь идет о вариантах предложенных выше. Да, признаюсь я не юзаю его так часто, чтобы сталкиваться с такой проблемой, у меня основной язык программирования это - фасм.


tnt17 пишет:
сишный компиль не позволяет вставялять асм код в виде опкода


что за наезды? ты пишешь, что не можешь вставить асм код в виде опкода в Pelles C, я показываю, как это сделать...

-----
MicroSoft? Is it some kind of a toilet paper?





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

Создано: 16 сентября 2007 02:12
· Личное сообщение · #12

Tim пишет:
что за наезды? ты пишешь, что не можешь вставить асм код в виде опкода в Pelles C, я показываю, как это сделать...

Большое спасибо, мега гуру, что просветили болвана. В следующий раз буду читать справку, которую нахуй никогда не читал.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 16 сентября 2007 02:16
· Личное сообщение · #13

tnt17 пишет:
Большое спасибо, мега гуру, что просветили болвана. В следующий раз буду читать справку, которую нахуй никогда не читал.

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

-----
MicroSoft? Is it some kind of a toilet paper?




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

Создано: 16 сентября 2007 07:13
· Личное сообщение · #14

Столько уже всего насоветовали, а топег стартер куда-то исчез.

-----
Security through obscurity is just an illusion




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

Создано: 16 сентября 2007 09:41 · Поправил: Faza
· Личное сообщение · #15

Так все вернулся.

SEH не приемлем в реализации так как не орабатывает ошибки вновь созданых трейдов.



А в проблеме частично разобрался (мой код не в длл ке а инжектом врезается в процесс приложения ) , то что не срабатывает SEH и VEH заключается в том что приложение в дальнейшем устанавливает свои обработчики тем самым перекрывая мои.

перехватил KiUserExceptionDispatcher вроде как получатся но после нескольких эксепшенов в логи ольки падает такое
"Debugged program was unable to process exception"
и следом прога терермируется , эксепшено возникает что приложение прыгнуло в стек, а там неизвестно чего.
Еще какие функции нужно перехватить чтобы взять обработку всех ошибок в свои руки?



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

Создано: 16 сентября 2007 10:57
· Личное сообщение · #16

все разобрался .... надо востанавливать стек ESP после каждой ошибки )



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 16 сентября 2007 11:49
· Личное сообщение · #17

Faza
Значит можно ждать Private Unpacker StarForce 3.x.x-4.x.x ???


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


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