隨想錄(內存監控程序)

【 聲明:版權所有,歡迎轉載,請勿用於商業用途。  聯繫信箱:feixiaoxing @163.com】

 

    有這樣一些場景,我們需要監控一些進程是否運行,內存數據是否正確。但是,與此同時,原來的程序不能被修改,或者無法修改,但是我們希望做一些監控操作。這個時候,就需要寫一個內存監控程序了。今天,正好在網上看到類似的一篇文章,鏈接地址在。主要用到了這麼幾個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(獲取LoadLibraryW的地址) -> CreateRemoteThread (要求另外的process啓動一個thread,主要功能就是用LoadLibraryW加載這個dll)-> WaitForSingleObject(等待線程結束) -> VirtualFreeEx (釋放內存)-> CloseHandle(釋放remote thread句柄) -> CloseHandle(釋放進程句柄)。最關鍵的部分就是CreateRemoteThread 這個函數。

 

PS:

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章