系網紅巾V1.2演算法分析!

看雪資料發表於2003-06-19

軟體大小:  333 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 瀏覽輔助
應用平臺:  Win9x/NT/2000/XP
加入時間:  2003-06-18 11:17:05
聯 系 人:  liuleilover@163.com  
軟體下載:http://count.skycn.com/softdown.php?id=12504&url=http://js-http.skycn.net/down/redcloth.zip

軟體介紹:
   《系網紅巾》 專用於限制青少年對不健康網站(色情網站)的瀏覽. 根據青少年接觸“色情網站”的特點,提供了覆蓋面較廣的網址庫包含常見的“色情網站”網址,能夠有效的消除“色情網站”頁面的彈出。並且提供上網時段和上網時間限制,有效控制青少年的上網時間。

破解工具:TRW娃娃修改版
作者宣告:初學破解,僅作學習交流之用,失誤之處敬請大俠賜教

最近碰到幾個軟體竟然是DES演算法的(感謝fly兄提醒),:( 頭大! 找個簡單的給自已鼓鼓勁!
無殼,VC編寫!用bpx getwindowtexta下斷,你一定會走到這裡:
0167:00409523  MOV      EAX,[00444520]
0167:00409528  MOV      [ESP+08],EAX
0167:0040952C  LEA      ECX,[ESP+14]
0167:00409530  MOV      DWORD [ESP+34],00
0167:00409538  CALL     00406A60
0167:0040953D  LEA      ECX,[ESP+0C]
0167:00409541  MOV      BYTE [ESP+34],01
0167:00409546  PUSH     ECX
0167:00409547  LEA      ECX,[ESP+18]
0167:0040954B  CALL     00406AF0
0167:00409550  LEA      ECX,[ESP+0C]
                       <---[ECX]中為特徵碼"B694C92F"
0167:00409554  CALL     00422A82
0167:00409559  PUSH     BYTE +71
0167:0040955B  LEA      ECX,[ESP+0C]
0167:0040955F  CALL     00426CB1
0167:00409564  PUSH     ECX
0167:00409565  LEA      EDI,[ESI+0190]
                       <---[EDI]中為我們輸入的假碼"12345678998"  
0167:0040956B  MOV      ECX,ESP
0167:0040956D  MOV      [ESP+10],ESP
0167:00409571  PUSH     EDI
0167:00409572  CALL     004227F7
0167:00409577  LEA      ECX,[ESP+18]
0167:0040957B  CALL     00406B70
                       <---關鍵的Call,跟進!
0167:00409580  TEST     EAX,EAX
                       <---測試標誌位
0167:00409582  JZ       NEAR 004096B7
                       <---跳就玩完了!
0167:00409588  PUSH     BYTE +00
0167:0040958A  PUSH     DWORD 040D
0167:0040958F  MOV      ECX,ESI
................
中間略去很多程式碼,大概是解除時間限制及使註冊按鈕變灰吧!
我可不想跟! ;)
0167:00409690  MOV      ECX,[00446788]
0167:00409696  PUSH     EAX
0167:00409697  PUSH     ECX
0167:00409698  MOV      EDX,[ECX]
0167:0040969A  CALL     NEAR [EDX+1C]
0167:0040969D  LEA      ECX,[ESP+1C]
0167:004096A1  MOV      DWORD [0044414C],00
0167:004096AB  MOV      BYTE [ESP+34],01
0167:004096B0  CALL     0040A710
0167:004096B5  JMP      SHORT 004096D2
0167:004096B7  PUSH     BYTE -01
0167:004096B9  PUSH     BYTE +00
0167:004096BB  PUSH     BYTE +75
0167:004096BD  CALL     0042B4E1
                       <---註冊碼錯誤!
0167:004096C2  MOV      ECX,EDI
0167:004096C4  CALL     00422A0D
0167:004096C9  PUSH     BYTE +00
0167:004096CB  MOV      ECX,ESI
0167:004096CD  CALL     004259AF
0167:004096D2  LEA      ECX,[ESP+14]
0167:004096D6  MOV      BYTE [ESP+34],00
0167:004096DB  CALL     00406AE0
0167:004096E0  LEA      ECX,[ESP+08]
0167:004096E4  MOV      DWORD [ESP+34],FFFFFFFF
0167:004096EC  CALL     00422A82
0167:004096F1  MOV      ECX,[ESP+2C]
0167:004096F5  POP      EDI
0167:004096F6  MOV      [FS:00],ECX
0167:004096FD  POP      ESI
0167:004096FE  ADD      ESP,BYTE +30
0167:00409701  RET    
跟進那個關鍵的Call,來到如下程式碼:
0167:00406B70  PUSH     BYTE -01
0167:00406B72  PUSH     DWORD 004349D8
0167:00406B77  MOV      EAX,[FS:00]
0167:00406B7D  PUSH     EAX
0167:00406B7E  MOV      [FS:00],ESP
0167:00406B85  SUB      ESP,BYTE +0C
0167:00406B88  PUSH     EBX
0167:00406B89  PUSH     EBP
0167:00406B8A  PUSH     ESI
0167:00406B8B  PUSH     EDI
0167:00406B8C  MOV      ESI,ECX
0167:00406B8E  MOV      EAX,[ESI+04]
                       <---[ESI+04]中為特徵碼
0167:00406B91  LEA      EDI,[ESI+04]
0167:00406B94  MOV      DWORD [ESP+24],00
0167:00406B9C  MOV      ECX,[EAX-08]
                       <---ECX=B,為輸入假碼的位數
0167:00406B9F  TEST     ECX,ECX
                       <---判斷有無輸入註冊碼
0167:00406BA1  JNZ      00406BB8
0167:00406BA3  LEA      ECX,[ESP+10]
0167:00406BA7  PUSH     ECX
0167:00406BA8  MOV      ECX,ESI
0167:00406BAA  CALL     00406AF0
0167:00406BAF  LEA      ECX,[ESP+10]
0167:00406BB3  CALL     00422A82
0167:00406BB8  PUSH     BYTE +2D
0167:00406BBA  LEA      ECX,[ESP+30]
0167:00406BBE  CALL     00420B62
0167:00406BC3  PUSH     ECX
                       <---ECX中為特徵碼
0167:00406BC4  MOV      ECX,ESP
0167:00406BC6  MOV      [ESP+1C],ESP
0167:00406BCA  PUSH     EDI
                       <---[EDI]中為輸入的假碼
0167:00406BCB  CALL     004227F7
0167:00406BD0  MOV      ECX,ESI
0167:00406BD2  CALL     00406C90
                       <---此Call將特徵碼由字串形式轉換為Hex
                       形式,如我的機子上返回在EAX中的值為
                       B694C92F,我的特徵碼為"B694C92F"
0167:00406BD7  PUSH     ECX
0167:00406BD8  LEA      EDX,[ESP+30]
                       <---[ESP+30]中為輸入的碼
0167:00406BDC  MOV      EBX,EAX
0167:00406BDE  MOV      ECX,ESP
0167:00406BE0  MOV      [ESP+18],ESP
0167:00406BE4  PUSH     EDX
0167:00406BE5  MOV      [ESP+20],EBX
0167:00406BE9  CALL     004227F7
0167:00406BEE  MOV      ECX,ESI
0167:00406BF0  CALL     00406D00
                       <---此Call的作用對輸入的註冊碼進行處理
                       (只處理輸入註冊碼的前16位,不足16位的在
                       註冊碼前面部分以0補足),返回值在EAX和EDX
                       中,如我們輸入12345678998,則返回在EAX中
                       的為34578998,EDX中為00000012,如果輸入的
                       是字元,則只處理[a,f]與[A,F]之間的字元,其
                       餘以0代替,如我們輸入abcdefghijk,則Call後
                       EAX中為DEF00000,EDX中為00000ABC,程式碼就不
                       列出了,有興趣的跟一下.
0167:00406BF5  MOV      ESI,EAX
                       <---EDX中為處理後的註冊碼的第2部分
0167:00406BF7  MOV      EAX,EDX
                       <---EAX中為處理後的註冊碼的第1部分
0167:00406BF9  SHR      EAX,10
                       <---取EAX的高位部分
0167:00406BFC  MOV      DI,AX
                       <---高位部分存入DI中
0167:00406BFF  MOV      EAX,EDX
0167:00406C01  MOV      [ESP+14],EAX
0167:00406C05  MOV      BP,DX
0167:00406C08  SAR      EAX,1F
                       <---1F為31位,相當於EAX清0吧?!
0167:00406C0B  MOV      ECX,10
                       <---ECX=10
0167:00406C10  MOV      EAX,ESI
0167:00406C12  SHR      EBX,10
                       <---EBX中為特徵碼,取其高位部分
0167:00406C15  XOR      EDI,8182
                       <---DI=DI^8182
0167:00406C1B  XOR      EBP,8384
                       <---EBP=EBP^8384
0167:00406C21  CALL     00414340
                       <---取處理後註冊碼的第1部分的低位部分
                       返回值在EAX中
0167:00406C26  XOR      EAX,8586
                       <---AX=AX^8586
0167:00406C2B  XOR      ESI,8788
                       <---ESI=ESI^8788
0167:00406C31  CMP      BX,DI
                       <---BX中為轉換後特徵碼的高4位
0167:00406C34  JNZ      00406C61
                       <---第1個關鍵跳轉
0167:00406C36  CMP      BX,BP
0167:00406C39  JNZ      00406C61
                       <---第2個關鍵跳轉
0167:00406C3B  MOV      ECX,[ESP+18]
                       <---ECX=B694C92F,應該記得怎麼來的吧!
0167:00406C3F  CMP      CX,AX
                       <---CX為ECX的低4位
0167:00406C42  JNZ      00406C61
                       <---第3個關鍵跳轉
0167:00406C44  CMP      CX,SI
0167:00406C47  JNZ      00406C61
                       <---第4個關鍵跳轉
0167:00406C49  LEA      ECX,[ESP+2C]
0167:00406C4D  MOV      DWORD [ESP+24],FFFFFFFF
0167:00406C55  CALL     00422A82
0167:00406C5A  MOV      EAX,01
                       <---EAX=01,成功的標誌!
0167:00406C5F  JMP      SHORT 00406C74
0167:00406C61  LEA      ECX,[ESP+2C]
0167:00406C65  MOV      DWORD [ESP+24],FFFFFFFF
0167:00406C6D  CALL     00422A82
0167:00406C72  XOR      EAX,EAX
                       <---EAX=0,失敗!
0167:00406C74  MOV      ECX,[ESP+1C]
0167:00406C78  POP      EDI
0167:00406C79  POP      ESI
0167:00406C7A  POP      EBP
0167:00406C7B  MOV      [FS:00],ECX
0167:00406C82  POP      EBX
0167:00406C83  ADD      ESP,BYTE +18
0167:00406C86  RET      04
由此我們可以逆推出我的機器上的註冊碼了:
註冊碼第1~4位為B694^8182=3716
註冊碼第5~8位為B694^8384=3510
註冊碼第9~12位為C92F^8586=4CA9
註冊碼第13~16位為C92F^8788=4EA7


由此得到一組可用的註冊碼:
特徵碼:B694C92F
註冊碼:371635104CA94EA7

軟體註冊成功後將註冊碼儲存在登錄檔的:
"HKEY_LOCAL_MACHINE\Software\RedCloth\Page5\regkey"中
             
                                        Crack By ShenGe[BCG] 03.06.18


相關文章