前言
这是一个游戏外挂软件,其实是由群员开发,让本人测试一下强度,结果可想而知。
破解成功软件界面:



分析
观察确定方向
软件运行后,存在一个弹窗,貌似是卡密之类的,如果输入错误,程序就会退出
我们在做程序逆向分析的时候,一定要关注软件的行为。因为这些软件行为之中就暗藏着我们的机会,稍不留意你就会错过很多重要的信息。
当我们点击确定按钮之后,这个程序就会退出,那我们就要思考一下什么样的函数会导致程序的退出
一般来说是ExitProcess或者TerminateProcess

分析程序窗口
使用社区的插件我们得知,这个外挂软件只有一个窗口,那这样的话就有意思了。这就说明刚才弹出的那个验证窗口它实际上不属于程序的一部分。大概率是属于那种网络/本地验证一键加的感觉。如果说验证成功就跳转到源程序的执行入口去执行。所以说在源程序中分析窗口是看不到上面那个验证窗口的,因为它属于外部的代码,并不属于程序原本的代码。

那么现在的思路就越来越明确了:我们要找到从哪里导致程序的退出。
这个程序调用退出函数的地方就是验证的关键部分,我们找到关键部分把它的核心验证的校验给他干掉就可以直接来到源程序了,也就意味着我们直接突破验证系统防护,进入到外挂系统。
切入ExitProcess
1.经过测试,我们发现在这个函数上,程序在退出的时候就能够直接断下来

2.然后我们可以点击调用堆栈进行回溯

3.挨个翻开每层看看有没有机会
倒数第一层都是被VM混淆后的代码,没什么机会了

倒数第二层也是没机会

现在所有的希望都在倒数第三层了,那么到底有没有机会?我们拭目以待:
总结
1.如果大家作为程序开发者,一定要谨慎使用这种本地或者网络验证的一键加系统,这种外部防护往往是脆弱的,打铁还需自身硬。
2.我比较推荐大家直接套用源代码级别的验证系统,然后把重要的函数全部VM混淆掉,这样软件破解者的机会会比较少一些。
3.当然了,没有百分百安全的系统,没有绝对安全的系统。任何一个意外任何一个漏洞都有可能导致软件的沦陷。

评论区第一条温暖的评论
