记一次某网游辅助逆向分析过程

初入茅庐

最近闲来无事,想起最近小表弟给我发了一个网址让我帮他看看。

图片[1]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

我并没有回复,而是默默的点开他发的链接。

图片[2]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

发现这是一个某网游的辅助网,共有三款软件,作为一名喜爱福老玩家,看到这行为十分的生气,而且价格也是出奇的低,出于好奇,我默默的下载了其中一个辅助……

图片[3]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

下载之后运行程序,看看这个程序跑路了没,服务器连接成功,那应该是没问题。

图片[4]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

按照国际惯例步骤,先查个壳,把程序拖入到studyPE+和ExeinfoPE里,主要看PE类型、文件类型和所在区段。

图片[5]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

这里入口区段为CODE(貌似中感染了这里先不管他,和正常的区段.test差不多),文件类型为 Borland Delphi 感觉大概率是易语言写的程序,区段也挺干净的,都属于是常见区块里的内容,初步判断这个程序应该是不带壳的,那基本上应该是属于成功一半了。

图片[6]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

反调试绕过

那么接下来先让我们的主角x32dbg登场,然后把目标程序拖入到x32dbg中,发现这个程序拖入到x32dbg中是会闪退的。

图片[7]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

造成这种闪退的原因大概率就是:反调试
          反调试这个功能并不是都由壳导致的,部分开发人员代码能力强,懂反调试技术的话,是可以把检测调试的代码写在自己的程序中,常见的反调试函数基本上就是 isDebuggerPresent函数。
          此函数是通过获取进程环境块BeingDebugged标志来检测进程是否处于调试状态。
 
迪哥讲PEB详细内容:

https://www.bilibili.com/video/BV165kEYeEfb/?p=11&share_source=copy_web&vd_source=3be97cfc577d54e942d8c53c036e9bae

我们这里使用手动分析绕过方法:
把目标程序启动,然后通过x32dbg进行程序附加,使用openArk工具选中目标程序查看线程.

图片[8]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

选择查看PEB,可以看到有一个名称为BeingDebugged的函数,正常来说值是为0x0的,当这里发现BeingDebugged的值为0x1,则说明检测到了调试行为.

图片[9]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

图片[10]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

那么这时候我们就需要去绕过反调试,防止影响我们后续的分析
拖入程序到x32dbg,找到PEB  双击FS 0053 

图片[11]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

双击地址,找到30的位置,选中右键在内存窗口中转到指定DWORD到内存2进行查看。

图片[12]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

然后在内存2中,发现BeingDebugged是 1,说明正在被调试,只需要把 01 数值改为 00 ,就可以启动程序了。

图片[13]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

图片[14]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

当然也有更简单的方法,直接使用x32dbg自带的隐藏调试器,把程序拖进去,选中,就会自动的把BeingDebugged的值改为0,这样程序就可以自动绕过这种简单的反调试了。

图片[15]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

破解过程

附加程序之后直接进入主模块,明显的易语言特征 xor eax,eax ret,那就验证了前面的说法,这就是个易语言程序。

图片[16]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

先用正常思路,常规的程序破解分析方式:
点击登录按钮,软件会进行一步判断:
1.输入卡密,会从内存中判断,有可能本地进行校验,搜字符串
2.登录按钮,找按钮的功能
3.看返回情况,常见的消息框断点 MessageBoxA/W 等消息框函数
4.易语言特殊破解方式
因为我们这里是存在易语言特征的,同时我们随机输入卡密之后并没有出现弹窗反馈卡密错误功能,所以这里先可以不用消息断点和字符串搜索来进行分析,直接使用易语言的分析方式进行初步的判断。

图片[17]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

右键当前模块搜索匹配特征,搜索易语言的特征push 0x10001.

图片[18]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

逐个进入分析,就会发现上面有存在登录成功的提示,那么这个push大概率就是登录成功的功能窗口。

图片[19]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

004018A | 68 1E600152           | push 5201601E                       |

回到主模块直接搜索FF 25

图片[20]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

这时会发现很多模块窗口,点击第一个进入地址。

图片[21]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

直接就看到了程序的入口,易语言程序入口 mov eax,6 就是程序启动之后往下执行,一直到push 52010001 执行他启动的卡密窗口id。

图片[22]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

他 push 52010001这个窗口id,之后进入call ,call函数调用的地址是412E6F 那么对应的就是载入启动窗口,这里使用push大法可以破解。

图片[23]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

前面我们分析到,登录成功功能的窗口id为 5201601E。
004018A | 681E600152           | push 5201601E
那么我们只需要把 push 52010001 改为 5201601E即可。

图片[24]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

修改之后打补丁,这里静态补丁没问题,可以打上去。

图片[25]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

这时候我们在打开我们修补补丁之后的程序,这时候就会发现成功的进入功能模块了,至此,到这里我们就已经成功的把该辅助破解了。

图片[26]-记一次某网游辅助逆向分析过程-软件安全逆向社区论坛-技术社区-学技术网

总结

         这次分析的程序是没有壳的,所以难度并不大,并且程序由易语言开发,那么只需要使用常规的分析逻辑即可实现破解。
        当然本图文教程也只是起到一个抛砖引玉的作用,仅供学习参考,如果有问题大家可以评论交流,切勿做违法操作,与本人无关仅供技术学习。
程序网址:https://cffish.cn/
请登录后发表评论