再來一篇OLLYDBG的萬能斷點-----File Shredder 3.7的演算法探析

看雪資料發表於2015-11-15

再來一篇OLLYDBG的萬能斷點-----File Shredder 3.7的演算法探析

軟體介紹:
        File Shredder 3.7 
軟體大小:105KB
軟體語言:英文
軟體類別:國外軟體/共享版/解除安裝工具
執行環境:Win9x/Me/NT/2000/XP
加入時間:2003-10-8 16:05:51
下載次數:525
軟體評級:
聯 系 人:未知
開 發 商:Home Page 
軟體介紹: 
   檔案徹底刪除工具,直接在資源管理器點選右鍵選擇相應選項即可徹底刪除檔案,可選擇對其進行多遍複寫,以達到永遠無法恢復的目的。
   下載地址
          http://www.onlinedown.net/soft/10694.htm
   破解作者
           yzez[DFCG]
   破解工具
          我的ODBG109B
   破解環境
          WINDOWS XP作業系統
   破解目的
          不為破解而破解,只因為技術而破解
   破解過程
1、只使用了查殼工具,沒有使用其他工具,經查無殼,VC程式設計,用OD載入程式,在最下邊的命令框裡輸入:bpx hmemcpy萬能斷點,按Enter鍵,出現互相調變的CALL對話方塊,在框裡右鍵點選,在所有的CALL上都設定好斷點,再按F9,也可以邊按F9,邊按F2去掉無用的斷點,到出現註冊資訊框後,輸入任意註冊資訊,我輸入,使用者名稱:yzez,使用者單位:yzez[DFCG],試驗碼:12345678,點確定程式被斷在004059BB處,按F8往下走

004059BB  CALL    DWORD PTR DS:[<&USER32.GetDlgIte>****點註冊確定後我們中斷在此,按F
004059C1  POP     EDI                              ****8往下走,因為還沒有到核心段!
004059C2  POP     ESI                              ****注意在這個斷點會返回三次!
004059C3  MOV     EAX, 1
004059C8  POP     EBX
004059C9  RETN*******************************在這裡程式返回,第三次後返回的程式碼如下
==================================================================================

00402264  MOV     ALBYTE PTR DS:[ESI]*****第三次後程式返回到這裡!把使用者名稱的第一位y
********************************************送入AL,AL的值是79即y的ASCII碼值!
00402266  ADD     ESP, 30
00402269  TEST    ALAL********************測試是否為0
0040226B  JNZ     SHORT Shredder.0040228B***不為0往下跳!
0040226D  CMP     BYTE PTR DS:[EDI], 0
00402270  JNZ     SHORT Shredder.0040228B
00402272  MOV     BYTE PTR DS:[ESI], 0
00402275  MOV     BYTE PTR DS:[EDI], 0
00402278  MOV     DWORD PTR DS:[ESI+64], 0
0040227F  MOV     DWORD PTR DS:[ESI+68], 1
00402286  JMP     Shredder.00402334
0040228B  LEA     EAXDWORD PTR SS:[ESP+10]**上面跳到此處!賦試驗碼的地址值給EAX
0040228F  PUSH    EAX*************************試驗碼入棧!
00402290  CALL    Shredder.0040CE90***********此CALL把試驗碼轉換成十六進位制值,
**************************************即12345678轉換成十六進位制值是:BC614E
00402295  PUSH    ESI*****************使用者名稱:yzez入棧!
00402296  MOV     EBXEAX************轉換成十六進位制值的試驗碼儲存到EBX中
00402298  CALL    Shredder.00405920***對使用者名稱運算,得到的值是由3811A,程式碼看後面
0040229D  ADD     ESP, 8
004022A0  CMP     EAX, 119A792********比較93811A與119A792
004022A5  JNZ     SHORT Shredder.004022BF****不相等就跳!
004022A7  MOV     EBXDWORD PTR DS:[<&KERNEL32.ls   
004022AD  PUSH    Shredder.00418084                
004022B2  PUSH    ESI                             
004022B3  CALL    EBX                              
004022B5  PUSH    Shredder.00418074                
004022BA  PUSH    EDI                              
004022BB  CALL    EBX                           
004022BD  JMP     SHORT Shredder.004022C6
004022BF  CMP     EAX, 0D5FCE3C*************跳到這裡比較
004022C4  JNZ     SHORT Shredder.004022D2***不相等再跳!
004022C6  PUSH    EDI
004022C7  PUSH    ESI                            
004022C8  CALL    Shredder.004056A0
004022CD  ADD     ESP, 8
004022D0  MOV     EBXEAX
004022D2  PUSH    EDI*********************跳到這裡
004022D3  PUSH    ESI                           
004022D4  CALL    Shredder.004056A0**********關鍵CALL按F7跟進!
004022D9  ADD     ESP, 8
004022DC  CMP     EBXEAX****************EAX是97C02543,EAX是試驗碼:BC614E
004022DE  JE      SHORT Shredder.004022FE*相等就跳,一跳就恭喜了,註冊成功!
004022E0  PUSH    0EACF
004022E5  PUSH    1388
004022EA  PUSH    EBP
004022EB  CALL    Shredder.004056D0
004022F0  ADD     ESP, 0C
004022F3  POP     EDI
004022F4  POP     ESI                              ;  Shredder.0041EE38
004022F5  POP     EBP
004022F6  POP     EBX
004022F7  ADD     ESP, 100
004022FD  RETN
=================================================================================
********************關鍵CALL********************************************

004056A0  MOV     EAXDWORD PTR SS:[ESP+4]             ;  Shredder.0041EE38
004056A4  PUSH    ESI
004056A5  MOV     ESIDWORD PTR DS:[424358]****424358地址處存放的值95989598入ESI
004056AB  PUSH    EAX
004056AC  OR      ESI, 378********************ESI OR 378=95989598 OR 378=959897F8
004056B2  CALL    Shredder.00405920***********演算法CALL(1),對使用者名稱運算,按F7跟進!
004056B7  MOV     ECXDWORD PTR SS:[ESP+10]         
004056BB  ADD     ESIEAX*******************ESI=ESI+EAX=959897F8+93811A=962C1912
004056BD  PUSH    ECX
004056BE  CALL    Shredder.00405920**********演算法CALL(2)再對使用者單位同上運算,得到
********************************************的值是:1940C31
004056C3  ADD     ESP, 8
004056C6  ADD     EAXESI*******************EAX=ESI+EAX=959897F8+1940C31=97C02543
*********************************************把它轉化成十進位制值就是我們要找的註冊碼!
004056C8  POP     ESI                                   ;  Shredder.0041EE38
004056C9  RETN

==================================================================================
*************演算法CALL的程式碼!***********************************************

00405920  PUSH    ECX****跟進演算法CALL後我們停在這裡!                       
00405921  PUSH    EBX
00405922  MOV     EBXDWORD PTR SS:[ESP+C]
00405926  PUSH    ESI                            
00405927  XOR     ESIESI                        
00405929  PUSH    EBX**************************使用者名稱入棧!                          
0040592A  MOV     DWORD PTR SS:[ESP+C], ESI        
0040592E  CALL    DWORD PTR DS:[<&KERNEL32.lstrlen>**取得使用者名稱的位數:4
00405934  TEST    EBXEBX***************************測試使用者名稱輸入了嗎?
00405936  JE      SHORT Shredder.00405987************沒有輸入就跳走,跳就失敗
00405938  TEST    EAXEAX
0040593A  JE      SHORT Shredder.00405987
0040593C  XOR     EDXEDX***************************EDX清0
0040593E  TEST    EAXEAX
00405940  JLE     SHORT Shredder.00405987
00405942  PUSH    EBP
00405943  PUSH    EDI*********************使用者單位:yzez[DFCG]入棧                          
00405944  MOV     ESI, Shredder.0041972C** "|b!pz*ls;rn|lf$vi^Axpe)rx5aic&          9/2m5lsi4@0dmZw94cmqpfhw"這是軟體內建的一張表!把這張表移入ESI
00405949  MOV     EDI, 1******************賦EDI的值為1
0040594E  SUB     ESIEBX****************ESI=ESI-EBC,即減去使用者名稱的位數4
00405950  MOV     ECXEBX****************使用者名稱移入ECX中
00405952  SUB     EDIEBX****************EDI減去EBX
00405954  MOVSX   EBXBYTE PTR DS:[ESI+ECX]*密碼錶中的第一位“|”的HEX值7C擴充套件到EBX
00405958  MOVSX   EBPBYTE PTR DS:[EAX+EDX+4196F4]*EAX+EDX+4196F4=4196F8存放的值B
********************的ASCII碼值42擴充套件到EBP
00405960  IMUL    EBXEBP***EBX=EBX*EBP=7C*42=1FF8
00405963  LEA     EBPDWORD PTR DS:[EDI+ECX]**移入1到EBP,可能是其位數第一位!
00405966  IMUL    EBXEBP******EBX=EBX*EBP=1FF8*1=1FF8
00405969  MOVSX   EBPBYTE PTR DS:[ECX]**使用者名稱的第一位“y”的HEX值79擴充套件到EBP
0040596C  IMUL    EBXEBP******EBX=EBX*EBP=1FF8*79=F1C38
0040596F  MOV     EBPDWORD PTR SS:[ESP+10]**賦EBP的值為0      
00405973  ADD     EBPEBX******EBP=EBP+EBX,第一次迴圈EBP的值為F1C38
00405975  INC     EDX***********EDX加1
00405976  INC     ECX***********ECX減1                            
00405977  CMP     EDXEAX******比較1和4
00405979  MOV     DWORD PTR SS:[ESP+10], EBP***儲存值F1C38
0040597D  JL      SHORT Shredder.00405954******小於就跳,迴圈!最後的值是:65BF00,***再把上述的值相加即得到:93811A
0040597F  MOV     EAXEBP****把93811A移入EAX!
00405981  POP     EDI                           
00405982  POP     EBP                              
00405983  POP     ESI                            
00405984  POP     EBX                          
00405985  POP     ECX                           
00405986  RETN*********************************這個子程式結束,我們回到上面!
附上密碼錶:
004196F1  25 64 00 23 73 65 72 42  %d.#serB
004196F9  26 6E 7A 7C 6D 66 4D 31  &nz|mfM1
00419701  2F 35 28 21 73 64 24 4D  /5(!sd$M
00419709  71 2E 7B 73 5D 2B 73 46  q.{s]+sF
00419711  6A 74 4B 70 7A 53 64 74  jtKpzSdt
00419719  7A 6F 58 71 6D 62 5E 41  zoXqmb^A
00419721  6C 40 64 76 3A 73 3F 78  l@dv:s?x
00419729  2F 00 00 7C 62 21 70 7A  /..|b!pz
00419731  2A 6C 73 3B 72 6E 7C 6C  *ls;rn|l
00419739  66 24 76 69 5E 41 78 70  f$vi^Axp
00419741  65 29 72 78 35 61 69 63  e)rx5aic
00419749  26 39 2F 32 6D 35 6C 73  &9/2m5ls
00419751  69 34 40 30 64 6D 5A 77  i4@0dmZw
00419759  39 34 63 6D 71 70 66 68  94cmqpfh
00419761  77                       w

  一個可用的註冊碼:使用者名稱:yzez,使用者單位:yzez[DFCG],註冊碼是:2545952067

相關文章