【破文作者】S.P.S.G
【作者邮箱】spsgeyro@hotmail.com
【所属组织】Winter[CZG]
【组织主页】http://www.5icrack.com
【使用工具】Fuckall,PEiD
【操作系统】Windows 2003
--------------------------------------------------------------------------------
【软件名称】电视剧下载2.00
【软件语言】Borland Delphi 6.0 - 7.0
【破解声明】曾经沧海难为水
【破解目的】我不喜欢有限制
--------------------------------------------------------------------------------
【爆破过程】
刚刚开始学算法,手头正好有这个软件,就开始慢慢琢磨^_^
装好以后,peid查一下,无壳,语言delphi,Fuckall载入。
载入后运行,发现软件采取序列号+注册码的保护方式,那么我们先来看看有什么有用的字符串。
第一句:您输入的注册码无效,请重新输入。
双击来到汇编语句:
0049335A . 83F8 08 CMP EAX,8 //注册码小于等于八位
0049335D . 7E 0F JLE SHORT 电视剧下.0049336E
0049335F > B8 C8354900 MOV EAX,电视剧下.004935C8
继续,第二句:您输入的注册码xxx不正确,请与作者联系。
双击来到这里:
004933E4 . 68 00364900 PUSH 电视剧下.00493600 ;
往上看:
004933AD . 8BF0 MOV ESI,EAX
004933AF . 33C0 XOR EAX,EAX
004933B1 . 55 PUSH EBP //到这里ECX为序列
号的前六位
004933B2 . 68 DF344900 PUSH 电视剧下.004934DF
004933B7 . 64:FF30 PUSH DWORD PTR FS:[EAX]
004933BA . 64:8920 MOV DWORD PTR FS:[EAX],ESP
004933BD . 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004933C0 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004933C3 . 8B80 3C030000 MOV EAX,DWORD PTR DS:[EAX+33C]
004933C9 . E8 8A21FBFF CALL 电视剧下.00445558
004933CE . 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24] //EAX为假码
004933D1 . E8 AE53F7FF CALL 电视剧下.00408784 ; 算法CAll,跟进
004933D6 . 8BD8 MOV EBX,EAX
004933D8 . 8BC3 MOV EAX,EBX
004933DA . 2BC6 SUB EAX,ESI
004933DC . 3B05 B4EA4B00 CMP EAX,DWORD PTR DS:[4BEAB4]
004933E2 . 74 38 JE SHORT 电视剧下.0049341C
004933E4 . 68 00364900 PUSH 电视剧下.00493600 ; REG!Wrong!
其实上面还有一段获取机器码的过程,偷一下懒不看了,有兴趣的朋友自己去研究,我们直接看算法:
00408784 /$ 53 PUSH EBX
00408785 |. 56 PUSH ESI
00408786 |. 83C4 F4 ADD ESP,-0C //ESP-C
00408789 |. 8BD8 MOV EBX,EAX //EBX=EAX
0040878B |. 8BD4 MOV EDX,ESP //EDX=ESP
0040878D |. 8BC3 MOV EAX,EBX //EAX=EBX
0040878F |. E8 08A6FFFF CALL 电视剧下.00402D9C ; 关键CALL,跟进
00408794 |. 8BF0 MOV ESI,EAX
00408796 |. 833C24 00 CMP DWORD PTR SS:[ESP],0
0040879A |. 74 19 JE SHORT 电视剧下.004087B5
0040879C |. 895C24 04 MOV DWORD PTR SS:[ESP+4],EBX
004087A0 |. C64424 08 0B MOV BYTE PTR SS:[ESP+8],0B
004087A5 |. 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
004087A9 |. A1 ACEC4B00 MOV EAX,DWORD PTR DS:[4BECAC]
004087AE |. 33C9 XOR ECX,ECX
004087B0 |. E8 33F9FFFF CALL 电视剧下.004080E8
004087B5 |> 8BC6 MOV EAX,ESI
004087B7 |. 83C4 0C ADD ESP,0C
004087BA |. 5E POP ESI
004087BB |. 5B POP EBX
004087BC \. C3 RETN
这里是关键,各寄存器的值
EAX 00D4ED64 ASCII "87654321"//输入的假码
ECX 0012F3DC
EDX 0012F5C8
EBX 00D4ED64 ASCII "87654321"
ESP 0012F5C4
EBP 0012F644
ESI 00B77800
EDI 0012F7C0
00402D9C /$ 53 PUSH EBX
00402D9D |. 56 PUSH ESI
00402D9E |. 57 PUSH EDI //保存环境变量
00402D9F |. 89C6 MOV ESI,EAX //ESI=EAX=假码
00402DA1 |. 50 PUSH EAX //EAX入栈
00402DA2 |. 85C0 TEST EAX,EAX
00402DA4 |. 74 6C JE SHORT 电视剧下.00402E12
00402DA6 |. 31C0 XOR EAX,EAX //EAX清零
00402DA8 |. 31DB XOR EBX,EBX //EBX清零
00402DAA |. BF CCCCCC0C MOV EDI,0CCCCCCC //给EDI赋值
00402DAF |> 8A1E /MOV BL,BYTE PTR DS:[ESI] //取假码第一位
00402DB1 |. 46 |INC ESI //假码减一位
00402DB2 |. 80FB 20 |CMP BL,20
00402DB5 |.^ 74 F8 \JE SHORT 电视剧下.00402DAF //如果是空格则循环取
00402DB7 |. B5 00 MOV CH,0 //ECX=1200DC
00402DB9 |. 80FB 2D CMP BL,2D
00402DBC |. 74 62 JE SHORT 电视剧下.00402E20 //是符号-则跳
00402DBE |. 80FB 2B CMP BL,2B
00402DC1 |. 74 5F JE SHORT 电视剧下.00402E22 //是符号+则跳
00402DC3 |> 80FB 24 CMP BL,24
00402DC6 |. 74 5F JE SHORT 电视剧下.00402E27 //是符号$则跳
00402DC8 |. 80FB 78 CMP BL,78
00402DCB |. 74 5A JE SHORT 电视剧下.00402E27 //是字母x则跳
00402DCD |. 80FB 58 CMP BL,58
00402DD0 |. 74 55 JE SHORT 电视剧下.00402E27 //是字母X则跳
00402DD2 |. 80FB 30 CMP BL,30
00402DD5 |. 75 13 JNZ SHORT 电视剧下.00402DEA //不是零则跳去做比较
00402DD7 |. 8A1E MOV BL,BYTE PTR DS:[ESI]
00402DD9 |. 46 INC ESI
00402DDA |. 80FB 78 CMP BL,78
00402DDD |. 74 48 JE SHORT 电视剧下.00402E27
00402DDF |. 80FB 58 CMP BL,58
00402DE2 |. 74 43 JE SHORT 电视剧下.00402E27
00402DE4 |. 84DB TEST BL,BL
00402DE6 |. 74 20 JE SHORT 电视剧下.00402E08
00402DE8 |. EB 04 JMP SHORT 电视剧下.00402DEE
00402DEA |> 84DB TEST BL,BL //跳到这里
00402DEC |. 74 2D JE SHORT 电视剧下.00402E1B //检查是否注册码只有一位
00402DEE |> 80EB 30 /SUB BL,30 //第一位注册码为8,则38-30=8
放入EBX
00402DF1 |. 80FB 09 |CMP BL,9
00402DF4 |. 77 25 |JA SHORT 电视剧下.00402E1B //是英文字母则直接跳向出错
00402DF6 |. 39F8 |CMP EAX,EDI
00402DF8 |. 77 21 |JA SHORT 电视剧下.00402E1B //比0CCCCCCC大则跳向出错
00402DFA |. 8D0480 |LEA EAX,DWORD PTR DS:[EAX+EAX*4> //EAX=EAX+EAX*4
00402DFD |. 01C0 |ADD EAX,EAX //EAX=EAX*2
00402DFF |. 01D8 |ADD EAX,EBX //EAX=EAX+EBX
00402E01 |. 8A1E |MOV BL,BYTE PTR DS:[ESI] //取下一位假码
00402E03 |. 46 |INC ESI
00402E04 |. 84DB |TEST BL,BL
00402E06 |.^ 75 E6 \JNZ SHORT 电视剧下.00402DEE //有假码则循环,无则走下去
00402E08 |> FECD DEC CH //ECX=12FFDC
00402E0A |. 74 09 JE SHORT 电视剧下.00402E15
00402E0C |. 85C0 TEST EAX,EAX
00402E0E |. 7D 54 JGE SHORT 电视剧下.00402E64 //跳向出口,准备下一步运算
00402E10 |. EB 09 JMP SHORT 电视剧下.00402E1B
00402E12 |> 46 INC ESI
00402E13 |. EB 06 JMP SHORT 电视剧下.00402E1B
00402E15 |> F7D8 NEG EAX
00402E17 |. 7E 4B JLE SHORT 电视剧下.00402E64
00402E19 |. 78 49 JS SHORT 电视剧下.00402E64
00402E1B |> 5B POP EBX ; Default case of switch
00402E3B
00402E1C |. 29DE SUB ESI,EBX
00402E1E |. EB 47 JMP SHORT 电视剧下.00402E67
00402E20 |> FEC5 INC CH
00402E22 |> 8A1E MOV BL,BYTE PTR DS:[ESI]
00402E24 |. 46 INC ESI
00402E25 |.^ EB 9C JMP SHORT 电视剧下.00402DC3
00402E27 |> BF FFFFFF0F MOV EDI,0FFFFFFF
00402E2C |. 8A1E MOV BL,BYTE PTR DS:[ESI]
00402E2E |. 46 INC ESI
00402E2F |. 84DB TEST BL,BL
00402E31 |.^ 74 DF JE SHORT 电视剧下.00402E12
00402E33 |> 80FB 61 /CMP BL,61
00402E36 |. 72 03 |JB SHORT 电视剧下.00402E3B
00402E38 |. 80EB 20 |SUB BL,20
00402E3B |> 80EB 30 |SUB BL,30 ; Switch (cases 30..46)
00402E3E |. 80FB 09 |CMP BL,9
00402E41 |. 76 0B |JBE SHORT 电视剧下.00402E4E
00402E43 |. 80EB 11 |SUB BL,11
00402E46 |. 80FB 05 |CMP BL,5
00402E49 |.^ 77 D0 |JA SHORT 电视剧下.00402E1B
00402E4B |. 80C3 0A |ADD BL,0A ; Cases 41 ('A'),42 ('B'),43
('C'),44 ('D'),45 ('E'),46 ('F') of switch 00402E3B
00402E4E |> 39F8 |CMP EAX,EDI ; Cases 30 ('0'),31 ('1'),32
('2'),33 ('3'),34 ('4'),35 ('5'),36 ('6'),37 ('7'),38 ('8'),39 ('9') of switch 00402E3B
00402E50 |.^ 77 C9 |JA SHORT 电视剧下.00402E1B
00402E52 |. C1E0 04 |SHL EAX,4
00402E55 |. 01D8 |ADD EAX,EBX
00402E57 |. 8A1E |MOV BL,BYTE PTR DS:[ESI]
00402E59 |. 46 |INC ESI
00402E5A |. 84DB |TEST BL,BL
00402E5C |.^ 75 D5 \JNZ SHORT 电视剧下.00402E33
00402E5E |. FECD DEC CH
00402E60 |. 75 02 JNZ SHORT 电视剧下.00402E64
00402E62 |. F7D8 NEG EAX
00402E64 |> 59 POP ECX //恢复环境变量
00402E65 |. 31F6 XOR ESI,ESI //ESI清零
00402E67 |> 8932 MOV DWORD PTR DS:[EDX],ESI
00402E69 |. 5F POP EDI
00402E6A |. 5E POP ESI
00402E6B |. 5B POP EBX
00402E6C \. C3 RETN
回到这里:
00408794 |. 8BF0 MOV ESI,EAX
00408796 |. 833C24 00 CMP DWORD PTR SS:[ESP],0 //这里Stack SS:[0012F5D4]
=00000000
0040879A |. 74 19 JE SHORT 电视剧下.004087B5 //跳
0040879C |. 895C24 04 MOV DWORD PTR SS:[ESP+4],EBX
004087A0 |. C64424 08 0B MOV BYTE PTR SS:[ESP+8],0B
004087A5 |. 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
004087A9 |. A1 ACEC4B00 MOV EAX,DWORD PTR DS:[4BECAC]
004087AE |. 33C9 XOR ECX,ECX
004087B0 |. E8 33F9FFFF CALL 电视剧下.004080E8
004087B5 |> 8BC6 MOV EAX,ESI //跳到这里
004087B7 |. 83C4 0C ADD ESP,0C //ESP+C
004087BA |. 5E POP ESI
004087BB |. 5B POP EBX 恢复环境变量
004087BC \. C3 RETN
然后单步跟踪,回来到这里
004933D6 . 8BD8 MOV EBX,EAX //EBX=EAX
004933D8 . 8BC3 MOV EAX,EBX
004933DA . 2BC6 SUB EAX,ESI //EAX=EAX-ESI,ESI为序列号前六
位
004933DC . 3B05 B4EA4B00 CMP EAX,DWORD PTR DS:[4BEAB4] //DS:[004BEAB4]=00023F3A
004933E2 . 74 38 JE SHORT 电视剧下.0049341C //相等则跳向成功,否则出错
整理一下注册码,关键是这段.
00402DEE |> 80EB 30 /SUB BL,30 //第一位注册码为8,则38-30=8
放入EBX
00402DF1 |. 80FB 09 |CMP BL,9
00402DF4 |. 77 25 |JA SHORT 电视剧下.00402E1B //是英文字母则直接跳向出错
00402DF6 |. 39F8 |CMP EAX,EDI
00402DF8 |. 77 21 |JA SHORT 电视剧下.00402E1B //比0CCCCCCC大则跳向出错
00402DFA |. 8D0480 |LEA EAX,DWORD PTR DS:[EAX+EAX*4> //EAX=EAX+EAX*4
00402DFD |. 01C0 |ADD EAX,EAX //EAX=EAX*2
00402DFF |. 01D8 |ADD EAX,EBX //EAX=EAX+EBX
00402E01 |. 8A1E |MOV BL,BYTE PTR DS:[ESI] //取下一位假码
00402E03 |. 46 |INC ESI
00402E04 |. 84DB |TEST BL,BL
00402E06 |.^ 75 E6 \JNZ SHORT 电视剧下.00402DEE
很容易可以发现,注册码是EAX=ESI+00023F3A,而ESI是序列号前前六位,后者好像是一个固定的值.
接下来把EAX转换成十进制就是我们需要输入的注册码.
注册机:(这里要谢谢小虾的帮助^_^)
Dim x, z, a, b, m As String
Private Sub Command1_Click()
x = Text1.Text
If x = "" Then
MsgBox "请输入序列号^_^", 64, "注意"
Else
a = "23f3a"
z = Mid(x, 1, 6)
m = Format("&h" + z)
b = Format("&h" + a)
y = Val(m) + Val(b)
Text2.Text = y
End If
End Sub
(此注册机支持最新的星空电影院 V2.06^_^)
刚开始学汇编和VB,写的有点乱,大家不要笑啊,感谢您耐心读完全文.
--------------------------------------------------------------------------------
【版权声明】转载请注明作者以及确保文章完整性,谢谢