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

 eXeL@B —› Вопросы новичков —› Помогите поставить SEH-фрейм
Посл.ответ Сообщение

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

Создано: 07 января 2008 11:55 · Поправил: LexxCracker
· Личное сообщение · #1

Сабж
прочитал несколько статей по антиотладке с использованием сех-фреймов.
Но по непонятным причинам код падает.

Требования к коду такие:
1. Стек портится не должен. Т.е. все, что лежало в нем до использования приема, должно там и быть и после
2. Нормальное выполнение кода после использования приема

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



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

Создано: 07 января 2008 11:56 · Поправил: LexxCracker
· Личное сообщение · #2

вот взял код с васма. Но мессаджбокса нет. хз в чем дело...
Падает там где и должно падать.... и под отладчиком и без него.
Но обработки исключения нет.
;--------------------------------------------------------------------- ----------------
.data
szTitle db "Structured Exception Handler example",0
szMessage db "Intercepted General Protection Fault!",0

.code
start:
call setupSEH

exceptionhandler:
mov esp,[esp+8] ; Ошибка дает нам старый ESP в [ESP+8]
push 00000000h ; Аргументы для MessageBoxA
push offset szTitle
push offset szMessage
push 00000000h
call MessageBoxA

push 00000000h
call ExitProcess ; Выходим из приложения

setupSEH:
push dword ptr fs:[0] ; Push'им оригинальный обработчик SEH
mov fs:[0],esp
mov ebx,0BFF70000h ; Пытаемся писать в ядро (что
mov eax,012345678h ; вызовет исключение)
xchg eax,[ebx]
end start
;--------------------------------------------------------------------- ----------------





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 07 января 2008 12:47
· Личное сообщение · #3

assume fs:nothing попробуй добавить, если на масме.. А так вроде кодес правильный.. хз че не так

-----
invoke OpenFire




Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 07 января 2008 12:57
· Личное сообщение · #4

левый код какой-то



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

Создано: 07 января 2008 13:01 · Поправил: LexxCracker
· Личное сообщение · #5

__ :
левый код какой-то

поэтому и прошу "правый"

assume fs:nothing добавил
не пашет
падает...



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 07 января 2008 13:06
· Личное сообщение · #6

как вариант
program SEH;
uses
Windows;
type
_SEH = record
SafeEip:DWORD; // The offset where it's safe to continue execution
PrevEsp:DWORD; // The previous value of esp
PrevEbp:DWORD; // The previous value of ebp
end;

//
// Exception disposition return values.
//
EXCEPTION_DISPOSITION = DWORD;
const
ExceptionContinueExecution = 0;
ExceptionContinueSearch = 1;
ExceptionNestedException = 2;
ExceptionCollidedUnwind = 3;

var
format_string : PChar = 'EAX = %08lX' + #0;
__seh : _SEH;
label _SafePlace;


{$O+}
function _except_handler(
ExceptionRecord:PExceptionRecord;
EstablisherFrame:Pointer;
ContextRecord:PContext;
DispatcherContext:Pointer): EXCEPTION_DISPOSITION; cdecl;
var
Buff: PChar;
_EAX: DWord;
begin
ContextRecord.Eip := __seh.SafeEip;
ContextRecord.Esp := __seh.PrevEsp;
ContextRecord.Ebp := __seh.PrevEbp;
_EAX := ContextRecord.Eax;
GetMem(Buff, 64);
asm
push _EAX
push format_string
push Buff
call wsprintf
add esp, 0Ch
end;
MessageBox(0, Buff, nil, MB_OK or MB_ICONINFORMATION);
FreeMem(Buff);
// Tell the OS to restart the faulting instruction
Result := ExceptionContinueExecution;
end;


{$O-}
begin
asm
push OFFSET _except_handler
push DWORD PTR fs:[0] // address of next ERR structure
mov fs:[0], esp // give FS:[0] the ERR address just made

mov __seh.SafeEip, OFFSET _SafePlace
mov __seh.PrevEsp, esp
mov __seh.PrevEbp, ebp

mov eax, $12345678
db 0CCh
end;
_SafePlace:
asm
pop DWORD PTR fs:[0] // restore next ERR structure to FS:[0]
add esp, 4 // throw away rest of ERR structure
end;
end.




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

Создано: 07 января 2008 14:40 · Поправил: Hellspawn
· Личное сообщение · #7

ужс какой))) не пишите на дельфе больше....

LexxCracker откомпилял в MASMBuilder 1.5 добавив assume fs:nothing
всё норм пашет, месседж вылетает

-----
[nice coder and reverser]





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 07 января 2008 15:26
· Личное сообщение · #8

код нормальный, хоть и извратный

-----
invoke OpenFire




Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 07 января 2008 15:48
· Личное сообщение · #9

Hellspawn пишет:
ужс какой)))


где ужс, покажите?




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

Создано: 07 января 2008 16:00
· Личное сообщение · #10

да весь код приведённый в том посте, ужас
если и делать сех на дельфях, то или try/except или asm вставку... но не фифти фифти

-----
[nice coder and reverser]




Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 07 января 2008 16:14
· Личное сообщение · #11

Hellspawn пишет:
если и делать сех на дельфях, то или try/except или asm вставку


не аргумент, товарищу нужна асм реализация, все что ему нужно в том коде есть

асм вставки нужно делать только там где без них нельзя ;)
в данном случае при "ручной" постановке SEH без них не обойтись, т.к. встроенный try/except
для примера не годится




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

Создано: 07 января 2008 16:37
· Личное сообщение · #12

как раз аргумент, товарищу асм нужен, а у вас асм в перемешку с паскалем, не айс это...

-----
[nice coder and reverser]




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

Создано: 07 января 2008 19:37
· Личное сообщение · #13

http://exelab.ru/f/action=vthread&forum=5&topic=10874
Могу дать этот пример под MASM32 если нужно.

-----
Всем привет, я вернулся



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


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