逆向破解之160个CrackMe —— 029
CrackMe —— 029
160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序
CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
CrackMe简称CM。
编号 | 作者 | 保护方式 |
029 | Cosh | Name/Serial |
工具
x32dbg
开始破解之旅
ON.1
爆破方式
首先使用x32dbg打开029号程序,搜索字符串
这里我们看到了正确信息提示符和错误信息提示符
进入正确信息提示符地址004015E0处
0040159A | 8B45 F0 | mov eax,dword ptr ss:[ebp-10] | 0040159D | 8A18 | mov bl,byte ptr ds:[eax] | 0040159F | 32D9 | xor bl,cl | 004015A1 | 8818 | mov byte ptr ds:[eax],bl | 004015A3 | 41 | inc ecx | 004015A4 | 40 | inc eax | 004015A5 | 8038 00 | cmp byte ptr ds:[eax],0 | 004015A8 | 75 F3 | jne cosh.3.40159D | 004015AA | 8B45 E4 | mov eax,dword ptr ss:[ebp-1C] | 004015AD | 8B55 F0 | mov edx,dword ptr ss:[ebp-10] | edx:EntryPoint 004015B0 | 33C9 | xor ecx,ecx | 004015B2 | 8A18 | mov bl,byte ptr ds:[eax] | 004015B4 | 8A0A | mov cl,byte ptr ds:[edx] | edx:EntryPoint 004015B6 | 3AD9 | cmp bl,cl | 004015B8 | 75 09 | jne cosh.3.4015C3 | 此处验证跳转 004015BA | 40 | inc eax | 004015BB | 42 | inc edx | edx:EntryPoint 004015BC | 8038 00 | cmp byte ptr ds:[eax],0 | 004015BF | 75 EF | jne cosh.3.4015B0 | 此处验证跳转 004015C1 | EB 16 | jmp cosh.3.4015D9 | 004015C3 | 6A 00 | push 0 | 004015C5 | 68 6C304000 | push cosh.3.40306C | 40306C:"ERROR" 004015CA | 68 40304000 | push cosh.3.403040 | 403040:"One of the Details you entered was wrong" 004015CF | 8B4D E0 | mov ecx,dword ptr ss:[ebp-20] | 004015D2 | E8 BB020000 | call <JMP.&Ordinal#4224> | 004015D7 | EB 14 | jmp cosh.3.4015ED | 004015D9 | 6A 00 | push 0 | 004015DB | 68 34304000 | push cosh.3.403034 | 403034:"YOU DID IT" 004015E0 | 68 20304000 | push cosh.3.403020 | 403020:"Well done,Cracker" 004015E5 | 8B4D E0 | mov ecx,dword ptr ss:[ebp-20] | 004015E8 | E8 A5020000 | call <JMP.&Ordinal#4224> | 004015ED | 6A 64 | push 64 | 004015EF | FF15 00204000 | call dword ptr ds:[<&Sleep>] |
我们看到在地址004015BF处经过JMP来到了正确提示符处,这里就是验证注册码正确性的地方,在继续向上翻看,也有验证地址为004015B8,此处验证失败也会跳转到错误的地方
我们将这两个地址修改为NOP,F9运行输入任意字符点击check按钮
bingo ~ 破解成功
在上方还会有多处验证判断,判断输入格式是否正确
ON.2
追码方式
我们看到00401580地址到00401587地址为Name计算的方法
使用Python代码为
name = 'lonenysky' value = [] for i, key in enumerate(name): value.append(chr(ord(key) ^ (i + 1))) print('name is %s' % ''.join(value)) value = [] for i, key in enumerate(name): value.append(chr(ord(key) ^ (i + 0x0a))) print('serial is %s' % ''.join(value))
bingo ~ 破解成功
在追码的过程中当我们不知道cl的值时可以观看下方的窗口推测出来