隨想錄(程式除錯與dll注入)

2021-10-03 07:56:19 字數 1351 閱讀 9367

有這樣一些場景,我們需要監控一些程序是否執行,記憶體資料是否正確。但是,與此同時,原來的程式不能被修改,或者無法修改,但是我們希望做一些監控操作。這個時候,就需要寫乙個記憶體監控程式了。今天,正好在網上看到類似的一篇文章,鏈結位址在這。主要用到了這麼幾個api,即

1、獲取視窗控制代碼

findwindoww

2、根據視窗控制代碼獲取程序id資訊

getwindowthreadprocessid

3、根據程序id獲取程序控制代碼

openprocess

4、讀取程序中的記憶體資料

readprocessmemory

5、資料寫入到對應的程序空間

writeprocessmemory

其實不管什麼程序,對於作業系統來說都是一樣的。所以,乙個程序如果想看另外乙個程序的資料,從技術上來說沒有什麼難度。雖然不同程式的user space都差不多,只是tlb不同,但是只要os api支援,就沒有什麼問題。在實際開發中,我們發現可以通過gdb去除錯和操作另外乙個程式,原理和這個也差不多。

如果需要將某乙個除錯dll嵌入(有時候也叫注入)到別人的程式中,可以參考這個鏈結,主要的基本流程也是

openprocess (開啟插入程序)-> 

virtualallocex(注意是其他process的控制代碼) -> 

writeprocessmemory(同樣是其他process的控制代碼) -> 

getprocaddress(getmodulehandle獲取核心dll控制代碼、獲取loadlibraryw的位址) -> 

createremotethread (要求另外process啟動thread,為loadlibraryw載入這個dll)-> 

waitforsingleobject(等待執行緒結束) -> 

virtualfreeex (釋放記憶體)-> 

closehandle(釋放remote thread控制代碼) -> 

closehandle(釋放程序控制代碼)。最關鍵的部分就是createremotethread 這個函式。類似的操作還可以參考這裡。

ps:

鏈結的這篇文章本來是做遊戲輔助的。主要方法是通過遊戲操作,在cheatengine上面找到對應數值的位址,接著通過od反彙編進一步確認原來可執行程式的基礎位址(因為有可能不是靜態位址,而是動態位址),而輔助程式就是通過定時檢測操作來修改對應記憶體的數值,提公升遊戲體驗。按照目前的法律,這種修改程式的行為是不合法的,希望大家還是用在正道上面。類似的程式還有偽裝木馬什麼、易語言操作什麼的,看看就好,不要亂用。

現在除了cheatengine之外,另外乙個重要的除錯軟體就是ollydbg。用好了ollydbg,其實就可以開始測試了。這個ollydbg相當於gdb除錯,不過功能更強大,破解的時候需要到。

隨想錄(軟體除錯)

對於很多程式設計師朋友來說,編寫 要比除錯 快樂的多。似乎創造軟體比維護軟體更能給人帶來成就感。然而,在企業裡面維護前人留下的 也是工作中不可缺少的一項內容。所以,如何除錯軟體,更快更好地尋找軟體中的bug,就成了我們必須學習的一門功課。當然,有人查詢故障很快,而有的人卻要慢一點,這中間的原因很多,...

管理諮詢與IT技術衝突隨想錄(一)

諮詢人員總是會問如下問題 1.為什麼沒有基本的產品研發思路?2.為什麼沒有基礎產品的架構?3.為什麼其它的公司在諮詢的時候會給出乙個比較合理的it系統 4.同一型別的業務為什麼換了其它行業,軟體開發的功能模組有什麼差別?5.it技術已經非常成熟了,為什麼這麼簡單的功能還需要開發這麼長時間或者不能實現...

隨想錄(35歲後的程式設計師)

很多人都說程式設計師是青春飯的工作,35歲或者40歲之後基本上沒有程式設計師的工作。那我們自己也要思考一下,為什麼大齡程式設計師會比較危險,他們有什麼危機?1 技術僵化 大部分程式設計師從事的工作基本上都是增 刪 查 改的一般工作,缺少技術積累,很容易被取代。試想一下,如果乙個程式設計師一直從事的是...