菜鸟破解录之 GIF Construction Set Pro及算法分析
软件名称: GIF Construction Set Pro
软件版本: 2.0a(Ptach 20)
软件大小: 4132KB
软件授权: 共享软件
使用平台: Win95/98/NT
发布公司: http://www.mindworkshop.com/alchemy/gifcon.html
软件简介:
快速、专业地创建为你的网页创建透明、交错和活动的GIF文件。动画向导可另你在几分钟之内创建极具魅力的Web图形。
作 者:xiA Qin
解密日前:2000年8月30日
解密工具:Trw2000 1.22
说 明:这是我写的第一篇算法分析的破文,难免有错误存在,望各位大侠指点。
这个程序需要在安装时,就需要输入注册码和注册名。
输入注册信息:
注册 码:11111-22-33333-44
注:为了方便说明,分为4段。
第1段为:11111
第2段为:22
第3段为:33333
第4段为:44
注册名:Chinese #字符数必须大于5位数。
..............................
015F:00403163 PUSH EAX
015F:00403164 LEA EDX,[EBP+FFFFFBF4]
015F:0040316A PUSH EDX
015F:0040316B CALL 00424508
015F:00403170 ADD ESP,BYTE +08
015F:00403173 LEA ECX,[EBP+FFFFFBF4]
015F:00403179 PUSH ECX
015F:0040317A PUSH DWORD 0042FCB6
015F:0040317F CALL 00424598
015F:00403184 ADD ESP,BYTE +08
015F:00403187 MOV DWORD [EBP-04],01
015F:0040318E PUSH DWORD 0042FCB6
015F:00403193 CALL 004245C8
015F:00403198 POP ECX
015F:00403199 CMP EAX,BYTE +11
//又要检查注册码位数,17位。
015F:0040319C JZ 004031A3
//不相等,就跳。
015F:0040319E XOR EAX,EAX
015F:004031A0 MOV [EBP-04],EAX
015F:004031A3 CMP DWORD [EBP-04],BYTE +00
015F:004031A7 JZ 00403203
015F:004031A9 XOR EDX,EDX
015F:004031AB MOV [EBP-08],EDX
015F:004031AE MOV ESI,EDX
015F:004031B0 JMP SHORT 004031D4
015F:004031B2 XOR EAX,EAX
//将eax清零。
015F:004031B4 MOV AL,[ESI+0042F8B4]
//依次载入姓名字符。
015F:004031BA PUSH EAX
015F:004031BB CALL 00429FCC
//将大写A~Z转换为小写a~z。
015F:004031C0 POP ECX
015F:004031C1 MOV EDX,ESI
015F:004031C3 AND EDX,BYTE +07
015F:004031C6 XOR ECX,ECX
015F:004031C8 MOV CL,[EDX+0042E088]
015F:004031CE XOR EAX,ECX
// 把EAX和ECX做异或操作,
015F:004031D0 ADD [EBP-08],EAX
//累加异或操作 [EBP-08]=[EBP-08]+EAX
015F:004031D3 INC ESI
015F:004031D4 CMP BYTE [ESI+0042F8B4],00
//取下个字符,等于00,就结束计算。
015F:004031DB JNZ 004031B2
//比较姓名字符是否计算结束
015F:004031DD MOV EAX,[EBP-08]
//将[EBP-08]的值移入寄存器eax中
015F:004031E0 MOV ECX,64
//将16进制的64移入寄存器ECX
015F:004031E5 CDQ
//判断eax中的值是否大于80000000,
015F:004031E6 IDIV ECX
//用EAX与ECX求余.
015F:004031E8 MOV ESI,EDX
//余数从EDX移入ESI。
一、算法总结:
1、这部分就是把你输入的注册名的每个字符都转成相应的Ascii码!
2、然后,与相对应80 40 20 10 08 04 02 01进行异或计算。再将计算后的值累加。
然后注册名大于8位,就循环使用80 40 20 10 08 04 02 01。
3、直到注册名计算完毕的值A与64求余。得到B.这就是我们需要的是第2段注册码
4、将B转换成十进制数就是注册码,这就是我们需要的是第2段注册码
计算公式:
注:注册名的第一位用a1来代替,第二位用a2来代替,第三位用a3来代替......,以次类推。
(a1 xor 80)+(a2 xor 40)+(a3 xor 20)+(a4 xor 10)+(a5 xor 08)+(a6 xor 04)+(a7
xor 02)
+(a8 xor 80)+(a9 xor 80)+(a10 xor 40)+(a10 xor 20)+(a11 xor 10)+(a12 xor 08).......=A
A IDIV 64=B
将B转换成十进制数就是注册码. 是第2段注册码。
二、举例说明:
我输入的注册名是chinese,它对应的Ascii如下。
字 符: c h i n e s e
Ascii: 63 68 69 6e 65 73 65 与80 40 20 10 08 04 02 进行异或计算
(63 xor 80)+(68 xor 40)+(69 xor 20)+(6e xor 10)+(65 xor 08)+(73 xor 04)+(65xor
02)=
e3+28+49+7e+6d+77+67=31D
31D IDIV 64 =61
61转换成十进制为97。 <<--第2段注册码
015F:004031EA TEST ESI,ESI
015F:004031EC JNZ 004031EF
015F:004031EE INC ESI
015F:004031EF PUSH DWORD 0042FCBC
015F:004031F4 CALL 0042A088
015F:004031F9 POP ECX
015F:004031FA CMP ESI,EAX
//比较注册码。
015F:004031FC JZ 00403203
//不相等,就跳。
015F:004031FE XOR EAX,EAX
015F:00403200 MOV [EBP-04],EAX
015F:00403203 CMP DWORD [EBP-04],BYTE +00
015F:00403207 JZ NEAR 0040328E
015F:0040320D XOR EDX,EDX
015F:0040320F MOV [EBP-08],EDX
015F:00403212 XOR ESI,ESI
015F:00403214 JMP SHORT 0040322F
015F:00403216 MOV AL,[ESI+0042FCB6] <<--|
11111
015F:0040321C MOV EDX,ESI
|
015F:0040321E AND EDX,BYTE +07
|
015F:00403221 XOR AL,[EDX+0042E088]
|
015F:00403227 XOR ECX,ECX
|
015F:00403229 MOV CL,AL
|
015F:0040322B ADD [EBP-08],ECX
|
015F:0040322E INC ESI
|
015F:0040322F CMP BYTE [ESI+0042FCB6],00 |
015F:00403236 JZ 0040323D
|
015F:00403238 CMP ESI,BYTE +05
|
015F:0040323B JL 00403216
<<--|
015F:0040323D XOR ESI,ESI
015F:0040323F JMP SHORT 0040325A
015F:00403241 MOV AL,[ESI+0042FCBF] <<--|
015F:00403247 MOV EDX,ESI
| 33333
015F:00403249 AND EDX,BYTE +07
|
015F:0040324C XOR AL,[EDX+0042E088]
|
015F:00403252 XOR ECX,ECX
|
015F:00403254 MOV CL,AL
|
015F:00403256 ADD [EBP-08],ECX
|
015F:00403259 INC ESI
|
015F:0040325A CMP BYTE [ESI+0042FCBF],00 |
015F:00403261 JZ 00403268
|
015F:00403263 CMP ESI,BYTE +05
|
015F:00403266 JL 00403241
<<--|
015F:00403268 MOV EAX,[EBP-08]
015F:0040326B MOV ECX,64
015F:00403270 CDQ
015F:00403271 IDIV ECX
015F:00403273 MOV ESI,EDX
此处的计算方法基本相同,不同的地方是它是用注册码的第1段(11111)和第3段(33333)来计算。
一、算法总结:
1、把你输入的注册码第1段(11111)的每个字符都转成相应的Ascii码!
2、然后,与相对应80 40 20 10 08 进行异或计算。再将计算后的值A累加。
3、把你输入的注册码第3段(33333)的每个字符都转成相应的Ascii码!
4、然后,与相对应80 40 20 10 08 进行异或计算。再将计算后的值B累加。
5、直到注册码计算完毕的值B与64求余。得到C.这就是我们需要的注册码C。
6、将C转换成十进制数就是注册码,这就是我们需要的第4段注册码。
计算公式:
注:注册码第1段(11111)的第一位用a1来代替,第二位用a2来代替,第三位用a3来代替......,以次类推
注册码第3段(33333)的第一位用b1来代替,第二位用b2来代替,第三位用b3来代替......,以次类推
(a1 xor 80)+(a2 xor 40)+(a3 xor 20)+(a4 xor 10)+(a5 xor 08)=A
A+(b1 xor 80)+(b2 xor 40)+(b3 xor 20)+(b4 xor 10)+(b5 xor 08)=B
B IDIV 64=C
将C转换成十进制数就是注册码.
二、举例说明:
我输入的注册码第1段是11111、第2段33333。
(31 xor 80)+(31 xor 40)+(31 xor 20)+(31 xor 10)+(31 xor 08)=B1+71+11+21+39=18D
18D+(33 xor 80)+(33 xor 40)+(33 xor 20)+(33 xor 10)+(33 xor 08)=18D+B3+73+13+23+3B=324
324 IDIV 64=04
04转换成十进制为04。<<--第4段注册码。
015F:00403275 TEST ESI,ESI
015F:00403277 JNZ 0040327A
015F:00403279 INC ESI
015F:0040327A PUSH DWORD 0042FCC5
015F:0040327F CALL 0042A088
015F:00403284 POP ECX
015F:00403285 CMP ESI,EAX
// ? eax 44 是输入的注册码.
015F:00403287 JZ 0040328E
? esi 04 正确的注册码.
015F:00403289 XOR EAX,EAX
015F:0040328B MOV [EBP-04],EAX
015F:0040328E CMP DWORD [EBP-04],BYTE +00
015F:00403292 JNZ 004032A6
015F:00403294 PUSH DWORD 00430FCC
015F:00403299 PUSH EBX
015F:0040329A CALL 004038FD
//密码失败对话框
015F:0040329F ADD ESP,BYTE +08
015F:004032A2 XOR EAX,EAX
015F:004032A4 JMP SHORT 00403310
.........................
通过以上分析可以知道,这个程序是用注册册名计算第2段注册吗。用第1段和第3段来计算第4段注册码。
也就是说,注册码第2段,同注册名有关。
注册码第4段,同注册码第1段和第3段有关。
整理一下:
注册码:11111-97-33333-04
注册名:Chinese
罗罗嗦嗦讲了一大堆,希望大家能够明白我的意思!
- 标 题:菜鸟破解录之 GIF Construction Set Pro及算法分析 (8千字)
- 作 者:xiA Qin
- 时 间:2000-9-1 10:44:20
- 链 接:http://bbs.pediy.com