论坛: 编程破解 标题: 今天和大家研究破解WinXfilesBlowfish的注册加密!2.2.比前面两个稍繁 复制本贴地址    
作者: jrg1982 [jrg1982]    论坛用户   登录
这次这个比WINZIP 和 WINAMP两个稍稍复杂一点,大家可以更进一步了解到汇编在SOFTICE的灵活应用!呵呵 明天破解WinImage就开始有一点难度了,呵呵! 
1. 用softice载入windows(通过CTRL+D来检查softice是否已经准备好,按F5退出softice);

2. 运行WinXfiles,选择“Help”下的“Order”进行注册;

3. 在“User Name:”中输入:Xingheng(随意),“Key:”中输入:12345678(随意);

4. 用CTRL+D呼出softice,下万能断点:bpx hmemcpy,按F5返回到WinXfiles;

5. 在WinXfiles中点击“OK”,很快程序就被softice拦截下来;

6. 用 bd * 暂停断点 bpx hmemcpy ;

7. 按F12键7次,返回到WinXfiles的领空,程序停留在下面的地方:
。。。
0167:0042B9C8 CALL 004172A8
0167:0042B9CD POP ESI               <-- 程序停在这里
0167:0042B9CE POP EBX
0167:0042B9CF RET
。。。

8. 连续按F12,你会看到程序中一直都出现RET指令,按F12键5次后来到下面的地方:
。。。
0167:0048D38D MOV EAX, [EBP+FFFFFBD4]      <-- 程序来到这里
0167:0048D393 LEA EDX, [EBP+FFFFFBD8]
0167:0048D399 CALL 004063FC
0167:0048D39E MOV EDX, [EBP+FFFFFBD8]
0167:0048D3A4 MOV EAX, EBX
0167:0048D3A6 CALL 004152CC
0167:0048D3AB LEA EDX, [EBP+FFFFFBD4]
0167:0048D3B1 MOV EAX, [EBP-04]
0167:0048D3B4 MOV EAX, [EAX+000001B8]
0167:0048D3BA CALL 0041529C
0167:0048D3BF MOV EAX, [EBP+FFFFFBD4]      <-- EAX指向我们输入的用户名“Xingheng”
0167:0048D3C5 CALL 00403850
0167:0048D3CA CMP EAX, 00000006
0167:0048D3CD JL 0048D3F3
0167:0048D3CF LEA EDX, [EBP+FFFFFBD4]
0167:0048D3D5 MOV EAX, [EBP-04]
0167:0048D3D8 MOV EAX, [EAX+000001BC]
0167:0048D3DE CALL 0041529C
0167:0048D3E3 MOV EAX, [EBP+FFFFFBD4]      <-- EAX指向我们输入的注册码“12345678”
0167:0048D3E9 CALL 00403850
0167:0048D3EE CMP EAX, 00000005
0167:0048D3F1 JGE 0048D418
0167:0048D3F3 XOR EDX, EDX
0167:0048D3F5 MOV EAX, [EBP-04]
0167:0048D3F8 MOV EAX, [EAX+000001B8]
0167:0048D3FE CALL 004152CC
0167:0048D403 XOR EDX, EDX
0167:0048D405 MOV EAX, [EBP-04]
0167:0048D408 MOV EAX, [EAX+000001BC]
0167:0048D40E CALL 004152CC
0167:0048D413 JMP 0048D71F
。。。

9. 按F10走到0167:0048D3C5 CALL 00403850停下,然后用 D EAX 命令,可以看到EAX指向的内存地址中藏着我们输入的用户名“Xingheng”,按F10走过这个CALL,来到下一句:0167:0048D3CA CMP EAX, 00000006,你会发现此时EAX=00000007,刚好是我们输入用户名“Xingheng”的字符个数,所以指令CMP EAX, 00000006的作用是比较输入的用户名字符个数是否小于6,如果小于6,你会发现程序将输入区域清空要求重新输入。这里因为“Xingheng”是7位,大于6,所以程序继续往下走。同样的,按F10继续往下走,你将发现0167:0048D3EE CMP EAX, 00000005这条语句判断输入的注册码位数是否大于等于5,如果小于5,和刚才检查用户名位数一样将会清空输入区域要求重新输入注册信息。因为我们输入的注册码“12345678”有8位,大于5,所以程序在0167:0048D3F1 JGE 0048D418时将跳到0048D418去:
。。。
0167:0048D418 MOV ESI, 0048D754
0167:0048D41D LEA EDI, [EBP+FFFFFCF8]
0167:0048D423 MOV ECX, 00000006
0167:0048D428 REPZ MOVSD
0167:0048D42A LEA EDX, [EBP+FFFFFBD4]
0167:0048D430 MOV EAX, [EBP-04]
0167:0048D433 MOV EAX, [EAX+000001B8]
0167:0048D439 CALL 0041529C
0167:0048D43E MOV EDX, [EBP+FFFFFBD4]
0167:0048D444 LEA EAX, [EBP+FFFFFBF8]
0167:0048D44A MOV ECX, 000000FF
0167:0048D44F CALL 00403B88
0167:0048D454 CMP BYTE PTR [EBP+FFFFFBF8], 0F
0167:0048D45B JAE 0048D4D2
。。。

10. 从这里开始,程序开始用输入的用户名计算注册码,你可以用 D 寄存器名 (如 D EAX)命令跟踪各个子程序的入口参数,你会看到后面一段程序一直都在对我们输入的用户名“Xingheng”进行处理,我们暂且不用仔细去分析程序的具体动作(因为我们的目的是取得最后的正确注册码),一边观察各个寄存器的内容,一边按F10向前走,直到来到下面的地方:
。。。
0167:0048D697 MOV EAX, [EBP+FFFFFBD4]
0167:0048D69D PUSH EAX
0167:0048D69E LEA EAX, [EBP+FFFFFBD8]
0167:0048D6A4 LEA EDX, [EBP+FFFFFDF8]
0167:0048D6AA CALL 004037FC
0167:0048D6AF MOV EDX, [EBP+FFFFFBD8]     <-- EDX指向字符串“TQVHWDFLTRTKJUG”
0167:0048D6B5 POP EAX             <-- EAX指向我们输入的注册码“12345678”
0167:0048D6B6 CALL 00403960
0167:0048D6BB JNZ 0048D6F8
。。。

11. 如果你对破解已经有了一定的认识,你就会很快的来到这里,否则就要在前面浪费一些时间了。也许你会问为什么停在这里:因为MOV EDX, [EBP+FFFFFBD8],POP EAX,CALL 00403960及JNZ 0048D6F8这几条指令非常可疑(这一点我在“破解注意事项”中已经讲过其原因了);

12. 按F10走到0167:0048D6B6 CALL 00403960这一句,然后分别用 D EDX 和 D EAX 命令,你将会发现EDX指向的内存地址中有一串字符“TQVHWDFLTRTKJUG”,而EAX指向的内存地址中则是我们输入的注册码“12345678”,不用说,“TQVHWDFLTRTKJUG”多半都是正确的注册码,赶紧用笔把它记下来先;

13. 按F5返回WinXfiles,程序将出现“Sorry...Invalid Registration Password”的消息框(因为我们输入了错误的注册码),重新进入注册选项,在“User Name:”中输入:Xingheng,“Key:”中输入:TQVHWDFLTRTKJUG,按“OK”,哈哈。。。是不是出现了注册成功的画面呢^_^! 

14. 如果你是初学者,请先仔细看看破解教学中的文章,虽然本人的技术不高,不过教学文章中总结了本人在破解学习中的很多经验,相信对你会很有好处的。



[此贴被 星痕(jrg1982) 在 02月02日04时43分 编辑过]

地主 发表时间: 2003-02-02 04:42:43

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号