吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3652|回复: 2
收起左侧

[原创] 逆向笔记---160CrackMe之001(Acid Burn)

[复制链接]
Steven_Hu 发表于 2019-6-20 09:54
本帖最后由 Steven_Hu 于 2019-6-21 19:40 编辑





之前做过一些CrackMe的小练习,相应的也做了一点笔记但一直没有上传。因本人还是逆向小白,初学者阶段,如文中有错误的地方,劳烦各位大佬顺手斧正,不胜感激。


因为是初学笔记,所以步骤及操作写得比较详细,甚至有些啰嗦,希望大家见谅。



下一篇:逆向笔记---160CrackMe之002(AfKayAs)






001 Acid burn




0x01 环境与工具
系统:吾爱破解XP SP3
工具:PEiDODICE版)







0x02  程序概览
程序分为两部分。第一部分是Serial/Name,需要输入用户名和注册码:

程序概览1

程序概览1

另一部分输入序列号:

程序概览2

程序概览2

(这里应该查一下壳,因为是简单的程序所以忘记截图了)


0x03 暴破流程
首先任意输入用户名和注册码:

暴破流程1

暴破流程1

我们发现会弹出提示框”Sorry,The serial is incorrect!”,于是在ODF3载入,运行到如上图所示,不着急点确定。此时在ODF12暂停,然后ALT+F9返回用户领空,再点击确定,程序暂停在这里:
4.png

很明显,这里是调用了MessageBox,也就是我们看到的提示框。于是在55 push ebpF2下断,F9运行。再点击check按钮,程序停在断点处。这时点击OD里的K按钮(ALT+K)观察堆栈信息,发现这个地址处调用了MessageBox

暴破流程3

暴破流程3


双击上图中红框位置来到此地址,发现了很眼熟的字符串:

暴破流程4

暴破流程4



往上翻代码,发现有两处跳转jnzjmp比较可疑:

暴破流程5

暴破流程5

由上图可jnz处是爆破的关键点,因为会跳转到错误提示框处。

暴破流程6

暴破流程6

jmp则是跳过错误提示,不用修改。

分析到这里,只需将jnzshort 0042FB1F处用nop填充即可(右键->二进制->Nop填充)。然而,当我们输入形如123这样程度较短的伪码时,依然会弹出错误提示框。于是重复上述步骤,来到如下图位置:

暴破流程7

暴破流程7



这里存在一个跳转jge 跳转条件是一个函数的返回值(存放在eax中)与4的比较结果,若不小于4则跳转,否则执行弹出错误提示框,所以我们把这里改为jmp

暴破流程8

暴破流程8



最后保存patch后的文件。右键->复制到可执行文件->所有修改:

暴破流程9

暴破流程9


右键->保存文件:

暴破流程10

暴破流程10


再运行我们patch后的程序:
13.png

另一部分(序列号)思路完全相同:
14.png
到此,暴破的工作就完成了。



0x04 算法部分
回到刚刚爆破过程中,jnz跳转的地方。推测此处是把生成的序列号与用户输入的序列号进行比对,根据结果进行跳转。所以向上找call我们发现在jnz跳转上方最近的一个call,对应的eax值很独特,而且edx是我们输入的伪码(234234):
15.png

算法部分2

算法部分2


尝试输入用户名|密码分别为”123213|CW-4018-CRACKED”“234234|CW-4018-CRACKED”这样的组合,发现”123213|CW-4018-CRACKED”是正确的注册码!因此我们可以断定,注册码是在这个call之前的call生成的。此时,最保守的方法一定是从其上方最近的一个call开始,一个一个F7进入进行分析。但是在这个例子中,跟进了很久还是没有相关注册码的信息。直接往上翻附近的代码,我们可以发现在注释处有两个眼熟的ASCII码,分别是”CW””CRACKED”,而且上面紧邻着我们patch的第二个地方(猜测此处为输入长度判断),所以找一个合适的地方下断。这里我们选的是42FA79处(被patchjge跳转所跳到的地方),单步F8,分析结果如下:

算法部分3

算法部分3


算法不复杂,主要是取用户名的第一个byte获得对应的ASCII码(这里是1,对应的ASCII码是0x31),再去乘以0x29,然后再乘以2,最后再把得出的结果转换为十进制,并在头尾分别连接字符“CW”和“CRACKED”,得到形如“CW-XXXX-CRACKED 的注册码(其中”XXXX”是前面计算得到的十进制数)。注意,如果遇到数据段的内容,比如此处有dword ptr [431750],可以在数据窗口CTRL+g跳转到相应的地址查看内存中的值,或者直接在信息面板中查看。

算法部分4

算法部分4


而且要注意反汇编面板下的信息面板,会加载栈信息。如此处的push dword ptr [ebp-18]:

算法部分5

算法部分5

这里的4018就是生成的注册码数字部分(10进制的FB2)

注册机C代码如下:

算法部分6

算法部分6





0x05 去除NAG
程序一开始会弹出个NAG窗口:

去除NAG1

去除NAG1


我们可以查找String从而快速定位到调用相应的MessageBoxcall,但这里因为是在程序开始运行时就出现的,所以就可以直接从OEPF8,一步步下断点,直到NAG出现。

去除NAG2

去除NAG2


首先,在42FD97处的call执行后弹框,在此处下断点,重新运行然后F7进入断点处。进入后采取同样的思路,先F8单步,如果遇到call执行后立即弹框,就下断点,然后重新载入再F7进入。
23.png

第三次断点(42563D):

去除NAG4

去除NAG4


这次F7进入后我们发现熟悉的字符串:

去除NAG5

去除NAG5


这时候如果继续下断点进入就可以看见调用MessageBox函数部分了,没有必要继续进行下去。回过头看一下我们之前下的断点,在42563D地址的上方有一处跳转,而此处跳转可以顺利绕过调用弹框部分的call

去除NAG6

去除NAG6

于是尝试把je改为jmp实现强制跳转,发现NAG去除成功。




免费评分

参与人数 1热心值 +1 收起 理由
zach14c + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zach14c 发表于 2019-6-20 11:53
谢谢分享
gxsky 发表于 2019-6-20 23:03
蒂兰圣雪 发表于 2019-6-21 23:01
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 16:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表