影像處理軟體XFader的簡要分析

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

破解軟體:XFader
下載地址:www.21hh.net
破解難度:易
破解工具:TRW1.22
軟體說明:方便的影像素材生成工具,可以從任意一個點陣圖建立無窮多的紋理素材。只需執行XFader,開啟一個
bitmap或jpeg檔案然後按“漸變”按鈕即可,註冊使用者可以及時預覽效果。它本身並不具備太多圖片的編修功
能,它對於製作不同風格的網頁或是製作佈景主題是蠻需要的。趕快試試吧,絕對讓你大吃一驚。

任意輸入使用者名稱ShenGe和註冊碼12345678,下BPX HMEMCPY中斷,點Register,程式被中斷,按7下F12再按F10來到以下程式碼:
0167:00470BDD  LEA      EDX,[EBP-08]
0167:00470BE0  MOV      EAX,[0049EB50]
0167:00470BE5  MOV      EAX,[EAX+01F4]
0167:00470BEB  CALL     0041D25C
0167:00470BF0  MOV      EAX,[EBP-08]               <---程式中斷於此,取輸入的註冊碼到EAX中
0167:00470BF3  PUSH     EAX
0167:00470BF4  LEA      EDX,[EBP-0C]
0167:00470BF7  MOV      EAX,[0049EB50]
0167:00470BFC  MOV      EAX,[EAX+01F0]
0167:00470C02  CALL     0041D25C                  
0167:00470C07  MOV      EDX,[EBP-0C]               <---取輸入的使用者名稱到EDX中
0167:00470C0A  MOV      EAX,EBX
0167:00470C0C  POP      ECX                        <---ECX中為輸入的註冊碼
0167:00470C0D  CALL     00470530                   <---關鍵的Call,跟進
0167:00470C12  TEST     AL,AL
0167:00470C14  JZ       NEAR 00470C9D              <---關鍵跳轉,要爆破改為JNZ即可
0167:00470C1A  LEA      EDX,[EBP-08]
0167:00470C1D  MOV      EAX,[0049EB50]
0167:00470C22  MOV      EAX,[EAX+01F4]
0167:00470C28  CALL     0041D25C
0167:00470C2D  MOV      EAX,[EBP-08]
0167:00470C30  PUSH     EAX
跟進上面的那個Call,來到如下程式碼處:
0167:00470530  PUSH     EBP
0167:00470531  MOV      EBP,ESP
0167:00470533  PUSH     ECX
0167:00470534  MOV      ECX,04
0167:00470539  PUSH     BYTE +00
0167:0047053B  PUSH     BYTE +00
0167:0047053D  DEC      ECX
0167:0047053E  JNZ      00470539
。。。。。。。
0167:004705B3  LEA      ECX,[EBP-24]
0167:004705B6  MOV      EDX,ESI
0167:004705B8  MOV      EAX,[EBX+4C]
0167:004705BB  MOV      EDI,[EAX]
0167:004705BD  CALL     NEAR [EDI+0C]
0167:004705C0  MOV      EDX,[EBP-24]
0167:004705C3  MOV      ECX,08
0167:004705C8  MOV      EAX,EBX
0167:004705CA  CALL     00470674                    <---此Call將我們輸入的使用者名稱進行轉換:小寫全部轉換成大寫;
0167:004705CF  MOV      ECX,[EBP-20]                    若使用者名稱不足8位,則不足部分依次從輸入的使用者名稱的第1位起
0167:004705D2  MOV      EDX,ESI                         取字元補齊,如我輸入的為ShenGe,則轉換後為SHENGESH
0167:004705D4  MOV      EAX,[EBX+4C]
0167:004705D7  MOV      EDI,[EAX]
0167:004705D9  CALL     NEAR [EDI+20]
0167:004705DC  INC      ESI
0167:004705DD  DEC      DWORD [EBP-1C]
0167:004705E0  JNZ      004705AD
0167:004705E2  MOV      EDX,[EBP-10]
0167:004705E5  MOV      EAX,[EBX+4C]
0167:004705E8  MOV      ECX,[EAX]
0167:004705EA  CALL     NEAR [ECX+50]
0167:004705ED  TEST     EAX,EAX
0167:004705EF  JNL      0047062B
0167:004705F1  MOV      EAX,[EBP-10]
0167:004705F4  CALL     00403BE4
0167:004705F9  TEST     EAX,EAX
0167:004705FB  JNG      0047062B
0167:004705FD  MOV      EAX,[EBP-14]
0167:00470600  CALL     00403BE4
0167:00470605  TEST     EAX,EAX
0167:00470607  JNG      0047062B
0167:00470609  LEA      EAX,[EBP-18]
0167:0047060C  PUSH     EAX
0167:0047060D  MOV      ECX,[EBP-10]                 <---D ECX可看到轉換後的使用者名稱
0167:00470610  MOV      EDX,[EBP-14]                 <---D EDX可看到固定字串“PXF12OKT”
0167:00470613  MOV      EAX,EBX
0167:00470615  CALL     004707C0                     <---計算註冊碼的Call,跟進
0167:0047061A  MOV      EAX,[EBP-18]                 <--- D EAX可看到正確的註冊碼
0167:0047061D  MOV      EDX,[EBP-08]                 <--- D EDX可看到我們輸的假的註冊碼  
0167:00470620  CALL     00403CF4                     <--- 進行比較的Call
0167:00470625  JNZ      0047062B                     <---關鍵跳轉
0167:00470627  MOV      BYTE [EBP-09],01
0167:0047062B  XOR      EAX,EAX
0167:0047062D  POP      EDX
0167:0047062E  POP      ECX
0167:0047062F  POP      ECX
0167:00470630  MOV      [FS:EAX],EDX
0167:00470633  PUSH     DWORD 00470667
0167:00470638  LEA      EAX,[EBP-24]
0167:0047063B  MOV      EDX,02
0167:00470640  CALL     0040398C
0167:00470645  LEA      EAX,[EBP-18]
0167:00470648  MOV      EDX,03
0167:0047064D  CALL     0040398C
0167:00470652  LEA      EAX,[EBP-08]
0167:00470655  MOV      EDX,02
0167:0047065A  CALL     0040398C
0167:0047065F  RET  
由上可看到,只要在 0167:0047061A 處下D EAX即可看到正確的註冊碼,但我們的目的是找出演算法,跟進上面的那個Call可看到以下程式碼:
0167:004707C0  PUSH     EBP
0167:004707C1  MOV      EBP,ESP
0167:004707C3  ADD      ESP,FFFFFEB4
0167:004707C9  PUSH     EBX
0167:004707CA  PUSH     ESI
0167:004707CB  PUSH     EDI
0167:004707CC  XOR      EBX,EBX
0167:004707CE  MOV      [EBP+FFFFFED8],EBX
0167:004707D4  MOV      [EBP+FFFFFED4],EBX
0167:004707DA  MOV      [EBP+FFFFFED0],EBX
。。。。。。。
0167:00470838  PUSH     EAX
0167:00470839  MOV      ECX,08
0167:0047083E  MOV      EDX,01
0167:00470843  MOV      EAX,[EBP-04]
0167:00470846  CALL     00403DE8
0167:0047084B  PUSH     DWORD [EBP+FFFFFED4]
0167:00470851  LEA      EAX,[EBP+FFFFFED0]
0167:00470857  PUSH     EAX
0167:00470858  MOV      ECX,08
0167:0047085D  MOV      EDX,01
0167:00470862  MOV      EAX,[EBP-08]
0167:00470865  CALL     00403DE8
0167:0047086A  PUSH     DWORD [EBP+FFFFFED0]       <---D *EBP+FFFFFED0可看到為轉換後的使用者名稱
0167:00470870  PUSH     DWORD 004709DC             <---D 004709DC可看到########
0167:00470875  LEA      EAX,[EBP+FFFFFED8]
0167:0047087B  MOV      EDX,03
0167:00470880  CALL     00403CA4                   <---這個Call將固定串“PXF12OKT”與轉換後的使用者名稱及"########"合併後存入[EBP+FFFFFED8]中
0167:00470885  MOV      EDX,[EBP+FFFFFED8]
0167:0047088B  LEA      EAX,[EBP+FFFFFEDC]
0167:00470891  MOV      ECX,FF
0167:00470896  CALL     00403BC0                  
0167:0047089B  LEA      EDX,[EBP+FFFFFEDC]
0167:004708A1  LEA      EAX,[EBP-21]
0167:004708A4  MOV      CL,18
0167:004708A6  CALL     004029AC
0167:004708AB  PUSH     BYTE +03                   <---置入口引數                  -----------|    
0167:004708AD  PUSH     BYTE +05                   <---置入口引數                             |
0167:004708AF  PUSH     BYTE +07                   <---置入口引數                             |
0167:004708B1  LEA      EDX,[EBP-21]                                                          |
0167:004708B4  MOV      CL,01                                                                 |
0167:004708B6  MOV      EAX,EBX                                                               |
0167:004708B8  CALL     00470784                   <---此Call是對上面合併後的字串進行處理   |
0167:004708BD  MOV      [EBP-10],AL                <---運算後的結果存入[EBP-10]中  -----------|
0167:004708C0  PUSH     BYTE +04         -----------------------|
0167:004708C2  PUSH     BYTE +0A                                |                
0167:004708C4  PUSH     BYTE +0C                                |
0167:004708C6  LEA      EDX,[EBP-21]                            |
0167:004708C9  MOV      CL,02                                   |  
0167:004708CB  MOV      EAX,EBX                                 |    
0167:004708CD  CALL     00470784                                |
0167:004708D2  MOV      [EBP-0F],AL      -----------------------|                                  
0167:004708D5  PUSH     BYTE +0B                                |
0167:004708D7  PUSH     BYTE +0D                                |    
0167:004708D9  PUSH     BYTE +0F                                |
0167:004708DB  LEA      EDX,[EBP-21]                            |    
0167:004708DE  MOV      CL,09                                   |
0167:004708E0  MOV      EAX,EBX                                 |
0167:004708E2  CALL     00470784                                |
0167:004708E7  MOV      [EBP-0E],AL       ----------------------|
0167:004708EA  PUSH     BYTE +08                                |
0167:004708EC  PUSH     BYTE +0E                                |
0167:004708EE  PUSH     BYTE +10                                |
0167:004708F0  LEA      EDX,[EBP-21]                            |
0167:004708F3  MOV      CL,06                                   |
0167:004708F5  MOV      EAX,EBX                                 |
0167:004708F7  CALL     00470784                                |
0167:004708FC  MOV      [EBP-0D],AL       ----------------------|
0167:004708FF  PUSH     BYTE +10                                |
0167:00470901  PUSH     BYTE +02                                |
0167:00470903  PUSH     BYTE +0F                                |
0167:00470905  LEA      EDX,[EBP-21]                            |
0167:00470908  MOV      CL,01                                   |
0167:0047090A  MOV      EAX,EBX                                 |
0167:0047090C  CALL     00470784                                |
0167:00470911  MOV      [EBP-0C],AL       ----------------------|
0167:00470914  PUSH     BYTE +0E                                |
0167:00470916  PUSH     BYTE +04                                |
0167:00470918  PUSH     BYTE +0D                                |  
0167:0047091A  LEA      EDX,[EBP-21]                            |
0167:0047091D  MOV      CL,03                                   |
0167:0047091F  MOV      EAX,EBX                                 |
0167:00470921  CALL     00470784                                |
0167:00470926  MOV      [EBP-0B],AL       ----------------------|          
0167:00470929  PUSH     BYTE +0C                                |
0167:0047092B  PUSH     BYTE +06                                |
0167:0047092D  PUSH     BYTE +0B                                |
0167:0047092F  LEA      EDX,[EBP-21]                            |
0167:00470932  MOV      CL,05                                   |
0167:00470934  MOV      EAX,EBX                                 |
0167:00470936  CALL     00470784                                |
0167:0047093B  MOV      [EBP-0A],AL       ----------------------|  
0167:0047093E  PUSH     BYTE +0A                                |
0167:00470940  PUSH     BYTE +08                                |
0167:00470942  PUSH     BYTE +09                                |
0167:00470944  LEA      EDX,[EBP-21]                            |
0167:00470947  MOV      CL,07                                   |
0167:00470949  MOV      EAX,EBX                                 |
0167:0047094B  CALL     00470784                                |
0167:00470950  MOV      [EBP-09],AL      -----------------------|
0167:00470953  MOV      EBX,08
0167:00470958  LEA      ECX,[EBP-10]           <---取上面8次Call運算後的結果到[ECX]中
0167:0047095B  XOR      EAX,EAX                <---EAX清零
0167:0047095D  MOV      AL,[ECX]               <---按位取[ECX]中的值到EAX中
0167:0047095F  MOV      EDI,0A                 <---EDI中置為定值0AH
0167:00470964  CDQ                             <---EDX清零
0167:00470965  IDIV     EDI
0167:00470967  ADD      EDX,BYTE +30           <---將餘數轉化成十六進位制數值(正確註冊碼)
0167:0047096A  MOV      [ECX],DL               <---十六進位制值存入[ECX]中
0167:0047096C  INC      ECX
0167:0047096D  DEC      EBX
0167:0047096E  JNZ      0047095B               <---迴圈判斷,是否取完
0167:00470970  LEA      EAX,[EBP+FFFFFEB4]
0167:00470976  PUSH     EAX
0167:00470977  MOV      ECX,08
0167:0047097C  MOV      EDX,11
0167:00470981  LEA      EAX,[EBP-21]
0167:00470984  CALL     00402794               <---此Call將上面的計算結果(即正確註冊碼)存入[EBP+FFFFFEB4]中
0167:00470989  LEA      EDX,[EBP+FFFFFEB4]
0167:0047098F  MOV      EAX,ESI
0167:00470991  CALL     00403B88
0167:00470996  XOR      EAX,EAX
0167:00470998  POP      EDX
0167:00470999  POP      ECX
0167:0047099A  POP      ECX
0167:0047099B  MOV      [FS:EAX],EDX
0167:0047099E  PUSH     DWORD 004709C8
0167:004709A3  LEA      EAX,[EBP+FFFFFED0]
0167:004709A9  MOV      EDX,03
0167:004709AE  CALL     0040398C
0167:004709B3  LEA      EAX,[EBP-08]
0167:004709B6  MOV      EDX,02
0167:004709BB  CALL     0040398C
0167:004709C0  RET    
0167:004709C1  JMP      00403388
0167:004709C6  JMP      SHORT 004709A3
0167:004709C8  POP      EDI
0167:004709C9  POP      ESI
0167:004709CA  POP      EBX
0167:004709CB  MOV      ESP,EBP
0167:004709CD  POP      EBP
0167:004709CE  RET      04
可看到上面呼叫8次CALL 00470784 ,然後根據此Call得到的結果再與0AH除得到註冊碼,我們不凡再跟進此Call看看它到底如何運算0167:00470784  PUSH     EBP
0167:00470785  MOV      EBP,ESP
0167:00470787  ADD      ESP,BYTE -08
0167:0047078A  MOV      [EBP-05],CL             <---CL的值存入[EBP-05]中
0167:0047078D  MOV      [EBP-04],EDX
0167:00470790  LEA      EDX,[EBP-06]
0167:00470793  MOV      EDI,[EBP-04]            <---下D EDI可看到合併後的字串
0167:00470796  XOR      EBX,EBX                 <---EBX=0
0167:00470798  MOV      BL,[EBP-05]             <---取[EBP-05]中的值到EBX中,控制取第幾位值
0167:0047079B  MOV      AL,[EDI+EBX]            <---取合併後字串的第BL位到AL中
0167:0047079E  MOV      BL,[EBP+10]             <---[EBP+10]中為第1個入棧的引數值
0167:004707A1  XOR      AL,[EDI+EBX]            
0167:004707A4  MOV      BL,[EBP+0C]             <---[EBP+0C]中為第2個入棧的引數值
0167:004707A7  MOV      CL,[EDI+EBX]
0167:004707AA  ROL      AL,CL
0167:004707AC  MOV      BL,[EBP+08]             <---[EBP+08]中為第3個入棧的引數值
0167:004707AF  XOR      AL,[EDI+EBX]
0167:004707B2  MOV      [EBP-06],AL             <---結果存入[EBP-06]中
0167:004707B5  MOV      AL,[EDX]
0167:004707B7  POP      ECX
0167:004707B8  POP      ECX
0167:004707B9  POP      EBP
0167:004707BA  RET      0C
我們可大概得出此Call的計算方法,即根據CL值及入口引數確定取合併字串的的第幾位,然後參與運算。
該程式註冊成功後將註冊資訊儲存在登錄檔的
“HKEY_LOCAL_MACHINE/Software/Pegtop/Xfader”中
我得到的為
使用者名稱:ShenGe
註冊碼:99835539

總會有一些簡單的遺憾   簡單的一如從前
總會有一些一些改變     隨著這歲月變遷

相關文章