
关键的问题是你是需要DLL在目标进程中的基址,而且你自己的写的程序并没有加载那个DLL,所以你总是得到0,所以你需要把自己的程序注入到进程中,才能得到你所要的DLL在目标进程中的基地址。
DLL注入比较常用的方法是利用OpenProcess得到目标进程的句柄,然后利用CreateRemoteThread调用LoadLibrary函数,加载你自己的DLL,在这个DLL的DLLMain里面遍历所有的DLL找到你想要的。这个程序在网上很多,你自己Google就可以找得到了。
Module32First中MODULEENTRY32结构里modBaseAddr就是主程序模块的起始地址
最简单的方法是使用进程快照CreateToolhelp32Snapshot,列举所有的进程,然后枚举找到你所需要的进程,用Module32First获取其起始地址,然后用Module32Next获取下一个进程的基址也就是上一个进程的结束地址。
具体还是自己查一下MSDN,或者百度一下枚举所有进程的方法
public void FindWindow()
{
Process[] ps = ProcessGetProcesses(); //遍历所有的进程
foreach (Process p in ps)
{
if (pProcessName=="你要找的进程") //这里是bexe
{
//这里可以遍历所有模块,找你要找的dll了
for (int i = 0; i < pModulesCount; i++)
{
ConsoleWriteLine(pModules[i]ModuleName);
//要找基址就用pModules[i]EntryPointAddress
ConsoleWriteLine(pModules[i]EntryPointAddressToString("x8"));
}
}
}
}
以上只是我写的一个列子,供你参考,希望能帮到你
别忘了添加引用:using SystemDiagnostics;
实例句柄这个东西,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来做。
第一步当然是开游戏,有CE载入它的进程(看图)
搜你要搜的值,一般用默认的那个(整数,4字节)
比如搜金钱,就输入金钱数,一开始会有很多个,这时要改变下金钱的数(捡钱扔钱随你)
然后再次搜金钱的数,循环数次后剩下1个或几个,双击它,看图,现在我的钱是5
点击中框选的位置
点击后得到一个新窗口
进入游戏改变一下金钱的数(扔钱捡钱随便你),之后得到如下图
双击出现的文字,出现如下图
根据刚才记下的esi,搜索下esi(如图)
按照下图指示
双击选出的那一项,按照图1
图2的顺序做
这时候要小退一下,记住`是小退,进来后看看那个地址的值是不是跟金钱一样,改变一下金钱的数,看会不会跟着改变,如果会,就代表找对了
以上就是关于如果获取其它进程的DLL内存地址全部的内容,包括:如果获取其它进程的DLL内存地址、程序的API内存地址怎么获取、C#怎么获取DLL基址,这个问题困扰小弟很久了,谢谢各位大哥等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)