160个Crackme之001 Acid_burn

1.概述

作者:Acid burn
难度:★
保护方式:Nag,Name/Serial,Serial

运行Acid burn.exe,启动界面如下:
160个Crackme之001 Acid_burn_第1张图片
![hello you have to kill me! Welcorne to this Newbies Crackrne nude by ACiD BuRN Crac:KerWoRlD1

要将上面的对话框去掉

160个Crackme之001 Acid_burn_第2张图片

点击按钮Serial/Name,进去要求输入用户名和序列号:

160个Crackme之001 Acid_burn_第3张图片

点击按钮Serial,进去要求输入序列号:
160个Crackme之001 Acid_burn_第4张图片

2.Serial/Name

它有两个按钮,一个是Check it Baby,另一个是I give Up。随便输入个用户名和序列号,显示如下图:

160个Crackme之001 Acid_burn_第5张图片

如果输入错误,会弹对话框,字符串“Sorry,Theserial is incorect”可以作为一个线索,

使用OD加载程序,运行程序,使用OD中的字符串插件找到字符串,双击跳转过去,找到函数开始的地址,打断点。

重新在OD中运行程序,在name栏输入“tutucoo”,在serial栏输入123456789,点击确定,程序断在了0x42f9a9处,下面有很多个CALL,估计算法包括在中间,先不急着分析每个函数,先猜一下函数的作用是什么。
160个Crackme之001 Acid_burn_第6张图片

160个Crackme之001 Acid_burn_第7张图片

通过分析,序列号是根据用户名计算得来的,而用户名规定必须大于4个字节,本例输入tutucoo,算法得出的正确序列号是"CW-9512-CRACKED",CW和CRACKED是固定的,中间的数字是通过计算得来的,具体算法如下(以tutucoo为例):

1.0x74*0x8-0x74=0x32c,0x74是用户名第1个字符t的ASCII码

2.0x75*0x10+0x32c=0xa7c,0x75是第2个字符u的ASCII码

3.0x75*0xb=0x507,0x75是第4个字符u的ASCII码

4.0x74*0xe=0x658,0x658+0x507=0xb5f=2911,0x74是第3个字符t的ASCII码

5.0x290x740x2 = 0x2528 = 9512,0x74是首字符的ASCII码,0x29和0x2都是固定的

前面4步貌似没有什么实际用处,通过第5条公式可以直接计算出结果。

3.Serial

160个Crackme之001 Acid_burn_第8张图片

输入12345678后点Check it Baby,出现错误:

160个Crackme之001 Acid_burn_第9张图片

用OD加载,找到字符串"Try Again"跳转到代码处,往上找到函数的开始处打断点,运行程序后,重新输入12345678后点Check it Baby,程序断下。

160个Crackme之001 Acid_burn_第10张图片

160个Crackme之001 Acid_burn_第11张图片

下面是核心算法
在这里插入图片描述

看到这里直接试一下字符串"Hello Dude!"是否是正确的序列号

160个Crackme之001 Acid_burn_第12张图片

果然没错

4.去掉弹窗

程序刚启动时有个弹窗,既然要去弹窗就要找到调用MessageBoxA处,然后patch掉就可以了。

用OD加载程序,命令窗口执行bp MessageBoxA,运行程序,程序顺利断下。

这时断在了系统领空,点k按钮打开调用堆栈窗口:

160个Crackme之001 Acid_burn_第13张图片

跳转到它的调用函数处,选中代码右键->二进制->用Nop填充

在这里插入图片描述

然后右键->复制到可执行文件->选择,会出现下面的弹窗,选择是

160个Crackme之001 Acid_burn_第14张图片

点右上角的关闭,保存到文件选择是,系统会弹出另存为对话框,保存到本地。

160个Crackme之001 Acid_burn_第15张图片

运行patch到本地的程序,弹窗已经不见了。

你可能感兴趣的:(Windows逆向)