逆向分析吃鸡外挂 ,有点厉害呀!
背景
最近在浏览某网络论坛,看到一款刺激战场的吃鸡外挂软件下载量很高,出于对游戏外挂样本的敏感及逆向的专注,就从论坛上下载一个样本,并进行对该游戏外挂样本,深度功能分析及还原破解的逆向实践,主要从外挂样本的功能表现,样本的基础属性、样本的实现功能、样本的验证功能破解进行实践。
基本属性
(分析这些未知的软件切记得在虚拟机环境下进行)
启动游戏辅助样本后,从表面上来看功能确实很强大,透视、距离、显血、自瞄这些都是玩家想用游戏辅助的一个痛点。但这游戏辅助功能都有实现吗?有这么强大了吗?
结合Exeinfo PE和pchunter工具可以得出样本基本属性的结果。
该样本是通过易语言(WTWindow类名是易语言特有)进行开发的,从查壳和区段信息来看,该样本是没有做任何保护的普通样本。
注册码破解
样本点击开启辅助功能的时候,提示需要先进行获取注册码,进行对样本功能激活,才能正常使用样本的功能。
点击获取注册码按钮,会弹出扫描支付的对话框,但是对话框 是空白的。通过逆向分析得出的结论是,奈何该样本开发作者的服务器,已经过期而且是没有进行备案登记的,所以样本通过http通讯方式,进行向服务器请求支付的二维码图片就请求失败,所以弹出的支付对话框就是空白的界面。
对于要逆向破解程序某功能点时,主要需要通过强大的ollydbg工具进行做动态调试,其他工具如IDA、procmon、pchunter等主要是作为逆向分析破解的辅助点和参考点。
分析易语言样本可采用的通用突破点
通过下对话框函数断点MessageBoxA
从字符串进行入手下断点
通过搜索易语言按钮事件特征码(FF 55 FC 5F 5E 89 5D F4 )进行下断点。
注册码的破解流程步骤
在ollydbg工具中,通过下系统API函数也就是弹出对话的MessageBoxA函数下int3断点(F2断点),接着去点击获取的按钮,以触发调用函数,这个时候ollydbg工具中也会触发int3断点,在通过在断点中的堆栈信息上进行回溯分析。
基于以上的方法进行分析,就可以不用通过扫描二维码支付,就可以获取到正确的转账单号,从而获取到正确的激活码。正确的转账单号直接写在代码中进行做判断,并且代码中校验是否正确的方式,通过账单号两位数为单位进行校验的。校验正确后,这个时候就会弹出正确激活码字符串信息了。
通过输入前面获取到激活码字符串信息,就可以进行激活辅助软件了。这个时候在进行点击开启辅助功能,就发现可以有正确的对话框提示了。(通过测试和验证分析并没有所谓的修改游戏客户端数据进行作弊的功能)
钩子技术分析
(外挂样本中应用到钩子技术)
1.实现钩子技术需要的三个系统函数
2.全局钩子注入方式的实现步骤
1.调用SetWindowsHookEXA设置安装钩子(可以按需进行设置不同类型钩子)
2.实现钩子的回调函数,再回调函数里面调用CallNextHookEx。
3.调用UnhookWindowsHookExA卸载钩子
该辅助样本实现的功能
该吃鸡样本实现安装了两个钩子,主要用于监控对话框的输入事件,监控CBT程序的。并没有通过钩子技术,实现对游戏客户端进程注入模块。
监控对话框输入事件实现
对当前线程进行安装WH_MSGFILTER 钩子
钩子的回调函数:主要是进行对话框输入事件进行监控。
对CBT应用程序监控
对当前线程进行安装 WH_CBT钩子
CBT钩子的回调函数实现
总结
基于以上的分析,可以很清晰的得出结果,该辅助作者开发弹出对话框功能很多,实际实现有效功能是微乎其微的,它只是一个框架流程进行对话框展示。其实该样本就是个没有实际功能的辅助,只是为了忽悠小白的。
作为一个常规的游戏辅助软件,一般都需具备网络验证、注入功能、内存读写功能。
游戏中购买使用游戏辅助软件,这个是相对不明智的选择,毕竟这个双向的危险系数非常高的。其一使用游戏辅助那么就必定会面临被封号的风险。其二购买游戏辅助又容易被忽悠、被骗的情况出现。