Code:
format PE GUI 4.0
use32
include 'win32ax.inc'
.code
program:
;call DetachDebugger
invoke MessageBoxA,0,'Okay. Try to debug me now!','',0
invoke ExitProcess,0
; push 747565
; call ExitProcess
proc DetachDebugger
xor eax,eax
mov edx,[fs:eax+0x30] ; TEB.Peb
mov ecx,[edx+0x0c] ; PEB.Ldr
jecxz .win9x
mov eax,[edx+0xa4] ; PEB.OSMajorVersion
shl eax,2
add eax,[edx+0xa8] ; PEB.OSMinorVersion
call @f
@@: pop edx
add edx,.nt_syscall_table-@b
movzx eax,word[edx+(eax-16)*2]
xor ecx,ecx
push ecx
push ecx
push 17
push -2
call @f
@@: add dword [esp],@f-@b
lea edx,[esp+4]
int 0x2e
@@: add esp,20
ret
.nt_syscall_table:
dw 0x00a5,\
0,\
0,\
0,\
0x00c7,\
0x00e5,\
0x00ee,\
0,\
0x0133,\
0x014f,\
0,\
0,\
0,\
0,\
0,\
0,\
0
.win9x:
ret
endp
proc callback,handle,reason,reserved
cmp [reason],DLL_PROCESS_ATTACH
jnz @f
call DetachDebugger
@@: ret
endp
.data
tls_index dd 0
tls_callbacks:
dd callback
dd 0
data 9 ; TLS Directory
dd 0 ; StartAddressOfRawData
dd 0 ; EndAddressOfRawData
dd tls_index ; AddressOfIndex
dd tls_callbacks ; AddressOfCallBacks
dd 0 ; SizeOfZeroFill
dd 0 ; Characteristics
end data
.end program
Писал скорее всего не я (так как даже не понял с первого взгляда что это).
Антиотладочный трюк. Синтаксис fasm.
А вообще, если кому нужно, я могу выложить пару сотен подобных сниппетов. У меня много, бОльшая часть на ассемблере (fasm). Только не могу вспомнить куда я их скинул.