42.第二阶段x86游戏实战2-lua寻找状态指针
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:41.第二阶段x86游戏实战2-C++实现lua寻路
上一个内容里使用C++对接到了lua里,本次写一个状态指针
首先游戏它是怎样调用lua的?一般它用到的是doString、doFile函数,doString和doFile的区别,DoFile用来读取文件然后再去执行文件里的内容,它只执行一次,简单点说DoFile做的事是把文件内容读出来然后去调用doString,doString就只doString,这是DoFile和DoString的区别
当前靶场游戏只需要使DoString函数,然后需要了解一下DoString函数的入参和返回值,所以打开OD并附加到游戏,然后找到游戏里的LuaPlus.dll,如下图红框,然后双击它进入LuaPlus模块里
进入LuaPlus模块里
然后按CTRL+G,lua_dostring然后点OK
点了OK就会来到下图红框位置
然后在下图红框位置打断点
然后如下图断下来,一打断点它就会断下来,因为游戏里会不断的很频繁的调用lua脚本
然后如下图取消断点
然后按CTRL+F9来到下图位置
然后开始分析这附近的代码,如下图有一句add esp,8,这意思平栈,然后esp是栈顶寄存器,然后栈顶寄存器加0x8的意思是lua_dostring函数有两个参数,这是一个外平栈的写法
然后接下来在下图红框位置打断点
然后如下图红框,lua_dostring函数的两个入参
如下图红框是状态指针,有了状态指针就可以去调用游戏里的lua函数了也就是可以调用游戏里的lua脚本,所以要找一下eax的值哪来的
然后eax的值来自于下图红框函数的返回值
如下图通过返回值得到的eax
所以接下来进入下图红框的函数看看里面是怎样的
然后如下图红框打断点并断下来
然后取消断点
然后按F7进入函数里
如下图红框,可以看到它来自于0xCA4220这个基址,然后现在就找到了状态指针
然后复制一下特征码,方便后续定位,然后使用特征码定位的时候发现了一个问题,把下图红框里的代码全部复制出来会发现特征码定位工具定位的位置是错的
然后把下图红框的代码复制成特征码发现可以正常定位了
如下图红框
然后如下图红框,可以把这些东西也给复制成特征码,如果上方的基址没法用了,可以通过调用函数获取返回值的方式获取状态指针
如下图通过特征码定位的偏移
然后DoString函数的第二个参数,如下图第二个参数可以看出它是lua代码,然后到这就解决了调用游戏中lua的所有问题,后面可以写C++代码了
然后再定位一下doString函数的偏移