探索黑客技术攻防,实战研究与安全创新

导航菜单

爆破细腻谈

因为我对软件破解感兴趣,于是我便仗着自己对汇编有一点点的基础,冒冒失失的就闯过了几十次crackme的破解,便开始享受破解的乐趣了。那么今天我就以破解为实例的形式来给大家谈一下常见的几种爆破方法,也算是我对所学知识的一个总结吧!当然为了方便大家们的阅读,所以我会在文中提到的关键位置都会用图给标出来。

我们要破解的是ekh crackme 1.0。首先我们要运行这个程序,程序界面是很简单的,有username和serial的输入框,另外还有一个ok按钮,可编辑的控件就这么几个。那么我们随便输入一个用户名和密码,点击ok按钮,就会弹出一个错误提示窗口(后来查看代马证实它是一个标准的msgbox)。

图片1.png

当然为了确保它没有加壳,我们还是先用peid检查一下吧,没有加壳,当然这对我们来说是一个好消息,程序是使用delphi 3.0编写的。好了,这一下该ollydbg登场的时候了。我们使用od打开ekh,在代码区域使用右键打开功能列表,选择“ultra string reference?find ascll”,其实的话,对于这个程序使用find ascll和find unicode也都是可以的,但是有的程序只支持一种编码方式。我们在打开的ultra string reference界面内找到刚才注册错误提示框中的内容“wrong serial number!”。

图片2.png

我们在该行代码区域上双击回到代码界面,就会定位到读入该数据的代码位置了。上面的工作主要是定位关键代码,也就是破解中常常提到的关键跳的位置。接下来就是我们要说的主要内容——如何爆破掉它!

图片3.png

我们来看一下刚才我在图中地址处有标记附近的代码。

通过注释,我们可以看出有以下几种改法(在地址00427b73之后的修改,修改一处我就可以完成爆破):

1.修改00427b73处代码为反义跳转,就是jge short 00427ba5;

2.修改00427b73处的跳转地址,就是jge short 00427b73,让自己的程序在出错信息错误时提示注册正确,或干脆改为jmp short 00427bc3,好像有点强硬;

3.同理我们在00427ba3处的代码也可以按以上两种方法改为jge short 00427bc3或者是jmp short 00427bc3,或者是jl short 00427bc5。

上面的几种修改方法就是比较经典的修改关键跳的方法,那么我接下来再带大家来看看00427b99,00427b9e,00427ba3这几句注册信息认证的步骤,我们在调用注册信息认证函数后,程序检查了exa中的值是否大于等于0bc614e这个值,来决定注册的成功与否,因此我们可以有以下几种修改方法:

1.修改00427b9e处的比较语句,只要能符合下面的跳转条件就可以了,比如cmp 1.0或者是cmp eax.eax等;

2.修改00427ba3处的跳转,同样的改法jl/jmp short 00427bc3;

3.修改00427b99处的函数调用语句,直接给eax填个值就行,填写一个大于等于0bc614的十六进制数就行了,比如改为mov eax,0bc614e,对这个程序这么修改是没有问题的,但是需要提醒大家一句,这种修改方法并不可取,因为很多程序可能会在注册函数中写注册表,本地软件或网络认证等,这么改认证是过去了,但是整个系统的注册状态很可能还是没有发生改变。

既然已经知道了认证函数的地址,那么我们直接去看看不就行了?其实这个认证函数并不是太复杂,我们要有耐心的话,还是会希望读者能够仔细读下来,对以后的破解学习会有好处的。我们直接写个注册机也是可以的,但是这个不是我们今天的主题,我们还是来看一看如何爆破吧!图中的代码位置已经是注册函数的末尾了,这就是爆破点,当然我们也有几种改法:

1.修改00427b01处代码为jz short 00427b0a或是jnz short 00427b03,当然还可以利用nop毙掉它;

2.我们将注册不成功时填的返回值改为成功的值,就是修改00427b0a处代码为mov ebx.0bc614e。

到这里,我们的爆破方法就已经描述完了,我们再来整理一下思路:程序试探-寻找爆破点-修改关键跳存盘。这个程序的注册方法爆破起来应该是比较容易的,但是通过细致的分析尽可能地读懂流程,可以更好地熟悉各种编译器生成代码的规律。我再来啰嗦两句保存修改的方法:在代码界面内修改完毕后,点鼠标右键,选择复制到可执行文件-所有修改,在弹出的对话框上点全部复制,在新增的界面内点鼠标右键,选择保存文件填写好文件名就可以了。

以上就是我这些时日来的一些学习心得,希望对于那些刚入门的破解初学者能够有些帮助,若有不当的地方也可以请大家指出来。

相关推荐