游戏安全实验室 首页 游戏漏洞 查看内容

【游戏漏洞】内存遍历周围对象

发布于:2018-6-29 10:00   |    120825次阅读 作者: 外部投稿    |   原作者: 通化程序员

之前我们得到了周围NPC怪物的结构

是一个数组套链表的嵌套结构

基本的遍历思路就是,首先遍历数组,得到的每一个成员再到链表中进行二次遍历

那么我们来看下代码实现

 

由于NPC怪物结构的每一个成员跟人物结构都是相同的

那么我们直接利用已经有的人物属性结构

 

 

 

这是我们之前找到的内存数据

//[[[8DAC28]+2142c]+n*4] 数组对象

//数组对象套  +8链表     新对象==0 停止遍历

//[对象+4]+0BF*4+550  血量

 

 

void TNpc怪物列表::c初始化() //获取怪物数据

{

 

__try

{

DWORD Base=Base_怪物;

Base=*(DWORD*)Base;

nd数量=*(DWORD*)(Base+0x2142C+0xC);

DWORD 开始指针=*(DWORD*)(Base+0x2142C);

DWORD 结束指针=*(DWORD*)(Base+0x21430);

 

DWORD nd数组成员数=(结束指针-开始指针)/4;

DWORD Obj=0;

DWORD j=0;

for (int i=0;i<(int)nd数组成员数;i++)

{

Obj=*(DWORD*)(开始指针+i*4);

 

while (Obj!=0)

{

 

列表[j].szpName="";

DWORD Nameaddr=Call_取对象名称(*(DWORD*)(Obj+4));

Nameaddr=*(DWORD*)Nameaddr;

列表[j].szpName=(char*)Nameaddr;

列表[j].fHp=*(FLOAT*)(*(DWORD*)(Obj+4)+0x0BF*4+0x550);

列表[j].fMaxHp=*(FLOAT*)(*(DWORD*)(Obj+4)+0x0C0*4+0x550);

列表[j].fMp=*(FLOAT*)(*(DWORD*)(Obj+4)+0x0C8*4+0x550);

列表[j].fMaxMp=*(FLOAT*)(*(DWORD*)(Obj+4)+0x0C9*4+0x550);

Obj=*(DWORD*)(Obj+0x8);

j=j+1;

}

}

 

}

__except (1)

{

Call_输出调试信息("QQ西游    读取NPC怪物信息异常\r\n");

}

 

}

 

然后我们在DLL dialog中创建一个按钮来调用我们的遍历代码

 

 

 

这样就可以实现对周围NPC怪物结构的遍历了

我们来看一下调试输出的效果

 

 




来源:通化程序员-公众号投稿

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:【游戏漏洞】asm内联调用CALL

下一篇:【游戏漏洞】简单破解安卓手游基础

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部