如何通过一个程序的进程来获取该程序的可执行文件的路径

如何通过一个程序的进程来获取该程序的可执行文件的路径,第1张

实例句柄这个东西,MSDN说了,就是加载进程映像的基址,每个进程都是一样的,你得到其他的进程也在你自己的进程里用不了。比如,你建立任何一个进程,GetModuleHandle(NULL)函数返回的就是进程的实例句柄,一般都是0x400000(可能少写或多写了一个0)。所以,要得到一个进程的路径,只有一个方法,把自己的代码注入到目标进程的地址空间中,在被注入的代码中使用GetMoudleFileName(GetModuleHandle(NULL),szModPath,MAX_PATH)来得到这个进程的所在路径。

这就涉及到注入进程这个有意思的东西了。简单而易用的方法,就是用《Windows核心编程》中提到的方法,用创建远程线程来把自己的DLL注入到目标进程的方法来实现。创建远程线程用CreateRemoteThread(),很简单,与CreateThread()使用方法一样,只不过多出的第一个参数是目标进程句柄(记住,要有PROCESS_CREATE_THREAD权限),其他的参数,都要是在目标进程的地址空间中的。

基本的流程应该是:

用OpenProcess()函数打开目标进程,权限要有PROCESS_CREATE_THREAD,PROCESS_VM_READ,PROCESS_VM_WRITE。然后用VirtualAllocEx函数在目标进程中分配一个内存空间,这个空间要保存你的Dll文件的路径,然后用WriteProcessMemory把这个字符串写入,再用GetProcAddress得到LoadLibraryA函数的地址,当然得到的地址是自己进程地址空间中的地址,但一般情况下绝大部分进程的这个地址处都是同样的LoadLibraryA函数。利用得到的在目标进程中分配的内存的地址及LoadLibraryA函数,就可以利用创建远程线程的方法把自己的DLL文件注入进去。

只有把自己的代码注入到目标进程中,你才可能利用GetModuleFileName函数得到目标进程的路径。当然这个工作是由已经注入到目标进程中的DLL来做。

用这个 给你发个源码~

版本 2

子程序 GetModule, 整数型, , 返回指定进程中指定模块的模块地址

参数 ProcessID, 整数型

参数 模块名称, 文本型

局部变量 hObject, 整数型

局部变量 ModuleEntry32, 模块地址_

局部变量 Module, 模块地址_

' 清除数组 (Module)

hObject = API_CreateToolhelp32Snapshot (8, ProcessID) ' 若id为0表示当前进程

ModuleEntry32结构大小 = 1024

如果真 (寻找第一个32位模块_ (hObject, ModuleEntry32))

循环判断首 ()

如果真 (到小写 (到文本 (ModuleEntry32模块名称)) = 到小写 (模块名称))

API_CloseHandle (hObject)

返回 (ModuleEntry32模块句柄)

如果真结束

循环判断尾 (寻找下一个32位模块_ (hObject, ModuleEntry32))

如果真结束

API_CloseHandle (hObject)

' 调试输出 (Module)

返回 (0)

你粘贴之后直接调用“GetModule”就可以取得了

以上就是关于如何通过一个程序的进程来获取该程序的可执行文件的路径全部的内容,包括:如何通过一个程序的进程来获取该程序的可执行文件的路径、易语言 求取进程模块地址的方法.、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9754782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存