一个简单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断点,你就能搞定大部分不加壳或者能脱掉壳的软件。
破解步骤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断点,你就能搞定大部分不加壳或者能脱掉壳的软件。
相关文章推荐
- 一个简单crackme破解及注册机编写
- 爆破一个简单的crackme
- 解密一个简单的keyfile保护的CrackMe
- 快讯:黑客找到一个破解虹膜生物安全系统的简单方法
- 记录一个简单的ASM程序破解过程
- 忘记Windows登陆密码怎么办?教你一个简单的破解方法
- 一个简单的破解示例
- 一个简单的Android破解WIFI密码的方法(实用)
- 发现新大陆:一个最简单的破解SSL加密网络数据包的方法
- 一个简单的crackme,程序是由.Net编写的
- 利用x64_dbg破解一个最简单的64位小程序
- 一个简单的去除html标签的方法
- 一个简单的apk破解
- CrackMe破解【3】- 简单级别
- 一个有意思的笔试题:如何破解一个简单密码登陆程序
- 发现新大陆:一个最简单的破解SSL加密网络数据包的方法
- OllyICE的简单实用及一个小cracker的破解
- 破解的一个crackme,附注册机
- 一个简单php版暴力破解程序
- js简单算法(二)如何去除一个数组中与另一个数组中的值相同的元素