安全中国首页 > 文章中心 > 系统底层
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

菜鸟破解录之 GIF Construction Set Pro及算法分析

更新时间:2007-12-9 0:10:13
责任编辑:池天
热 点:
软件名称:  GIF Construction Set Pro 
软件版本:  2.0a(Ptach 20)  
软件大小:  4132KB  
软件授权:  共享软件  
使用平台:  Win95/98/NT  
发布公司:  http://www.mindworkshop.com/alchemy/gifcon.html 
软件简介:  
快速、专业地创建为你的网页创建透明、交错和活动的GIF文件。动画向导可另你在几分钟之内创建极具魅力的Web图形。 



作    者:xiA Qin 
解密工具: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        //又要检查注册码位数,16位。 
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 

罗罗嗦嗦讲了一大堆,希望大家能够明白我的意思! 

 
相关文章
一日一文章
 
一日一软件
一日一动画