前言:
有人说玩了那么多天Ollydbg你现在能破解一个软件么?这个,不要揭人家短么。初三我就买了《X档案破解篇》看,结果看了半年也没看懂,只学些皮毛,初四的时候就爆破成功第一个小软(貌似是刷微博粉丝的)。怎么说,不管怎样我还是菜鸟。shark恒大大调戏我们,带了这个么个软件让我们获取注册码,今天我们就来看看~
文件下载 | 文件名称:注册码深入 | 文件大小:240KB |
下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如有版权问题,请联系博猪! | ||
下载地址:点击下载>(提取码:d70b) |
以上是本节课需要折腾的素材,老规矩——报毒请直接无视,或者放入虚拟机当中。
破解开始:
一.查壳:
难得没有壳子,我们这次可要得到注册码的,没有思路的同学可以看这里:软件破解教程二 直接获得注册码
二话不说载入ollydbg:
我们先运行程序,看看输入错误程序返回什么错误信息。
OK,我们右键只能搜索字符串 ctrl+F 搜索“瞎猜呢” 返回结果——找不到。看来又是遭遇字符串加密程序了,字符串这条思路就断了,没关系我们还有堆栈法呢,这时候我们就要用到:七-深入爆破 跳出基础 利用OllyDbg 无字符串爆破这节课提到的。
我们F9运行程序,填入注册信息,走到错误信息那里——切回ollydbg——F12暂停程序 (方法第七节课有具体)点击小K来到堆栈窗口,找到messageA 右键——显示调用:
接下来,还和第七课讲的一样(貌似程序也一样),我们在这里F2下一个断点,ctrl+F2重载程序,停到这里了,然后我们F8一步步向下步入。(不懂的同学去看第七课,方法和结构几乎一样)。废话不说了最后我们跳出CALL来到了这里。
找注册码关键CALL的方法:
我们来干啥的?找注册码啊。既然不是来爆破的,我们就不用K掉跳转找逻辑关系了。我们应该找到进行注册码计算的CALL,好获得注册码,往上看了看,好多call。怎么知道哪个是关键CALL呢?我们往上找,并且在段首F2下断点。PS:为了防止干扰新手应该——调试——断点 ,把我们哪个messageA断点删除,虽然在后面不太影响,培养良好的习惯吧~
ctrl+F2重新载入,F9运行。写上假的信息,我们停到了断点处。等等,如果按逻辑往下走的话,首先要经过计算把我们的注册用户名经过计算计算出注册码的真正值,在经过比较后调用CALL弹出错误。那么我们只需要记住刚才写的假的用户名,F8慢慢往下走,看着点右侧的寄存器窗口,一旦看到我们的用户名就是进行计算的CALL了。
接下来就要慢一些了,应为马上就要调用CALL进行计算了,我们一步步按F8向下步入,注意寄存器窗口变化,别错过了注册码。ps:出现下图的时候,OllyDbg会小小的一卡(因为他要进行运算):
最终小插曲:
很好,我们已经得到了注册码,我们在寄存器窗口右键——复制寄存器信息到剪贴板,我们把注册码复制出来,正常情况下我们已经破解成功了,用我们的用户名加上这个注册码即可~我们测试下
为什么错误了?日了狗了?最终的答案是:其实用户名和注册码,只有cpu码才是固定的。用户名的后一半,是根据假的注册码的长度x2得出来的,也就是说,得到cpu码后,用户名=cpu码+注册码长度x2(是连起来,不是运算加号),所以,这个注册码写什么都行。比如,cpu码是AAA,注册码随便写,如123或321是一样的,那么用户名就是AAA6。(并不是说最后的注册码是原来的用户名,如果正好注册成功,只是凑巧那个长度符合了要求)。
后记:
不懂汇编语言就是晕,看到答案你也很头疼吧,其实我也是。估计要F7跟入哪个CALL里面看程序执行原理。不过没关系,我们没达到这种水平,这节课只是学习正常 字符串加密程序 的注册码获取方法。