• 75阅读
  • 0回复

《猎天》之控件分析 [复制链接]

上一主题 下一主题
离线任鸟飞
 

微信公众号  任鸟飞逆向
控件点击已经成为了很多主流游戏中必不可少的数据之一,控件点击可以实现很多无法通过简单的发包来实现的动作。比如登录动作,通过发包往往需要对密码信息进行加密,而密码的加密解密都是网游安全的重中之重,想要逆向分析都非常困难,这时只需要调用一次登录控件点击,就可以很容易的达到目的。
虽然控件的作用很大,用起来简单又暴力,可是分析起来却不容易,控件遍历的突破口难找,控件遍历的数据结构也都非常复杂。
以《猎天》为例,我们来分析一下控件点击和控件遍历。
我们将以游戏设置窗口中的“应用”按钮为突破口。通过CE搜索每次点击按钮后“全屏泛光”的标志位,得到少量的符合要求的地址(如图)
选择第一个地址,在OD上下硬件写入,后修改“全屏泛光”的标志,点击应用后游戏断下(如图)
多次执行到返回,找到和控件相关的一些CALL,这期间跳过了一些LUA相关的CALL和client模块内的CALL,最终返回到了CEGUIBas模块内(如图)
由于大部分的控件点击都会调用控件对象下的虚表,所以我们先着重查看带有”包含“的函数。
在返回到00C17378FFD0            call    eax  所在的函数时,我们发现这里只有点击控件才会断下 (如图)
这个call的参数很简单,第一个和第三个都是常量,第二个参数是结构体,里面存放了一个疑似控件对象的地址。
数据窗口中跟随这个地址,并观察内部结构,我们发现这里存放有类似控件名字的地址,向下看还有随着控件位置变化的窗口坐标。而通过其他信息我们也可以断定这就是控件对象。(如图)(如图)
我们随便找个按钮,尝试调用,发现也可以直接调用成功。(如图)
接下来我们就要通过控件对象去分析控件遍历。在数据窗口中跟随一个可视的控件,并在+0的位置下硬件访问,可以断到如图的位置(如图)(如图)
这个位置继续向上分析,我们发现ecx来源于esi-4,而esi来源于头部附近的ecx+0E4,而向下看的话还会发现这里有一个向上的跳转,执行一遍这个循环之后我们发现这其实是一个数组的代码,但是是一个递减的数组,也就是说他是从后向前遍历的,这并不能影响我们的遍历结果。
执行到返回后我们发现,大部分情况下,我们的返回地址和我们之前的返回地址是一样的,也就是说这里是一个递归函数,每一次从数组中取一个成员+0E4后又是一个数组遍历,一直遍历到+0E4的位置为0为止。
通过堆栈跳出这个递归循环,继续追ECX的来源,(如图)  
继续返回,最终得到控件基地址(如图)
这样我们就能得到完整的控件遍历了,这里的控件点击CALL并不是完全通用的,如果继续返回2层可以得到所有控件的点击CALL,当然需要我们传如控件的坐标才能点击成功,这里我们就不做演示了。
控件遍历的递归函数有时会很复杂,有些游戏会用到多种数据结构以及一些变形的结构的递归,这时分析起来就要麻烦的多,不过只要我们用心去观察总能发现这些关键的代码。
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个