演算法分析: <獻給初學者> 之一
◆ 作 者 ◆ 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