用ollddbg 寻找注册码的教程
作者:夜袭来
QQ:20517896
email:loop_jspone@yahoo.com.cn
练习程序 ke_Crackme2.exe (由风飘雪提供)
1.先用 FI.EXE 侦测壳
2.用 UPXShell 脱壳
3.用olludbg.exe 打开已经脱壳的文件
4.点 F9 运行程序之后,右键点击 搜索--> 字符参考,
找到 00401345 |. 68 B8344000 PUSH Key-Crac.004034B8 ; |Text = " Good
Job, I Wish You the Very Best" ,双击来到主窗口:
向上找,找到关键跳转 :
00401309 |> 8B15 38304000 /MOV EDX,DWORD PTR DS:[403038]
0040130F |. 8A90 37304000 |MOV DL,BYTE PTR DS:[EAX+403037]
00401315 |. 81E2 FF000000 |AND EDX,0FF
0040131B |. 8BDA |MOV EBX,EDX
0040131D |. 0FAFDA |IMUL EBX,EDX
00401320 |. 03F3 |ADD ESI,EBX
00401322 |. 8BDA |MOV EBX,EDX
00401324 |. D1FB |SAR EBX,1
00401326 |. 03F3 |ADD ESI,EBX
00401328 |. 2BF2 |SUB ESI,EDX
0040132A |. 40 |INC EAX
0040132B |. 49 |DEC ECX
0040132C |.^75 DB \JNZ SHORT Key-Crac.00401309
0040132E |. 56 PUSH ESI
0040132F |. 68 38314000 PUSH Key-Crac.00403138
00401334 |. E8 4A000000 CALL Key-Crac.00401383
00401339 |. 5E POP ESI
0040133A |. 3BC6 CMP EAX,ESI ** 关键比较,可知真正数据必定在其中了,在此处
按 F2 下断点。
0040133C |. 75 15 JNZ SHORT Key-Crac.00401353 ** 关键跳转
0040133E |. 6A 00 PUSH 0 ; /Style =
MB_OK|MB_APPLMODAL
00401340 |. 68 62344000 PUSH Key-Crac.00403462 ; |Title = "Key/CrackMe
#2 "
00401345 |. 68 B8344000 PUSH Key-Crac.004034B8 ; |Text = " Good Job, I
Wish You the Very Best"
0040134A |. 6A 00 PUSH 0 ; |hOwner = NULL
0040134C |. E8 9D000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
5.随便填写注册信息提交后,被中断于 0040133a ,此时 可以看到主窗口下面,显示了两条信息
ESI=00035BEB
EAX=0001E0F3
点右键 修改寄存 查看 ESI的16进制:00035BEB ,10进制有符号:220139 ,此为真正的注册码,同样查
看EAX ,里面就是刚才乱填写的假注册码。
6.得到注册码,第一个阶段完毕。
7.由上面的信息可写出注册机:
打开 keymake.exe, 按F8,进行注册机设置,点浏览找到要破解程序Key-Crackme2.exe,添加中断信
息(位于0040133C |. 75 15 JNZ SHORT Key-Crac.00401353 处):
中断地址:0040133A
中断次数:1
第一字节:3B
指令长度:2
右边选择:寄存器方式: ESI:十进制 生成注册机,与破解程序放在一个目录下即可。
8.本文完毕