vb使用ReadProcessMemory读取程序内存

vb使用ReadProcessMemory读取程序内存,第1张

ByVal是传值,Byref是传址,可以ByVal 直接数,也可以ByVal 变量,&H是16进制的意思

ByVal &HCFD3D4就是直接把16进制数CFD3D4传递给调用函数,如果不加ByVal,缺省是Byref,也就是传递该数值所在的地址,结果当然就完全不一样了,如果用变量:

Dim m As Long

m = &HCFD3D4

ReadProcessMemory pHandle, ByVal m, life, 4, 0&

我这里就只说说实现原理,而不作详细的程序了。

首先是利用ToolHelp32工具枚举获取qqexe所在的进程ID,

CreateToolhelp32Snapshot(), ProcessFirst32(), 等等,

然后根据所获得的进程ID,利用OpenProcess打开并取得其hProcess,

跟着读出该进程的数据区,利用ReadProcessMemory()实现(过程中应注意速度,作出筛选&优化)

尔后扫描所获得的数据"\msgexdb"的位置,前面的东东就是QQ号码了。

这是比较简单的方法,至于还有一些更好的,不过我这就不再多作冗言赘句了。

至于跟着怎么把他读出来显示在文本框上,Text1Text = lpszQQNumber 就行了嘛。

API:

OpenProcess

ReadProcessMemory

你应该用baidu搜索。

HANDLE OpenProcess(

DWORD dwDesiredAccess, // access flag

BOOL bInheritHandle, // handle inheritance option

DWORD dwProcessId // process identifier

);

private function OpernProcess lib "kernel32" (byval dwDesiredAccess as long,byval bInheritHandle as long,byval dwProcessId as long) as long

BOOL ReadProcessMemory(

HANDLE hProcess, // handle to the process

LPCVOID lpBaseAddress, // base of memory area

LPVOID lpBuffer, // data buffer

SIZE_T nSize, // number of bytes to read

SIZE_T lpNumberOfBytesRead // number of bytes read

);

基址

和偏移是一样的,比如游戏可能把生命值放在这样一个地址:[[[6FA9B181]+91]+99C],他是从6FA9B181这个地址中取出数据加上91得到新的地址A,再从A这个地址取出数据加上99C得到另一个地址B,然后再从B中取出生命值。由于这个算法的中间量可能会变,所以每次开启游戏,数据都可能放在不同的地址。

以上就是关于vb使用ReadProcessMemory读取程序内存全部的内容,包括:vb使用ReadProcessMemory读取程序内存、VB 怎么获得数据所在内存地址~并监视数据~、VB怎么读取内存等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存