API怎么获取外部进程的起始内存地址

API怎么获取外部进程的起始内存地址,第1张

Module32First中

MODULEENTRY32

结构里modBaseAddr就是主程序模块的起始地址

最简单的方法是使用进程快照CreateToolhelp32Snapshot,列举所有的进程,然后枚举找到你所需要的进程,用Module32First获取其起始地址,然后用Module32Next获取下一个进程的

基址

也就是上一个进程的结束地址。

具体还是自己查一下MSDN,或者

百度一下

枚举所有进程的方法

例如:

版本 2

支持库 spec

子程序 实时信息读取

局部变量 测试1, 整数

局部变量 人名地址, 整数型

局部变量 人物名1, 字节集

读取整数 (pHandle, 人物基址 + 912, 取变量地址 (人名地址), 4, 0)

人物名1 = 取空白字节集 (16)

读取字节 (pHandle, 人名地址, 人物名1, 16, 0)

Rm = 取空白文本 (16)

字符转换 (#CP_ACP, 0, 人物名1, 16, Rm, 16, 0, 0)

如果 (删全部空 (Rm) ≠ “”)

分组框1标题 = 删全部空 (Rm)

否则

分组框1标题 = “人物信息”

如果结束

' --------------------------------------------------------------------人名相关--------------------------------

读取整数 (pHandle, 人物基址 + 596, 取变量地址 (H1), 4, 0)

读取整数 (pHandle, 人物基址 + 620, 取变量地址 (H2), 4, 0)

' ----------------------------------------------------------------------HP相关--------------------------------

读取整数 (pHandle, 人物基址 + 600, 取变量地址 (M1), 4, 0)

读取整数 (pHandle, 人物基址 + 624, 取变量地址 (M2), 4, 0)

' ----------------------------------------------------------------------MP相关-----------------------------------

读取整数 (pHandle, 人物基址 + 588, 取变量地址 (DJ), 4, 0)

' ----------------------------------------------------------------------等级相关-----------------------------------

读取整数 (pHandle, 人物基址 + 604, 取变量地址 (JY), 4, 0)

读取整数 (pHandle, 9218168 + 4 + DJ × 4, 取变量地址 (JY1), 4, 0)

' ----------------------------------------------------------------------经验相关-----------------------------------

读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQJ), 4, 0)

读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQY), 4, 0)

读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQT), 4, 0)

JQ金 = JQJ ÷ 10000

JQ银 = (JQY % 10000) \ 100

JQ铜 = 到数值 (取文本右边 (到文本 (JQT), 2))

' ----------------------------------------------------------------------金钱相关-----------------------------------

读取整数 (pHandle, 人物基址 + 280, 取变量地址 (辅助状态1), 4, 0)

' ----------------------------------------------------------------------辅助相关-----------------------------------

读取整数 (pHandle, 人物基址 + 964, 取变量地址 (X), 4, 0)

读取整数 (pHandle, 人物基址 + 972, 取变量地址 (Y), 4, 0)

' 输出调试文本 (四舍五入 (X, 0))

' ------------------------------------------s----------坐标相关------------------------------------------------------

如果真 (自动打怪Y选中 = 假)

读取整数 (pHandle, 人物基址 + 224, 取变量地址 (怪物死亡), 4, 0) ' 0为攻击中,不为0则表示没有攻击

如果 (怪物死亡 = 0)

捡物判断 = 真

否则

捡物判断 = 假

如果结束

如果真 (捡物判断 = 真)

查找并按键 (捡物按键)

读取整数 (pHandle, 捡物ESI + 20, 取变量地址 (捡次数), 4, 0)

如果真 (捡次数 ≤ 0)

打怪时钟时钟周期 = 500

返回 ()

如果真结束

计次循环首 (捡次数, )

置随机数种子 ()

捡物间隔 = 取随机数 (1, 499)

延时 (捡物间隔)

查找并按键 (捡物按键)

计次循环尾 ()

捡物判断 = 假

如果真结束

如果真结束

如果真 (统计功能开启选中 = 真 且 经验标题 ≠ 到文本 (JY))

如果真 (挂机初始经验 = 0)

挂机初始经验 = JY

如果真结束

如果 (挂机初始经验 > JY)

增加经验 = JY

否则

增加经验 = JY - 挂机初始经验

前一次经验 = 前一次经验 + 增加经验

如果结束

挂机经验标题 = 到文本 (前一次经验)

挂机初始经验 = JY

增加经验 = 0

' -----------------------------------------------------------统计经验部分--------------------------

如果真 (挂机初始金币金 = 0 且 挂机初始金币银 = 0 且 挂机初始金币铜 = 0)

挂机初始金币金 = JQJ ÷ 10000

挂机初始金币银 = (JQY % 10000) \ 100

挂机初始金币铜 = 到数值 (取文本右边 (到文本 (JQT), 2))

如果真结束

增加金币金 = JQ金 - 挂机初始金币金

增加金币银 = JQ银 - 挂机初始金币银

增加金币铜 = JQ铜 - 挂机初始金币铜

如果真 (增加金币银 < 0)

增加金币金 = 增加金币金 - 1

增加金币银 = 增加金币银 + 100

如果真结束

如果真 (增加金币银 ≥ 100)

增加金币金 = 增加金币金 + 1

增加金币银 = 增加金币银 - 100

如果真结束

如果真 (增加金币铜 < 0)

增加金币银 = 增加金币银 - 1

增加金币铜 = 增加金币铜 + 100

如果真结束

如果真 (增加金币铜 ≥ 100)

增加金币银 = 增加金币银 + 1

增加金币银 = 增加金币铜 - 100

如果真结束

挂机金钱标题 = 到文本 (增加金币金) + “金” + 到文本 (增加金币银) + “银” + 到文本 (增加金币铜) + “铜”

' ---------------------------------------------统计金钱--------------------------------------

如果真结束

HP标题 = 到文本 (H1) + “/” + 到文本 (H2)

MP标题 = 到文本 (M1) + “/” + 到文本 (M2)

等级标题 = 到文本 (DJ)

经验标题 = 到文本 (JY) + “/” + 到文本 (JY1)

金钱标题 = 到文本 (JQ金) + “金” + 到文本 (JQ银) + “银” + 到文本 (JQ铜) + “铜”

坐标标题 = 到文本 (取整 (X)) + “/” + 到文本 (取整 (Y))

人物游戏状态标题 = “[” + 当前状态X + “]”

' -------------------------------------------------------实时显示-----------------------------------------------------

如果真 (自动打怪Y选中 = 真 且 M1 = M2 且 H1 = H2 且 是否打坐 = 真) ' 打坐人物血和魔法补满,启动打怪

打怪时钟时钟周期 = 1000

是否打坐 = 假

如果真结束

如果真 (自动打怪Y选中 = 假) ' 关闭自动打怪功能,停止打怪时钟

打怪时钟时钟周期 = 0

如果真结束

' ------------------------------以下代码为重启打怪时钟代码----------------------------------------------------------

如果真 (自动打怪Y选中 = 真)

读取整数 (pHandle, 人物基址 + 224, 取变量地址 (站立状态1), 4, 0) ' 双数为行动状态,单数表示在站立中

' 用求余数运算来定状态

站立状态 = 站立状态1 % 2 ' 0为跑步中,1为站立中

如果 (站立状态 = 1)

是否重启打怪 = 是否重启打怪 + 1

如果真 (是否重启打怪 = 5)

打怪时钟时钟周期 = 500

是否重启打怪 = 0

如果真结束

否则

是否重启打怪 = 0

如果结束

8月

关键的问题是你是需要DLL在目标进程中的基址,而且你自己的写的程序并没有加载那个DLL,所以你总是得到0,所以你需要把自己的程序注入到进程中,才能得到你所要的DLL在目标进程中的基地址。

DLL注入比较常用的方法是利用OpenProcess得到目标进程的句柄,然后利用CreateRemoteThread调用LoadLibrary函数,加载你自己的DLL,在这个DLL的DLLMain里面遍历所有的DLL找到你想要的。这个程序在网上很多,你自己Google就可以找得到了。

以上就是关于API怎么获取外部进程的起始内存地址全部的内容,包括:API怎么获取外部进程的起始内存地址、找到游戏基址如何用C来编写代码、如果获取其它进程的DLL内存地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存