您的位置:首页 > 其它

一个简单crackme破解及去除暗桩

2017-02-22 12:32 615 查看
本文转载自来来来,教你花样破解一个crackme并去除暗桩,并附带详细原理讲解

破解步骤01:查壳与脱壳



这里虽然显示的是Visual C++,其实这软件是易语言写的。易语言用的是VC的link.exe,所以软件入口一样。

破解步骤02:信息收集

随意输入进去一个注册码弹了一个小的消息框,提示注册失败。点击确定之后这个消息框就没了,但是并不会影响程序运行。





下api断点拦截对话框。



破解步骤03:od调试

运行程序,随便输入注册码,点击注册,这时候od已经把这个软件挂起了,可以对软件施工了。



因为断点是断在系统API上的,所以不能直接对这里的代码进行分析,需要回到程序领空。



这里有一个call,也就是调用子函数,这个call上面压了一大堆东西,倍有易语言的风格。这时候,代码就变得可疑了,让我们往上看。



注册码是固定的,这时候已经可以拿这个注册码去注册了。但是注册码并不是我们的目标,我们的目标把这个软件爆破了。注册码被压入栈之后,下面不远处有个cmp,然后紧接着是一个je,直接跳向了弹窗的call,这就是关键跳了。如果不确定的话,可以在这里下一个断点,然后运行下程序,随意输入个注册码试试,肯定会被断在这里。既然这样,只要把这个跳转nop掉,就可以破解掉这里的验证。



运行一下保存的程序,随便输入注册码,点击注册,发现软件消失了。

破解步骤04:去退出暗桩

这就是典型的退出暗桩了。这还算幸运的,有些软件带有格式化暗桩,如果触发了后果是不堪设想。ExitProcess是一个程序退出的API,程序调用这个之后,就会退出。我们下这个断点,当程序即将退出的时候,就会被拦截下来。



和以前一样,程序还是断在系统领空的,我们需要找到程序自己的领空才行。还记得前面怎么回到程序领空的么?想要点击执行到返回?错!点一下试试,点了程序就退出啦。这时候可以看堆栈的调用,然后手动去找代码。我们点击这个按钮,打开堆栈。



这就是调用栈了。ExitProcess在最顶,程序即将退出。双击下面那层,进去看看。



代码好像比较乱,但是至少找到了一个call。把call下个断点,然后重新运行程序。



随便输入注册码,点击注册,程序果然被断在这里。



通过观察可以发现,这个地方不应该是call过来的,应该是跳过来的。而上面有许多没有分析的代码,或许一会可以对那地方研究研究。观察下右下角。



右下角其实也是堆栈,这里又出现我们输入的假注册码了。这里是怎么回事呢?



快速跳到这附近,对附近的代码进行观察。



通过堆栈来看,这里确实是被执行了,而不是一些无用的二进制数据。右键——分析——从模块中删除分析。





这里有个跳转,正好能直接跳到下面那个退出的call。在这里下个断点,然后重新跑一遍程序,点击注册之后又断在这里。既然注册码不正确这里就跳向退出,那么还是直接nop掉就好了。和之前一样保存一个新文件,然后填入任意注册码,点击注册。



破解步骤05:再去暗桩

这里的特征是弹出一个消息框,点击确定后程序自动关闭,那么下退出断点或者是消息框断点都可以,这里下消息框断点好了。这样还可以执行到返回,而不至于立即退出。返回的时候要小心不能触发了退出。



又一次被od拦截,多点几次执行到返回,回到程序领空,成了这样。



因为目前不知道退出的call到底在哪,所以不能继续执行到返回了,来看堆栈。



跟踪进去看看,又是一个倍有易语言风味的call。很明显,这里的这个call就是弹出对话框了。那么,下面那个call会不会是退出呢?



上面有一个很大的je。



这个je是怎么回事?好像是如果注册码正确的话,就会向正确的功能,反之不跳转。还是那句老话,不确定的话可以断点,然后重新运行,断下来之后观察。确认之后,把这里的je换成jmp。成功了!这时候的程序会发出欢呼声,并一直播放一个表示胜利的音乐。



看完这篇文章,你应该也知道api断点的工作原理了:拦截软件的行为。破解就是入门难,实际上哪有你想象的那么难?你需要的是理解而不是背诵。熟练使用api断点,你就能搞定大部分不加壳或者能脱掉壳的软件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: