授权方式: 共享
下载地址:http://jshttp.skycn.net/down/cdsafe.exe
或 http://www.skycn.com/soft/4913.html
———————————————————————————————
破解者:青锋剑客
破解目的:获得注册码,做出注册机。
破解工具:fi2.5 unaspack 1.0.9.1 W32DASM10中文版 ollydbg1.07 tc2.0
破解过程:
1。用FI2.5检查程序的壳,是ASPack v2.001,用unaspack 1.0.9.1脱壳。
2.先熟悉一下程序,调出注册界面,用户名输入shifeng,注册号输入87654321,点注册,弹出注册码错误。
3.用W32DASM10打开脱壳后的文件,"参考"--"串式数据参考",查处"注册码不正确",双击,只有一处。
来到下面:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00472131(C)
|
:004721F5 A174974700 mov eax, dword ptr [00479774]
:004721FA 8B00 mov eax, dword ptr [eax]
:004721FC 8B80E4020000 mov eax, dword ptr [eax+000002E4]
* Possible StringData Ref from Code Obj ->"错误"
|
:00472202 BA00234700 mov edx, 00472300
:00472207 E8E075FBFF call 004297EC
:0047220C A174974700 mov eax, dword ptr [00479774]
:00472211 8B00 mov eax, dword ptr [eax]
:00472213 8B80D4020000 mov eax, dword ptr [eax+000002D4]
* Possible StringData Ref from Code Obj ->"注册码不正确"
|
:00472219 BA10234700 mov edx, 00472310
:0047221E E8C975FBFF call 004297EC
:00472223 A174974700 mov eax, dword ptr [00479774]
:00472228 8B00 mov eax, dword ptr [eax]
:0047222A 8B10 mov edx, dword ptr [eax]
:0047222C FF92D8000000 call dword ptr [edx+000000D8]
看到这里* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00472131(C)
跳到这里:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00472075(C)
|
:004720EA 51 push ecx
:004720EB 53 push ebx
:004720EC 8BD8 mov ebx, eax
:004720EE 33C0 xor eax, eax
:004720F0 55 push ebp
:004720F1 686D224700 push 0047226D
:004720F6 64FF30 push dword ptr fs:[eax]
:004720F9 648920 mov dword ptr fs:[eax], esp
:004720FC 8D55FC lea edx, dword ptr [ebp-04]
:004720FF 8B83E4020000 mov eax, dword ptr [ebx+000002E4]
:00472105 E8B276FBFF call 004297BC
:0047210A 8B45FC mov eax, dword ptr [ebp-04] 假注册码
:0047210D 50 push eax
:0047210E 8D55F8 lea edx, dword ptr [ebp-08]
:00472111 8B83E8020000 mov eax, dword ptr [ebx+000002E8]
:00472117 E8A076FBFF call 004297BC
:0047211C 8B4DF8 mov ecx, dword ptr [ebp-08] 用户名
:0047211F BAF5250000 mov edx, 000025F5 注意此常数
:00472124 8B83F4020000 mov eax, dword ptr [ebx+000002F4]
:0047212A E8C173FFFF call 004694F0 很明显,关键调用
:0047212F 84C0 test al, al
:00472131 0F84BE000000 je 004721F5
* Possible StringData Ref from Code Obj ->"user"
|
:00472137 6884224700 push 00472284
:0047213C 8D55F0 lea edx, dword ptr [ebp-10]
:0047213F 8B83E8020000 mov eax, dword ptr [ebx+000002E8]
4.为方便调试,启动ollydbg,CTRL+G输入472131,往上走一点,在004720EA行,F2在此下断点。F9运行程序
进入注册界面,用户名输入shifeng,注册号输入87654321,点注册,中断。F8几次,进入关键调用:
004694F0 /$ 55 PUSH EBP
004694F1 |. 8BEC MOV EBP,ESP
004694F3 |. 83C4 F8 ADD ESP,-8
004694F6 |. 53 PUSH EBX
004694F7 |. 56 PUSH ESI
004694F8 |. 33DB XOR EBX,EBX
004694FA |. 895D F8 MOV DWORD PTR SS:[EBP-8],EBX
004694FD |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX
00469500 |. 8BF2 MOV ESI,EDX 把上面的常数25F5送到ESI
00469502 |. 8BD8 MOV EBX,EAX
00469504 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00469507 |. E8 D8A9F9FF CALL CDSAFE.00403EE4
0046950C |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0046950F |. E8 D0A9F9FF CALL CDSAFE.00403EE4
00469514 |. 33C0 XOR EAX,EAX
00469516 |. 55 PUSH EBP
00469517 |. 68 77954600 PUSH CDSAFE.00469577
0046951C |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0046951F |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00469522 |. 837D FC 00 CMP DWORD PTR SS:[EBP-4],0
00469526 |. 75 04 JNZ SHORT CDSAFE.0046952C 用户名没写,不跳,则死
00469528 |. 33DB XOR EBX,EBX
0046952A |. EB 28 JMP SHORT CDSAFE.00469554
0046952C |> 85F6 TEST ESI,ESI
0046952E |. 75 04 JNZ SHORT CDSAFE.00469534
00469530 |. 33DB XOR EBX,EBX
00469532 |. EB 20 JMP SHORT CDSAFE.00469554
00469534 |> 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00469537 |. 50 PUSH EAX
00469538 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0046953B |. 8BD6 MOV EDX,ESI
0046953D |. 8BC3 MOV EAX,EBX
0046953F |. E8 80FEFFFF CALL CDSAFE.004693C4 ;计算注册码,关键调用
00469544 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 可看到正确注册码
00469547 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0046954A |. E8 F1A8F9FF CALL CDSAFE.00403E40
0046954F |. 0F94C0 SETE AL
00469552 |. 8BD8 MOV EBX,EAX
00469554 |> 33C0 XOR EAX,EAX
00469556 |. 5A POP EDX
00469557 |. 59 POP ECX
00469558 |. 59 POP ECX
00469559 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0046955C |. 68 7E954600 PUSH CDSAFE.0046957E
00469561 |> 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00469564 |. BA 02000000 MOV EDX,2
00469569 |. E8 66A5F9FF CALL CDSAFE.00403AD4
0046956E |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
00469571 |. E8 3AA5F9FF CALL CDSAFE.00403AB0
00469576 \. C3 RETN
5.F7跟进上面所提的调用,来到下面:
004693C4 /$ 55 PUSH EBP
004693C5 |. 8BEC MOV EBP,ESP
004693C7 |. 6A 00 PUSH 0
004693C9 |. 6A 00 PUSH 0
004693CB |. 6A 00 PUSH 0
004693CD |. 6A 00 PUSH 0
004693CF |. 6A 00 PUSH 0
004693D1 |. 53 PUSH EBX
004693D2 |. 56 PUSH ESI
004693D3 |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX
004693D6 |. 8BF2 MOV ESI,EDX
004693D8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004693DB |. E8 04ABF9FF CALL CDSAFE.00403EE4
004693E0 |. 33C0 XOR EAX,EAX
004693E2 |. 55 PUSH EBP
004693E3 |. 68 C2944600 PUSH CDSAFE.004694C2
004693E8 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004693EB |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004693EE |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
004693F1 |. BA DC944600 MOV EDX,CDSAFE.004694DC ;ASCII "Error"
004693F6 |. E8 4DA7F9FF CALL CDSAFE.00403B48
004693FB |. 85F6 TEST ESI,ESI
004693FD |. 0F84 99000000 JE CDSAFE.0046949C
00469403 |. 837D FC 00 CMP DWORD PTR SS:[EBP-4],0
00469407 |. 0F84 8F000000 JE CDSAFE.0046949C
0046940D |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00469410 |. E8 1BA9F9FF CALL CDSAFE.00403D30 得到用户名长度
00469415 |. 8BD8 MOV EBX,EAX 注册码第一部分开始计算
00469417 |. 0FAFDE IMUL EBX,ESI 用户名长度*25F5+用户名第一字符*29A
0046941A |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0046941D |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX]
00469420 |. 69C0 9A020000 IMUL EAX,EAX,29A
00469426 |. 03D8 ADD EBX,EAX
00469428 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
0046942B |. 8BC3 MOV EAX,EBX
0046942D |. E8 1AECF9FF CALL CDSAFE.0040804C 转10进制形式,得到注册码三部分的第一部分
00469432 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00469435 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00469438 |. B9 EC944600 MOV ECX,CDSAFE.004694EC
0046943D |. E8 3AA9F9FF CALL CDSAFE.00403D7C 生成-
00469442 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00469445 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] 注册码第二部分开始计算
00469448 |. F7EE IMUL ESI 用户名第一字符*25F5*7B
0046944A |. 6BD8 7B IMUL EBX,EAX,7B
0046944D |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00469450 |. 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
00469453 |. 8BC3 MOV EAX,EBX
00469455 |. E8 F2EBF9FF CALL CDSAFE.0040804C 转10进制形式,得到第二部分
0046945A |. FF75 F0 PUSH DWORD PTR SS:[EBP-10]
0046945D |. 68 EC944600 PUSH CDSAFE.004694EC
00469462 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00469465 |. BA 03000000 MOV EDX,3
0046946A |. E8 81A9F9FF CALL CDSAFE.00403DF0 与第一部分合成并形成-
0046946F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00469472 |. E8 B9A8F9FF CALL CDSAFE.00403D30 用户名长度
00469477 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0046947A |. 0FB612 MOVZX EDX,BYTE PTR DS:[EDX] 第三部分开始计算
0046947D |. F7EA IMUL EDX 用户名第一字符*用户名长度*19D5
0046947F |. 69D8 D5190000 IMUL EBX,EAX,19D5 再加上25F5
00469485 |. 03DE ADD EBX,ESI
00469487 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
0046948A |. 8BC3 MOV EAX,EBX
0046948C |. E8 BBEBF9FF CALL CDSAFE.0040804C 转10进制形式,得到第三部分
00469491 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
00469494 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00469497 |. E8 9CA8F9FF CALL CDSAFE.00403D38 与前部分合成到一起
0046949C |> 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0046949F |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004694A2 |. E8 5DA6F9FF CALL CDSAFE.00403B04
004694A7 |. 33C0 XOR EAX,EAX
004694A9 |. 5A POP EDX
004694AA |. 59 POP ECX
004694AB |. 59 POP ECX
004694AC |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004694AF |. 68 C9944600 PUSH CDSAFE.004694C9
004694B4 |> 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004694B7 |. BA 05000000 MOV EDX,5
004694BC |. E8 13A6F9FF CALL CDSAFE.00403AD4
004694C1 \. C3 RETN
6.相应TC注册机源码:
#include "string.h"
main()
{
unsigned long lens,x,sn1,sn2,sn3;
char str[60];
clrscr();
printf("\n\n\n**********************************************************\n");
printf(" 光盘卫士 V1.5 注册机\n");
printf(" 作者: 青锋剑客 ( 2002/11/6 )\n");
printf("**********************************************************\n\n");
printf("请输入你的姓名 : ");
gets(str);
lens=strlen(str);
if (str[0]>0) x=str[0];
else x=255-(0xffffffff-str[0]);
sn1=lens*0x25f5+x*0x29a;
sn2=x*0x25f5*0x7b;
sn3=x*lens*0x19d5+0x25f5;
printf("\n你的序列号为:");
printf("%ld-%ld-%ld\n",sn1,sn2,sn3);
}
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>