使用 GetStartupInfo 檢查自己是否被"調試"(轉自看雪論壇)


原文地址: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里結果是出現了不能處理的異常……

難道只能一遍一遍看源碼么!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM