首先运行一下程序看下效果,这样下一步动作才会有一定的依据。
发现是一个很常见的注册机程序,要求输入序列号和密码。
本菜鸡很懒,懒得输入,就按照初始化的输入点击了确认按钮,会发现不出意外地弹出了错误提示。好了,一切都在预料之内。接下来的事情就交给OD了。
一、打补丁暴力破解
1、在OD下打开程序。
会发现这个程序是用VB写的。(有着ThunRTMain函数和典型的间接跳转——先call一个地址,利用这个地址jmp到ThunRTMain函数)。
2、用什么写的对我这种刚入门的人来说不太重要,重要的有一个字符串搜索功能。OD检索字符串。
这里就是错误提示字符串,,猜想程序的判断机制一定在这附近(起码与这段之间有一个跳转命令)。点击进入所在地址。
进入之后,OD就会给你一个强烈的暗示,有一个跳转。分析可知,je short Afkayas_.004025E5使得程序跳转到错误提示。
3、暴力破解
强制跳转到输出正确提示。可以看到在原来的je short Afkayas_.004025E5 下一条指令就是正确提示。那为什么不直接跳到那里呢?改je short Afkayas_.004025E5为 jmp short Afkayas_.0040258D.
保存更改到exe文件。运行查看结果如下
会发现,同样的做法下,程序已经破解了。
二、找到输入的序列号的密码。
这一部分前一段内容和爆破是一样的。不同在于进入到字符串地址后怎么做。由于程序一定存在一个比较段(用于判断输入与标准结果是否一致)。所以向上寻找。会发现vbaStrCmp(比较函数),_vbaStrCat(字符串连接函数)。
在这几个位置下断点。
F9,输入任意序列号、密码。
再断点附近查看寄存器、栈值。
很容易查看到标准的密码已经生成。
再次运行,检验。
三、写注册机
咳咳,能力有限、菜鸡很无力。哪位路过的大牛肯指教一番就甚是美妙了。