CrackMe —— 016
160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序
CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
编号 | 作者 | 保护方式 |
016 | bjanes | Serial(VB5) |
工具
x32dbg
VB Decompiler Pro
开始破解之旅
ON.1
爆破方式
使用x32dbg打开016号程序
右键 搜索->当前模块->字符串
我们看见了错误提示字符串地址00403A69和正确提示字符串地址00403AE9
我们进入错误提示字符串地址00403A69处向上查看
004039FE | 83C4 18 | add esp,18 | 00403A01 | 66:85FF | test di,di | 00403A04 | 75 1C | jne bjcm20a.403A22 |跳转处 跳转到00403A22 00403A06 | 8B7D 08 | mov edi,dword ptr ss:[ebp+8] | 00403A09 | B8 01000000 | mov eax,1 | 00403A0E | 66:0345 E8 | add ax,word ptr ss:[ebp-18] | 00403A12 | 0F80 94010000 | jo bjcm20a.403BAC |大跳 00403A18 | 8945 E8 | mov dword ptr ss:[ebp-18],eax | 00403A1B | 33DB | xor ebx,ebx | 00403A1D | E9 5AFDFFFF | jmp bjcm20a.40377C | 00403A22 | 33DB | xor ebx,ebx | 00403A24 | 8B35 A4104000 | mov esi,dword ptr ds:[<&__vbaVarDup>] | 00403A2A | B9 04000280 | mov ecx,80020004 | 00403A2F | 894D 98 | mov dword ptr ss:[ebp-68],ecx | 00403A32 | B8 0A000000 | mov eax,A | A:'\n' 00403A37 | 894D A8 | mov dword ptr ss:[ebp-58],ecx | 00403A3A | BF 08000000 | mov edi,8 | 00403A3F | 8D95 50FFFFFF | lea edx,dword ptr ss:[ebp-B0] | edx:EntryPoint 00403A45 | 8D4D B0 | lea ecx,dword ptr ss:[ebp-50] | 00403A48 | 8945 90 | mov dword ptr ss:[ebp-70],eax | 00403A4B | 8945 A0 | mov dword ptr ss:[ebp-60],eax | 00403A4E | C785 58FFFFFF F0224000 | mov dword ptr ss:[ebp-A8],bjcm20a.4022F | 4022F0:L"Wrong serial!" 00403A58 | 89BD 50FFFFFF | mov dword ptr ss:[ebp-B0],edi | 00403A5E | FFD6 | call esi | 00403A60 | 8D95 60FFFFFF | lea edx,dword ptr ss:[ebp-A0] | edx:EntryPoint 00403A66 | 8D4D C0 | lea ecx,dword ptr ss:[ebp-40] | 00403A69 | C785 68FFFFFF C8224000 | mov dword ptr ss:[ebp-98],bjcm20a.4022C | 4022C8:L"Sorry, try again!"
我们看到了最近的跳转处是00403A1D 该处是一个向上跳的JMP明显不是我们要找的跳转,在往上00403A12是一个向下的大跳也不是我们要找的跳转,再往上00403A04是一个跳转到00403A1D下发的地址可能是我们要找的跳转,在此处下断点
F9运行,在输入框内输入任意数据,点击Check it按钮,没有在跳转处暂停,我们在下一条指令下设置断点,再次点击按钮,此时程序暂停到了我们的断点处
由此可知,程序是通过别处跳转到00403A24处
我在x32dbg内右键 搜索->当前模块->常数 在输入框内输入00403A24点击确定
搜索到一处引用的地址
点击进入该地址,在此处下断点
再次点击Check it 按钮
此时程序停在了我们刚刚设置的断点处,我们单步向下
此时可以看出程序跳转到了错误信息提示处,我们将00403A04处的指令改为NOP,F9运行
bingo~ 此时破解成功
ON.2
注册机方式
我们使用VB Decompiler Pro打开016号程序
发现和我们的014号程序代码一样
附上我们的注册机代码
code = '' for i in range(1, 10): a = i ^ 2 code = code + str(a)[-1] print(code)
得出结果为301674501我们输入到输入框内,点击Check it按钮
bingo ~ 破解成功