【破文作者】S.P.S.G

【作者邮箱】spsgeyro@gmail.com

【所属组织】Winter[CZG]

【组织主页】http://www.5icrack.com

【使用工具】Fuckall,PEiD

【操作系统】Windows 2003

--------------------------------------------------------------------------------

【软件名称】每周电视节目 V2005 Build 02.01      

【下载地址】http://www.skycn.com/soft/21903.html

【软件大小】1101 KB

【破解难度】eAsY

【保护方式】无 

【软件语言】Borland Delphi 6.0 - 7.0

【软件简介】

〖每周电视节目〗软件是非常实用的电脑助手。软件提供中央电视台所有各套节目、各省市所有电视节目

、海内外电视台节目等等每击节目表。软件同时提供经典爱情、信心指数、适应能力、合格丈夫、男性魅

力、焦虑情绪、心中靓女、经典智力、健康状态等项目的测试游戏。软件同时提供今日天气预报、历史上

的今天、今日滚动新闻、世界节日查询、特服号码查询、成年公历农历、度量转换查询等等实用的功能。

软件使用简单,傻瓜式操作。软件绿色、环保、小巧、功能强大、可完全卸载,放心使用。

【破解声明】曾经沧海难为水

【破解目的】我不喜欢有限制

--------------------------------------------------------------------------------

【爆破过程】

下载完软件,安装,没有问题,作者美其名曰免费软件,实际上要大家去易趣注册,ok,让我们来试试攻

击^_^

软件只给了一个注册窗口要求输入注册码,并且错误会给出提示。

分析:这样的软件有两种情况,一是多种注册码符合内置计算,二是内置明码。

PEiD查壳,Delphi,Fuckall载入,查找字符串,来到这里。

0051DB36  |.  E8 CDB8EEFF   CALL mztv.00409408                  这里进行运算
0051DB3B  |.  03F8          ADD EDI,EAX                         //EDI+EAX存入EDI(初始值为0)
0051DB3D  |.  81EF 07870000 SUB EDI,8707                        //EDI-8707H
0051DB43  |.  81FF 39300000 CMP EDI,3039                        //EDI与3039H比较,相同则注册

OK
0051DB49  |.  74 0C         JE SHORT mztv.0051DB57           ;  关键跳
0051DB4B  |.  B8 FCDB5100   MOV EAX,mztv.0051DBFC            ;  regwrong
0051DB50  |.  E8 131CF2FF   CALL mztv.0043F768
0051DB55  |.  EB 2D         JMP SHORT mztv.0051DB84
0051DB57  |>  BA 24DC5100   MOV EDX,mztv.0051DC24            ;  regok

进入关键CALL
00409408  /$  53            PUSH EBX
00409409  |.  56            PUSH ESI
0040940A  |.  83C4 F4       ADD ESP,-0C
0040940D  |.  8BD8          MOV EBX,EAX
0040940F  |.  8BD4          MOV EDX,ESP
00409411  |.  8BC3          MOV EAX,EBX
00409413  |.  E8 B09EFFFF   CALL mztv.004032C8                  //这个CALL里出来的EAX是关键

,进去看看
00409418  |.  8BF0          MOV ESI,EAX
0040941A  |.  833C24 00     CMP DWORD PTR SS:[ESP],0
0040941E  |.  74 19         JE SHORT mztv.00409439              
00409420  |.  895C24 04     MOV DWORD PTR SS:[ESP+4],EBX
00409424  |.  C64424 08 0B  MOV BYTE PTR SS:[ESP+8],0B
00409429  |.  8D5424 04     LEA EDX,DWORD PTR SS:[ESP+4]
0040942D  |.  A1 486B5200   MOV EAX,DWORD PTR DS:[526B48]
00409432  |.  33C9          XOR ECX,ECX
00409434  |.  E8 EFF9FFFF   CALL mztv.00408E28
00409439  |>  8BC6          MOV EAX,ESI
0040943B  |.  83C4 0C       ADD ESP,0C
0040943E  |.  5E            POP ESI
0040943F  |.  5B            POP EBX
00409440  \.  C3            RETN

004032C8  /$  53            PUSH EBX
004032C9  |.  56            PUSH ESI
004032CA  |.  57            PUSH EDI                            //保存环境变量,EAX=假码
004032CB  |.  89C6          MOV ESI,EAX
004032CD  |.  50            PUSH EAX
004032CE  |.  85C0          TEST EAX,EAX
004032D0  |.  74 6C         JE SHORT mztv.0040333E              //EAX=0则跳
004032D2  |.  31C0          XOR EAX,EAX                         //EAX清零
004032D4  |.  31DB          XOR EBX,EBX                         //EBX清零
004032D6  |.  BF CCCCCC0C   MOV EDI,0CCCCCCC                    EDI=0CCCCCCC
004032DB  |>  8A1E          /MOV BL,BYTE PTR DS:[ESI]           //这段循环取假码第一个字符
004032DD  |.  46            |INC ESI
004032DE  |.  80FB 20       |CMP BL,20                          //为空格则取下一位
004032E1  |.^ 74 F8         \JE SHORT mztv.004032DB             //不为空则执行下去
004032E3  |.  B5 00         MOV CH,0                            //CH=0
004032E5  |.  80FB 2D       CMP BL,2D                           //BL是否为-
004032E8  |.  74 62         JE SHORT mztv.0040334C
004032EA  |.  80FB 2B       CMP BL,2B                           //BL是否为+
004032ED  |.  74 5F         JE SHORT mztv.0040334E
004032EF  |.  80FB 24       CMP BL,24                           //BL是否为$
004032F2  |.  74 5F         JE SHORT mztv.00403353
004032F4  |.  80FB 78       CMP BL,78                           //BL是否为x
004032F7  |.  74 5A         JE SHORT mztv.00403353
004032F9  |.  80FB 58       CMP BL,58                           //BL是否为X
004032FC  |.  74 55         JE SHORT mztv.00403353
004032FE  |.  80FB 30       CMP BL,30                           //BL是否为0
00403301  |.  75 13         JNZ SHORT mztv.00403316             //都不是则跳去计算
00403303  |.  8A1E          MOV BL,BYTE PTR DS:[ESI]
00403305  |.  46            INC ESI
00403306  |.  80FB 78       CMP BL,78
00403309  |.  74 48         JE SHORT mztv.00403353
0040330B  |.  80FB 58       CMP BL,58
0040330E  |.  74 43         JE SHORT mztv.00403353
00403310  |.  84DB          TEST BL,BL
00403312  |.  74 20         JE SHORT mztv.00403334
00403314  |.  EB 04         JMP SHORT mztv.0040331A
00403316  |>  84DB          TEST BL,BL                          //BL中是否还有字符
00403318  |.  74 2D         JE SHORT mztv.00403347              //没有则跳掉
0040331A  |>  80EB 30       /SUB BL,30                          //BL-30
0040331D  |.  80FB 09       |CMP BL,9                           //是否比9大
00403320  |.  77 25         |JA SHORT mztv.00403347             //大于9跳出循环
00403322  |.  39F8          |CMP EAX,EDI                        //是否比0CCCCCCC大
00403324  |.  77 21         |JA SHORT mztv.00403347
00403326  |.  8D0480        |LEA EAX,DWORD PTR DS:[EAX+EAX*4>   //EAX*5
00403329  |.  01C0          |ADD EAX,EAX                        //上下两句一起看就是EAX*10
0040332B  |.  01D8          |ADD EAX,EBX                        //EAX加上下一个字符
0040332D  |.  8A1E          |MOV BL,BYTE PTR DS:[ESI]           //取下一位
0040332F  |.  46            |INC ESI
00403330  |.  84DB          |TEST BL,BL                         //是否还有字符
00403332  |.^ 75 E6         \JNZ SHORT mztv.0040331A            //有则循环
00403334  |>  FECD          DEC CH
00403336  |.  74 09         JE SHORT mztv.00403341
00403338  |.  85C0          TEST EAX,EAX
0040333A  |.  7D 4E         JGE SHORT mztv.0040338A             //EAX大于等于0则跳
0040333C  |.  EB 09         JMP SHORT mztv.00403347
0040333E  |>  46            INC ESI
0040333F  |.  EB 06         JMP SHORT mztv.00403347
00403341  |>  F7D8          NEG EAX
00403343  |.  7E 45         JLE SHORT mztv.0040338A
00403345  |.  78 43         JS SHORT mztv.0040338A
00403347  |>  5B            POP EBX                          ;  Default case of switch 

00403367
00403348  |.  29DE          SUB ESI,EBX
0040334A  |.  EB 41         JMP SHORT mztv.0040338D
0040334C  |>  FEC5          INC CH
0040334E  |>  8A1E          MOV BL,BYTE PTR DS:[ESI]
00403350  |.  46            INC ESI
00403351  |.^ EB C3         JMP SHORT mztv.00403316
00403353  |>  BF FFFFFF0F   MOV EDI,0FFFFFFF
00403358  |.  8A1E          MOV BL,BYTE PTR DS:[ESI]
0040335A  |.  46            INC ESI
0040335B  |.  84DB          TEST BL,BL
0040335D  |.^ 74 DF         JE SHORT mztv.0040333E
0040335F  |>  80FB 61       /CMP BL,61
00403362  |.  72 03         |JB SHORT mztv.00403367
00403364  |.  80EB 20       |SUB BL,20
00403367  |>  80EB 30       |SUB BL,30                       ;  Switch (cases 30..46)
0040336A  |.  80FB 09       |CMP BL,9
0040336D  |.  76 0B         |JBE SHORT mztv.0040337A
0040336F  |.  80EB 11       |SUB BL,11
00403372  |.  80FB 05       |CMP BL,5
00403375  |.^ 77 D0         |JA SHORT mztv.00403347
00403377  |.  80C3 0A       |ADD BL,0A                       ;  Cases 41 ('A'),42 ('B'),43 

('C'),44 ('D'),45 ('E'),46 ('F') of switch 00403367
0040337A  |>  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 00403367
0040337C  |.^ 77 C9         |JA SHORT mztv.00403347
0040337E  |.  C1E0 04       |SHL EAX,4
00403381  |.  01D8          |ADD EAX,EBX
00403383  |.  8A1E          |MOV BL,BYTE PTR DS:[ESI]
00403385  |.  46            |INC ESI
00403386  |.  84DB          |TEST BL,BL
00403388  |.^ 75 D5         \JNZ SHORT mztv.0040335F
0040338A  |>  59            POP ECX                          //跳来这里
0040338B  |.  31F6          XOR ESI,ESI                      //ESI清零
0040338D  |>  8932          MOV DWORD PTR DS:[EDX],ESI       //EDX=ESI
0040338F  |.  5F            POP EDI
00403390  |.  5E            POP ESI
00403391  |.  5B            POP EBX                          //恢复环境变量
00403392  \.  C3            RETN

00409418  |.  8BF0          MOV ESI,EAX                      //来到这里,ESI=EAX
0040941A  |.  833C24 00     CMP DWORD PTR SS:[ESP],0         //ESP是否为0
0040941E  |.  74 19         JE SHORT mztv.00409439
00409420  |.  895C24 04     MOV DWORD PTR SS:[ESP+4],EBX       
00409424  |.  C64424 08 0B  MOV BYTE PTR SS:[ESP+8],0B
00409429  |.  8D5424 04     LEA EDX,DWORD PTR SS:[ESP+4]
0040942D  |.  A1 486B5200   MOV EAX,DWORD PTR DS:[526B48]
00409432  |.  33C9          XOR ECX,ECX
00409434  |.  E8 EFF9FFFF   CALL mztv.00408E28
00409439  |>  8BC6          MOV EAX,ESI                     //跳来这里
0040943B  |.  83C4 0C       ADD ESP,0C                      //恢复ESP
0040943E  |.  5E            POP ESI 
0040943F  |.  5B            POP EBX                         //恢复环境变量
00409440  \.  C3            RETN

0051DB3B  |.  03F8          ADD EDI,EAX                     //然后就来到这里
0051DB3D  |.  81EF 07870000 SUB EDI,8707
0051DB43  |.  81FF 39300000 CMP EDI,3039
0051DB49  |.  74 0C         JE SHORT mztv.0051DB57           ;  关键跳

--------------------------------------------------------------------------------

【总结】
总结一下注册码:
EAX-8707H=3039H
即EAX=B740H
注册码=B740H
转换成10进制:46912
填入,注册成功。
最近分析的几个程序都有这段循环,似乎delphi取位比较都用这个方法。

--------------------------------------------------------------------------------

【版权声明】转载请注明作者以及确保文章完整性,谢谢