原文地址:http://bbs.pediy.com/showthread.php?t=31447
在使用 CreateProcess 創建進程時,需要傳遞
STARTUPINFO 的結構的指針,
而常常我們並不會一個一個設置其結構的值,
連把其他不用的值清0都會忽略,
而 ollydbg 也這樣做了,
我們可以使用 GetStartupInfo 檢查啟動信息,
如果很多值為"不可理解"的,那么就說明自己不是由 explorer 來創建的.(explorer.exe 使用 shell32 中 ShellExecute 的來運行程序, ShellExecute 會清不用的值)
還有一點 ollydbg 會向 STARTUPINFO 中的 dwFlags 設置 STARTF_FORCEOFFFEEDBACK,而 explorer 不會
1 //////////////////////// 2 //ex 3 4 #include <windows.h> 5 #include <stdio.h> 6 7 #pragma comment(linker, "/subsystem:windows /entry:main") 8 9 int main() 10 { 11 STARTUPINFO si; 12 13 GetStartupInfo(&si); 14 15 if ( 16 (si.dwX != 0) || 17 (si.dwY != 0) || 18 (si.dwXCountChars != 0) || 19 (si.dwYCountChars != 0) || 20 (si.dwFillAttribute != 0) || 21 (si.dwXSize != 0) || 22 (si.dwYSize != 0) || 23 (si.dwFlags & STARTF_FORCEOFFFEEDBACK) 24 ) 25 { 26 MessageBox(NULL, "found debugger!", NULL, 0); 27 } 28 else 29 { 30 MessageBox(NULL, "no found debugger!", NULL, 0); 31 } 32 33 return 0; 34 }
自己在VC里實驗了一下,果然能用
於是忽然想到,把它放在DllMain里,如果檢測到有調試信息就return FALSE,使得程序不能正常初始化。實驗了一下,果然好使,代碼就不往上貼了,復制一下就是。
想在匯編下實現同樣的功能,但是出了點問題,水平太次了,這么簡單的功能,調了一下午也沒調出來
最后發郵件詢問大神,大神直接問,如果對方附加,你怎么辦?
頓時心里涼了一截……
就是啊,人家等你啟動后用OD附加,那就真的沒辦法了。唉,不灰心,權當玩了吧,至少也是一個思路不是~
另外,匯編寫的程序真不知道怎么調試。放IDA里一點毛病也沒發現,放OD里結果是出現了不能處理的異常……
難道只能一遍一遍看源碼么!!!