演算法分析: <獻給初學者> 之一 (4千字)

看雪資料發表於2002-06-06

演算法分析:  <獻給初學者> 之一

◆ 作  者 ◆ goodbao[P.J.CHINA]

◆軟體名稱◆
  圖示更換器(ExeIco)1.63 版。下載地址:   
http://www.softreg.com/download.asp?id={CD05D77E-E9F5-4445-9350-E2FFC8B4F89A}

◆破解難度◆
  較難。對於初學者來說,這個是非明碼的,而且其演算法比較煩瑣,可能會覺得挺難。

◆破解簡述◆
  此軟體其實與我以前的教程頗有類似之處,只是,可能大家還不習慣於F5的用法,因此破解起來難度挺大,分析演算法時也可能會被繞得頭暈腦脹。事實上,大家完全可以照搬我以前教程中的破解方法,一是巧用活用F5,二是妙用“r fl z”這個偷天換日大法,必可建得奇功!關於F5的使用方法及含義,這裡不再贅述,請參照相關的教程,動手跟做練習就可以了。關於動態自動註冊及爆破,我們也不在這裡討論,都非常簡單。這裡只將其演算法的主要部分敘述如下。
   
◆演算法分析◆

0167:00403DF2 C605F0D3450001  MOV      BYTE [0045D3F0],01
0167:00403DF9 33C9            XOR      ECX,ECX------------>ECX清零
0167:00403DFB 8D7D80          LEA    EDI,[EBP-80]---------------------------------->
將字串‘1z1h+2a0-'0g8y*9a1n|’(此為定值)送EDI暫存器,後面計算用到,設為M。計算過程中,‘+’、‘-’、‘*’及‘|’不參與運算。
0167:00403DFE BE94474600      MOV      ESI,00464794------->機器碼送ESI暫存器
0167:00403E03 8D5D98          LEA      EBX,[EBP-68]
0167:00403E06 8D4101          LEA      EAX,[ECX+01]------->EAX計數器,迴圈開始▲▲
0167:00403E09 51              PUSH    ECX
0167:00403E0A B905000000      MOV      ECX,05------------->ECX=$05。0167:00403E0F 99              CDQ------------------------->雙位擴充套件,即EDX清零   
0167:00403E10 F7F9            IDIV    ECX---------------->EAX MOD ECX=EDX
0167:00403E12 59              POP      ECX
0167:00403E13 85D2            TEST    EDX,EDX------------>判斷餘數是否為0
0167:00403E15 7440            JZ      00403E57----------->為0則直接跳到後面並返回開始處重新迴圈計算過程
0167:00403E17 8A06            MOV      AL,[ESI]------>AL=依次取去掉‘-’後的機器碼$
0167:00403E19 3207            XOR      AL,[EDI]------>AL=機器碼$ XOR 依次取M的$ ,結果設為M1
0167:00403E1B 0FBED0          MOVSX    EDX,AL ------->EDX=M1
0167:00403E1E 8955B4          MOV      [EBP-4C],EDX-->[EBP-4C]=M1
0167:00403E21 8B45B4          MOV      EAX,[EBP-4C]-->EAX=M1
0167:00403E24 51              PUSH    ECX
0167:00403E25 99              CDQ      -------------->EDX清零
0167:00403E26 33C2            XOR      EAX,EDX------->EAX MOR EDX=EAX=M1
0167:00403E28 B91A000000      MOV      ECX,1A-------->ECX=$1A
0167:00403E2D 2BC2            SUB      EAX,EDX------->EAX=M1-EDX=M1
0167:00403E2F 8BD0            MOV      EDX,EAX------->EDX=EAX=M1
0167:00403E31 C1E005          SHL      EAX,05-------->EAX=M1 * 2^5 0167:00403E34 2BC2            SUB      EAX,EDX------->EAX=M2-M1  設為M3
0167:00403E36 8D0482          LEA      EAX,[EDX+EAX*4]-->EAX=M3*4+M1  設為M4
0167:00403E39 C1E005          SHL      EAX,05----------->EAX=M4 * 2^5  設為M5
0167:00403E3C 03C2            ADD      EAX,EDX---------->EAX=M5+M1  設為M6
0167:00403E3E 03C0            ADD      EAX,EAX---------->EAX=EAX+EAX=EAX*2  設為M7
0167:00403E40 99              CDQ      ----------------->EDX清零
0167:00403E41 F7F9            IDIV    ECX----------->EDX=M7 MOD ECX=M7 MOD $1A  設為M8。
0167:00403E43 0FBE03          MOVSX    EAX,BYTE [EBX]--->依次取輸入的註冊碼$
0167:00403E46 83C241          ADD      EDX,BYTE


分享到:
演算法分析: <獻給初學者> 
之一 (4千字)
演算法分析: <獻給初學者> 
之一 (4千字)
演算法分析: <獻給初學者> 
之一 (4千字)
演算法分析: <獻給初學者> 
之一 (4千字)
最新評論 (0)
登入後即可評論
上一篇:演算法分析: <獻給初學者> 之四 (9千字)

相關文章