随想录(内存监控程序)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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反汇编进一步确认原来可执行程序的基础地址(因为有可能不是静态地址,而是动态地址),而辅助程序就是通过定时检测操作来修改对应内存的数值,提升游戏体验。按照目前的法律,这种修改程序的行为是不合法的,希望大家还是用在正道上面。类似的程序还有伪装木马什么的,看看就好,不要乱用。

 

 

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