58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析

内容来源于:易道云信息技术研究院VIP课

之前的内容:接管游戏的自动药水设定功能-CSDN博客

码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git

码云版本号:34b9c1d43b512d0b4a3c395b81c03c0b8e8aa374

代码下载地址,在 SRO_EX 目录下,文件名为:SRO_Ex-游戏菜单文字资源读取的逆向分析.zip

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg

提取码:q9n5

--来自百度网盘超级会员V4的分享

HOOK引擎,文件名为:黑兔sdk.zip

链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw

提取码:78h8

--来自百度网盘超级会员V4的分享

 接管游戏的自动药水设定功能-CSDN博客 它的代码为基础进行修改

修改了分析记录文件

现在我们基本的思路是要改内存,所以首先要确定,改内存的行为可不可行,就要看它的复杂度,复杂度太高那就没办法了,复杂度还行就有的玩了。

正常情况下 自动药水设定 它在内存里一定存在,接下里就搜索,首先打开游戏,然后再打开Cheat Engine

如下图红框里的内容,然后点击首次扫描

可以找到三个地址

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第1张图片

修改内存之后游戏中并没有生效,原因也很简单,这种东西肯定只会初始化一次,我们改晚了,接下来就要想办法触发自动药水设定这个地方的变化

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第2张图片

触发的方式可以通过修改它的快捷键58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第3张图片

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第4张图片

然后就改成功了,也就是说当修改快捷键的时候,它是一定会读取,下图红框里的字符串的58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第5张图片

接下来找出是什么访问了它,通过更改快捷键,来获取是什么访问了它58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第6张图片

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第7张图片

然后游戏初始化的时候也会初始化,所以在通过游重新开始找是什么访问了字符串

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第8张图片

可以发现它们的地址都是一样的

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第9张图片

然后先记入一下信息:不管是通过修改快捷键,还是重新开始,它们的寄存器的值都是一样的,所以下方每个地址只有一个图

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第10张图片

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第11张图片

接下来打开x96dbg,C50E5C、C51668,优先C50E5C这个地址,然后断到C50E5C地址(通过条件断点,C50E5C是一个被经常调用的函数,不用条件断点没法玩),然后字符串是通过edi寄存器来的,edi的值不知道从哪来,所以按ctrl+f9再按f8来到调用方,先确定一下大体的范围

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第12张图片

来到调用方,可以发现在调用方这里,自动药水设定字符串就已经存在了,所以 C50E5C 这个函数不用看了,然后再按ctrl+f9再按f8

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第13张图片

再来到上一层,自动药水设定字符串还是存在,我现在要看的是自动药水设定字符串是从哪来的,所以还要往上,所以按ctrl+f9再按f8,来到它的上一层

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第14张图片

然后就在栈里没有看到了,这里记入下一它的地址,C3D969

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第15张图片

 然后给C3D969位置打断点,可以看出它好像是用来处理,快捷键与按钮字符串绑定的,一个拼接字符串的操作

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第16张图片

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第17张图片

所以再来到它的上一层打断点

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第18张图片

可以发现这里只有自动药水设定才会触发

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第19张图片

然后可以看到,自动药水设定字符串是通过eax来的,eax寄存器会跟函数返回值有关,所以要注意一下eax的值3是从上一次传递的还是通过函数返回值来的58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第20张图片

然后下图红框,在6DA8B8位置,有一个比较,根据下图中的值来说就是 if(F>8){*((char*)(eax+4))}这样的代码,然后继续往下看58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第21张图片

意思就是,下图红框位置是一个缓冲区,缓冲区大小是8,所以eax+18位置是字符串的长度,也就是说0xF是长度,接下来也就是我们也调用下图中6DA8B3位置的函数也就能得到字符串的地址,然后通过模拟它的一个基本的判断得出来,最终eax的地址,得出来以后就可以修改了

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第22张图片

然后就分析9A46C0函数,直接在返回的位置打断点,找一个eax+18小于8的可以看出eax+4位置是一个字符串,锁定俩字,然后eax+18位置是7,eax+14位置是2,这个2可能就是有效字符的意思,7是缓冲区大小,2是有效字符,所以现在就可以给它的返回值定义一个结构体了58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析_第23张图片

 定义的结构体:

typedef struct sro_string{
    int un1;
    union{
        wchar_t title[0x4];
        wchar_t* Ptitle;
    }
    int lenth;
    int size;

    wchar_t* wcstr(){
        if(size<0x8){
            return title;
        }else{
            return Ptitle;
        }
    }
}*psro_string;

psro_string 1036518::ReadTitle(wchar_t* index);

你可能感兴趣的:(游戏,网游逆向)