对,这些方法我在网上看的时候,还没有甚么 sp 2,我也看过微软对 DEP 技术的介绍,可惜并没有详细资料
它说这是由 CPU 和软件一同支持的保护机制,怎样实行却没有说,我在想,DEP 生效后,一个 VirtualProtectEx 更改 process 区段属性后,还可不可以运行写在上面的 code
上次我在看雪发了一个帖问大家有没有找到关于 DEP 的文章,我在网上还没有找到 ~_~
对,这些方法我在网上看的时候,还没有甚么 sp 2,我也看过微软对 DEP 技术的介绍,可惜并没有详细资料 它说这是由 CPU 和软件一同支持的保护机制,怎样实行却没有说,我在想,DEP 生效后,一个 VirtualProtectEx 更改 process 区段属性后,还可不可以运行写在上面的 code 上次我在看雪发了一个帖问大家有没有找到关于 DEP 的文章,我在网上还没有找到 ~_~
1、 进入ring 0 ,修改kernell32 ,这个可以参考莫国防源代码;
2、 Self-debuging ,和检测context差不多,但是实现的思路不一样。代码如下:
; 2004.02.17 :: fixed! let's celebrate! ;P
; but.. with this fix softice is able to trace through the code ;/
; so we have to adapt old buggy version ;]
extern wsprintfA
extern MessageBoxA
;extern SetUnhandledExceptionFilter
extern ExitProcess
;extern Sleep
;--------------------------------------------------------------------
section .code use32
..start:
push eax
call trap
trap:
pop eax ; offset of trap in eax
sub eax, (trap-..start) ; starting IP in eax
mov [init_eip], eax
pop eax
callc wsprintfA, txtbuf, exc_f1, eax, ebx, ecx, edx, edi, esi, ebp, [init_eip], cs, ds, es, fs, gs, ss, esp
callf MessageBoxA, 0, txtbuf, 0, 0
; that's FINAL process handler with different parameters, should return -1 to continue
; callf SetUnhandledExceptionFilter, ExceptionHandler
SEH_INSTALL ThreadExceptionHandler
; initialize single-step tracing
; handler doesn't need the address of continue point because its debug exception and EIP is progressed normally
mov [steps], dword 0
pushf
pop eax
or eax, 0x00000100
push eax
popf
nop
call IntegrityCheck
; save IP to safe place for next non-debug exceptions ;)
mov [exc_eip], dword exception_continue1