0x00 前言

这些CreakMe小程序是从吾爱破解上找到的160个练习
然后最近在学逆向&汇编就拿来练练手

0x01 注册码的破解

最近才开始学用Ollydbg不熟悉。。然后快捷键还有功能什么的还没有把握
所以一开始动态调试就是一个断点一个断点的下跟踪程序的运行,要找到主要执行的地方就异常的慢。。
看了一下别人做的才学会在运行过程中F12直接暂停程序运行跟踪汇编位置。。
程序界面是这么一个样子:
程序界面
就是要输入用户名对应注册码的样子,先随便输入一个,然后等提示框,F12暂停定位到对应的位置
Alt-K到堆栈界面,可以看到MessageBox函数的调用
堆栈界面
有两个对MessageBox的调用,能大致确定是下面一个才是后面弹出提示框的时候调用的函数
然后进到这个函数的位置,在调用MessageBox的函数头部打个断点,再重复一次
运行到断点位置能看到右下角的栈窗口看到被压栈的有个可疑的字符串。。
堆栈界面
试一试输入然后提交试试,然后就成功了
调用的这个函数应该是为了输出失败信息,然后在这之前应该有一个函数是用于验证注册码的,可以在栈里看到,这里用于下面的分析注册码生成算法
注册成功

0x02 注册码算法分析

从上面调用MessageBox的位置逐渐打断点,然后能定位到下面的位置
汇编代码
可以看到这里把传入的用户名的字符串取了第一个字符送入EAX寄存器
然后在下面一行与对应内存地址的值相乘之后再倍增一下
放入下面定位的函数转成字符串
Text

0x03 另外一个注册界面的分析