財智家庭理財V3.30註冊演算法分析

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

財智家庭理財V3.30註冊演算法分析                
 
軟體名稱:
 財智家庭理財V3.30(內部版本為3.31)
 
軟體簡介:
 財智家庭理財V3.30
財智家庭理財3.30版:本軟體為付費註冊軟體,使用期限為7天。註冊或更換正版後,已輸入資料仍能繼續使用。原下載試用版的使用者需重新
下載本版本才能付費註冊。
此版軟體改進後的主要功能:

聯網賬務:透過網路獲取在銀行或證券機構的交易賬目;
開放式基金管理:記錄開放式基金交易活動,管理和掌握開放式基金餘額和盈虧;

外匯管理:管理和掌握外匯的買賣情況;

圖表分析:自動生成多種統計圖表便於分析統計,完善理財

資訊服務功能,透過網際網路自動提供精選的個性化證券、銀行、保險資訊。

理財助手,日記,事務提醒等工具為工作生活提供方便;

財務計劃,協助安排住房、子女就學等重大支出;

債權債務,管理各種形式私人借款和資金往來;

實物管理,提供固定資產、收藏品等的買賣均價、盈虧、存量估值等;

資金管理,提供存款,信用卡,外幣,保險保單,個人貸款等不同資產針對性管理

證券管理,分帳戶記錄管理投資交易,詳細核算證券交易的盈虧,費用,買賣均價

家庭帳簿,以帳戶為核心分類記錄管理家庭收支,讓日子過得更清楚明白;

下載地址:http://www.moneywise.com.cn/product/moneyhome6.htm

------------------------------------------------------------  
破解作者:
 yzez[DFCG]  
破解工具:
 w32dasm、0llydbg1.09
 
破解目的:
 初學破解,學習演算法!
 
------------------------------------------------------------
 
[破解過程]
 
詳細過程:
1、用FI2.5查殼,無殼,爽!用w32dasm反彙編,查有用資訊:"註冊成功!為防萬一,請抄錄您的註冊碼:",雙擊我們來到
這裡:
:004C933D E85AEDF6FF              call 0043809C
:004C9342 8B45FC                  mov eax, dword ptr [ebp-04]
:004C9345 E80AD7FFFF              call 004C6A54===============>在此CALL設斷!
:004C934A 84C0                    test al, al
:004C934C 746B                    je 004C93B9==================>跳向失敗!
:004C934E A140A86700              mov eax, dword ptr [0067A840]
:004C9353 8B00                    mov eax, dword ptr [eax]
:004C9355 8B55FC                  mov edx, dword ptr [ebp-04]
:004C9358 E86754FFFF              call 004BE7C4
:004C935D 8D8378030000            lea eax, dword ptr [ebx+00000378]
:004C9363 8B55FC                  mov edx, dword ptr [ebp-04]
:004C9366 E839ADF3FF              call 004040A4
:004C936B 8BC3                    mov eax, ebx
:004C936D E82AFCFFFF              call 004C8F9C
:004C9372 C783800300000F270000    mov dword ptr [ebx+00000380], 0000270F
:004C937C 6A00                    push 00000000
:004C937E A140A86700              mov eax, dword ptr [0067A840]
:004C9383 8B00                    mov eax, dword ptr [eax]
:004C9385 8B4858                  mov ecx, dword ptr [eax+58]
:004C9388 8D45F8                  lea eax, dword ptr [ebp-08]

* Possible StringData Ref from Code Obj ->"註冊成功!為防萬一,請抄錄您的註冊碼:"
                                 |
:004C938B BA14944C00              mov edx, 004C9414======>雙擊來到這裡,往上找跳轉!
2、用0llydbg動態除錯,設斷在::004C9345 E80AD7FFFF   call 004C6A54,以下是程式程式碼:
004C92E8   .  73 74 61 72 7>ASCII   "start mailto:sal"
004C92F8   .  65 73 40 6D 6>ASCII   "es@moneywise.com"
004C9308   .  2E 63 6E 00   ASCII   ".cn",0
004C930C  /.  55            PUSH    EBP
004C930D  |.  8BEC          MOV     EBP, ESP
004C930F  |.  6A 00         PUSH    0
004C9311  |.  6A 00         PUSH    0
004C9313  |.  53            PUSH    EBX
004C9314  |.  8BD8          MOV     EBX, EAX
004C9316  |.  33C0          XOR     EAX, EAX
004C9318  |.  55            PUSH    EBP
004C9319  |.  68 FE934C00   PUSH    MoneyHom.004C93FE
004C931E  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004C9321  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004C9324  |.  8B83 4C030000 MOV     EAX, DWORD PTR DS:[EBX+34C]
004C932A  |.  8078 47 00    CMP     BYTE PTR DS:[EAX+47], 0
004C932E  |.  0F84 AF000000 JE      MoneyHom.004C93E3
004C9334  |.  8D55 FC       LEA     EDX, [LOCAL.1]
004C9337  |.  8B83 40030000 MOV     EAX, DWORD PTR DS:[EBX+340]
004C933D  |.  E8 5AEDF6FF   CALL    MoneyHom.0043809C
004C9342  |.  8B45 FC       MOV     EAX, [LOCAL.1]
004C9345  |.  E8 0AD7FFFF   CALL    MoneyHom.004C6A54----在此CALL設定斷點,此CALL按F7追進!
004C934A  |.  84C0          TEST    AL, AL----測試AL的值,如果註冊碼正確,則AL賦值1,註冊碼不對,則AL賦值為0
004C934C  |.  74 6B         JE      SHORT MoneyHom.004C93B9-------此處不能跳,跳就要跟你說bye-bye!
004C934E  |.  A1 40A86700   MOV     EAX, DWORD PTR DS:[67A840]
004C9353  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004C9355  |.  8B55 FC       MOV     EDX, [LOCAL.1]
004C9358  |.  E8 6754FFFF   CALL    MoneyHom.004BE7C4
004C935D  |.  8D83 78030000 LEA     EAX, DWORD PTR DS:[EBX+378]
004C9363  |.  8B55 FC       MOV     EDX, [LOCAL.1]
004C9366  |.  E8 39ADF3FF   CALL    MoneyHom.004040A4
004C936B  |.  8BC3          MOV     EAX, EBX
004C936D  |.  E8 2AFCFFFF   CALL    MoneyHom.004C8F9C
004C9372  |.  C783 80030000>MOV     DWORD PTR DS:[EBX+380], 270F
004C937C  |.  6A 00         PUSH    0
004C937E  |.  A1 40A86700   MOV     EAX, DWORD PTR DS:[67A840]
004C9383  |.  8B00          MOV     EAX, DWORD PTR DS:[EAX]
004C9385  |.  8B48 58       MOV     ECX, DWORD PTR DS:[EAX+58]
004C9388  |.  8D45 F8       LEA     EAX, [LOCAL.2]
004C938B  |.  BA 14944C00   MOV     EDX, MoneyHom.004C9414
004C9390  |.  E8 97AFF3FF   CALL    MoneyHom.0040432C

--------------------------------------------------------------------------------------
追進004C9345  |.  E8 0AD7FFFF   CALL    MoneyHom.004C6A54來到這裡:
-----------------------------------------------------------------------------------------
004C6A54  /$  55            PUSH    EBP------------此CALL的入口!
004C6A55  |.  8BEC          MOV     EBP, ESP
004C6A57  |.  6A 00         PUSH    0
004C6A59  |.  6A 00         PUSH    0
004C6A5B  |.  6A 00         PUSH    0
004C6A5D  |.  53            PUSH    EBX
004C6A5E  |.  8945 FC       MOV     [LOCAL.1], EAX------->移入輸入的假碼:1234-5678
004C6A61  |.  8B45 FC       MOV     EAX, [LOCAL.1]------->假碼送入EAX!
004C6A64  |.  E8 2BDAF3FF   CALL    MoneyHom.00404494
004C6A69  |.  33C0          XOR     EAX, EAX------------->EAX清零!
004C6A6B  |.  55            PUSH    EBP
004C6A6C  |.  68 C96A4C00   PUSH    MoneyHom.004C6AC9
004C6A71  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004C6A74  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004C6A77  |.  8D45 F4       LEA     EAX, [LOCAL.3]--------->機器碼入EAX,我的機器碼是:9226-9973
004C6A7A  |.  E8 31FFFFFF   CALL    MoneyHom.004C69B0------>此ACLL要跟進,因為它已經把機器碼移進,進行處理!演算法CALL(1)跟進!
004C6A7F  |.  8B45 F4       MOV     EAX, [LOCAL.3]
004C6A82  |.  8D55 F8       LEA     EDX, [LOCAL.2]
004C6A85  |.  E8 46FFFFFF   CALL    MoneyHom.004C69D0
004C6A8A  |.  8B45 F8       MOV     EAX, [LOCAL.2]--------->假碼入EAX!
004C6A8D  |.  E8 FAFCFFFF   CALL    MoneyHom.004C678C
004C6A92  |.  8BD8          MOV     EBX, EAX
004C6A94  |.  8B45 FC       MOV     EAX, [LOCAL.1]--------->假碼入EAX!
004C6A97  |.  E8 F0FCFFFF   CALL    MoneyHom.004C678C------->對假碼的處理,有興趣跟吧!好象意義不大!
004C6A9C  |.  85C0          TEST    EAX, EAX--------------->測試什麼?
004C6A9E  |.  75 04         JNZ     SHORT MoneyHom.004C6AA4----->不相等跳!,一定要跳,TNT炸點(1)!
004C6AA0  |.  33DB          XOR     EBX, EBX
004C6AA2  |.  EB 0A         JMP     SHORT MoneyHom.004C6AAE
004C6AA4  |>  3BC3          CMP     EAX, EBX------------------>比較EAX和EBX的值!
004C6AA6  |.  75 04         JNZ     SHORT MoneyHom.004C6AAC--->不相等就跳,不能跳跳就玩完!TNT炸點(2)
004C6AA8  |.  B3 01         MOV     BL, 1
004C6AAA  |.  EB 02         JMP     SHORT MoneyHom.004C6AAE
004C6AAC  |>  33DB          XOR     EBX, EBX
004C6AAE  |>  33C0          XOR     EAX, EAX
004C6AB0  |.  5A            POP     EDX                              ;  MoneyHom.004C934A
004C6AB1  |.  59            POP     ECX                              ;  MoneyHom.004C934A
004C6AB2  |.  59            POP     ECX                              ;  MoneyHom.004C934A
004C6AB3  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004C6AB6  |.  68 D06A4C00   PUSH    MoneyHom.004C6AD0
004C6ABB  |>  8D45 F4       LEA     EAX, [LOCAL.3]
004C6ABE  |.  BA 03000000   MOV     EDX, 3
004C6AC3  |.  E8 ACD5F3FF   CALL    MoneyHom.00404074
---------------------------------------------------------------------------------
跟進演算法ACLL(1),來到這裡:
---------------------------------------------------------------------------------
004C69D0  /$  55            PUSH    EBP----------->來到這裡!F8往下!
004C69D1  |.  8BEC          MOV     EBP, ESP
004C69D3  |.  83C4 F4       ADD     ESP, -0C
004C69D6  |.  53            PUSH    EBX
004C69D7  |.  56            PUSH    ESI
004C69D8  |.  8BF2          MOV     ESI, EDX
004C69DA  |.  8945 FC       MOV     [LOCAL.1], EAX
004C69DD  |.  8B45 FC       MOV     EAX, [LOCAL.1]
004C69E0  |.  E8 AFDAF3FF   CALL    MoneyHom.00404494
004C69E5  |.  33C0          XOR     EAX, EAX
004C69E7  |.  55            PUSH    EBP
004C69E8  |.  68 476A4C00   PUSH    MoneyHom.004C6A47
004C69ED  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004C69F0  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004C69F3  |.  8B45 FC       MOV     EAX, [LOCAL.1]
004C69F6  |.  E8 91FDFFFF   CALL    MoneyHom.004C678C---->此CALL對機器碼運算,要了解它是如何處理的,可以跟進,程式碼我放在下面!
004C69FB  |.  8BD8          MOV     EBX, EAX=============>前6位機器碼反轉的十六進位制值移入EBX,EBX=F3385
004C69FD  |.  85DB          TEST    EBX, EBX
004C69FF  |.  75 09         JNZ     SHORT MoneyHom.004C6A0A===>這裡跳,跳到下面!
004C6A01  |.  8BC6          MOV     EAX, ESI
004C6A03  |.  E8 48D6F3FF   CALL    MoneyHom.00404050
004C6A08  |.  EB 27         JMP     SHORT MoneyHom.004C6A31
004C6A0A  |>  2B1D B07A6700 SUB     EBX, DWORD PTR DS:[677AB0]==>從上面跳來![677AB0]存放的是常數:
================================================================>034B263C,所以EBX=F3385-034B263C=FCC40D49
004C6A10  |.  895D F4       MOV     [LOCAL.3], EBX
004C6A13  |.  33C0          XOR     EAX, EAX===================>EAX清零!
004C6A15  |.  8945 F8       MOV     [LOCAL.2], EAX
004C6A18  |.  DF6D F4       FILD    QWORD PTR SS:[EBP-C]===>浮點數除,SS存放的是:00000000FCC40D49
================================================>運算結果是:4240706889.0000000000存入ST當中!實際上就是除1
004C6A1B  |.  DC0D B47A6700 FMUL    QWORD PTR DS:[677AB4]===>浮點數乘,DS:[677AB4]存放的是常數:
====================>0.9498864000000000,ST=4240706889.0000000000*0.9498864000000000=4028189800.2474096830
004C6A21  |.  E8 FAC2F3FF   CALL    MoneyHom.00402D20==============>此CALL對上述運算出的浮點值處理!
=======================>保留浮點值的整數位,並轉化成十六進位制形式,4028189800,十六進位制值是:F0194C68
004C6A26  |.  8BD8          MOV     EBX, EAX
004C6A28  |.  8BD6          MOV     EDX, ESI
004C6A2A  |.  8BC3          MOV     EAX, EBX
004C6A2C  |.  E8 67FCFFFF   CALL    MoneyHom.004C6698======>演算法CALL(2)一定要跟進!
---------------------------------------------------------------------------------------------
演算法CALL(2)跟進!來到這裡,下面是程式碼:
---------------------------------------------------------------------------------------------
004C6698  /$  55            PUSH    EBP
004C6699  |.  8BEC          MOV     EBP, ESP
004C669B  |.  33C9          XOR     ECX, ECX
004C669D  |.  51            PUSH    ECX
004C669E  |.  51            PUSH    ECX
004C669F  |.  51            PUSH    ECX
004C66A0  |.  51            PUSH    ECX
004C66A1  |.  51            PUSH    ECX
004C66A2  |.  53            PUSH    EBX
004C66A3  |.  56            PUSH    ESI
004C66A4  |.  57            PUSH    EDI
004C66A5  |.  8955 F8       MOV     [LOCAL.2], EDX
004C66A8  |.  8945 FC       MOV     [LOCAL.1], EAX
004C66AB  |.  33C0          XOR     EAX, EAX
004C66AD  |.  55            PUSH    EBP
004C66AE  |.  68 70674C00   PUSH    MoneyHom.004C6770
004C66B3  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004C66B6  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004C66B9  |.  8D45 F4       LEA     EAX, [LOCAL.3]
004C66BC  |.  E8 8FD9F3FF   CALL    MoneyHom.00404050
004C66C1  |.  33FF          XOR     EDI, EDI=============>EDI清零!
004C66C3  |.  BB 06000000   MOV     EBX, 6========>6入EBX,控制迴圈次數!
004C66C8  |>  8B45 FC       /MOV     EAX, [LOCAL.1]
004C66CB  |.  B9 0A000000   |MOV     ECX, 0A0A====>0A移入ECX!
004C66D0  |.  33D2          |XOR     EDX, EDX=====>EDX清零!
004C66D2  |.  F7F1          |DIV     ECX===>EAX=EAX/0A=F0194C68/A=180287A4,商放EAX,餘數放EDX!
004C66D4  |.  8BF2          |MOV     ESI, EDX===========>餘數移入ESI!
004C66D6  |.  03FE          |ADD     EDI, ESI===========>EDI=EDI+ESI
004C66D8  |.  8D45 F0       |LEA     EAX, [LOCAL.4]
004C66DB  |.  8D56 30       |LEA     EDX, DWORD PTR DS:[ESI+30]
004C66DE  |.  E8 15DBF3FF   |CALL    MoneyHom.004041F8
004C66E3  |.  8B55 F0       |MOV     EDX, [LOCAL.4]
004C66E6  |.  8D45 F4       |LEA     EAX, [LOCAL.3]
004C66E9  |.  E8 FADBF3FF   |CALL    MoneyHom.004042E8
004C66EE  |.  8B45 FC       |MOV     EAX, [LOCAL.1]
004C66F1  |.  B9 0A000000   |MOV     ECX, 0A
004C66F6  |.  33D2          |XOR     EDX, EDX
004C66F8  |.  F7F1          |DIV     ECX===EAX=EAX/0A=F0194C68/A=180287A4
004C66FA  |.  8945 FC       |MOV     [LOCAL.1], EAX
004C66FD  |.  4B            |DEC     EBX
004C66FE  |.^ 75 C8         \JNZ     SHORT MoneyHom.004C66C8====這裡迴圈6次,每次迴圈把上一次的結果除以A,
====================================================這裡計算前六位註冊碼!除的餘數計算前六位註冊碼,迴圈六次,相
====================================================當於除1000000,所以最後是:4028.189800,前六位註冊碼是它的餘數
====================================================取反,即189800取反是:008981
004C6700  |.  BB 02000000   MOV     EBX, 2======================2入EBX,控制迴圈次數!
004C6705  |>  8BC7          /MOV     EAX, EDI=======EDI的值是:1A,這個值是怎樣得到的?就是上述餘數逐位相加,
==========================================>注意它的每一位是十六進位制,它是處理後兩位註冊碼,即處理1A,1A的十進位制是26
004C6707  |.  B9 0A000000   |MOV     ECX, 0A====>0A移入ECX
004C670C  |.  33D2          |XOR     EDX, EDX
004C670E  |.  F7F1          |DIV     ECX========>EAX=EAX/A=1A/A=2
004C6710  |.  8BF2          |MOV     ESI, EDX
004C6712  |.  8D45 EC       |LEA     EAX, [LOCAL.5]
004C6715  |.  8D56 30       |LEA     EDX, DWORD PTR DS:[ESI+30]
004C6718  |.  E8 DBDAF3FF   |CALL    MoneyHom.004041F8
004C671D  |.  8B55 EC       |MOV     EDX, [LOCAL.5]
004C6720  |.  8D45 F4       |LEA     EAX, [LOCAL.3]
004C6723  |.  E8 C0DBF3FF   |CALL    MoneyHom.004042E8
004C6728  |.  8BC7          |MOV     EAX, EDI
004C672A  |.  B9 0A000000   |MOV     ECX, 0A====>0A移入ECX
004C672F  |.  33D2          |XOR     EDX, EDX
004C6731  |.  F7F1          |DIV     ECX====>EAX=EAX/0A=1A/A=2
004C6733  |.  8BF8          |MOV     EDI, EAX
004C6735  |.  4B            |DEC     EBX
004C6736  |.^ 75 CD         \JNZ     SHORT MoneyHom.004C6705====>這裡迴圈2次,最後結果:EAX=0,得到後兩位註冊
================================================================>碼,即把1A的十進位制值反過來,得到62
004C6738  |.  8D55 F4       LEA     EDX, [LOCAL.3]
004C673B  |.  B9 05000000   MOV     ECX, 5
004C6740  |.  B8 88674C00   MOV     EAX, MoneyHom.004C6788
004C6745  |.  E8 26DEF3FF   CALL    MoneyHom.00404570==========>此CALL把上面得到的註冊碼00898162進行處理,使
===============================================================>之變成和機器碼一樣的形式,即:0089-8162
004C674A  |.  8B45 F8       MOV     EAX, [LOCAL.2]
004C674D  |.  8B55 F4       MOV     EDX, [LOCAL.3]
004C6750  |.  E8 4FD9F3FF   CALL    MoneyHom.004040A4
004C6755  |.  33C0          XOR     EAX, EAX
004C6757  |.  5A            POP     EDX                              ;  MoneyHom.004C6A31
004C6758  |.  59            POP     ECX                              ;  MoneyHom.004C6A31
004C6759  |.  59            POP     ECX                              ;  MoneyHom.004C6A31
004C675A  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004C675D  |.  68 77674C00   PUSH    MoneyHom.004C6777
004C6762  |>  8D45 EC       LEA     EAX, [LOCAL.5]
004C6765  |.  BA 03000000   MOV     EDX, 3
004C676A  |.  E8 05D9F3FF   CALL    MoneyHom.00404074

---------------------------------------------------------------------------------上面的CALL結束,省略了一部分程式碼!
004C6A31  |>  33C0          XOR     EAX, EAX
004C6A33  |.  5A            POP     EDX                              ;  MoneyHom.004C6A8A
004C6A34  |.  59            POP     ECX                              ;  MoneyHom.004C6A8A
004C6A35  |.  59            POP     ECX                              ;  MoneyHom.004C6A8A
004C6A36  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004C6A39  |.  68 4E6A4C00   PUSH    MoneyHom.004C6A4E
004C6A3E  |>  8D45 FC       LEA     EAX, [LOCAL.1]
004C6A41  |.  E8 0AD6F3FF   CALL    MoneyHom.00404050
---------------------------------------------------------------------------------------
004C69F6  |.  E8 91FDFFFF   CALL    MoneyHom.004C678C這個CALL的程式碼如下,主要是瞭解對機器碼的處理:
---------------------------------------------------------------------------------------
004C678C  /$  55            PUSH    EBP
004C678D  |.  8BEC          MOV     EBP, ESP
004C678F  |.  83C4 F8       ADD     ESP, -8
004C6792  |.  53            PUSH    EBX
004C6793  |.  56            PUSH    ESI
004C6794  |.  33D2          XOR     EDX, EDX
004C6796  |.  8955 F8       MOV     [LOCAL.2], EDX
004C6799  |.  8945 FC       MOV     [LOCAL.1], EAX
004C679C  |.  8B45 FC       MOV     EAX, [LOCAL.1]
004C679F  |.  E8 F0DCF3FF   CALL    MoneyHom.00404494
004C67A4  |.  33C0          XOR     EAX, EAX
004C67A6  |.  55            PUSH    EBP
004C67A7  |.  68 66684C00   PUSH    MoneyHom.004C6866
004C67AC  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004C67AF  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004C67B2  |.  8B55 FC       MOV     EDX, [LOCAL.1]
004C67B5  |.  B8 80684C00   MOV     EAX, MoneyHom.004C6880
004C67BA  |.  E8 0DDEF3FF   CALL    MoneyHom.004045CC
004C67BF  |.  85C0          TEST    EAX, EAX
004C67C1  |.  76 1F         JBE     SHORT MoneyHom.004C67E2
004C67C3  |>  8D55 FC       /LEA     EDX, [LOCAL.1]
004C67C6  |.  B9 01000000   |MOV     ECX, 1
004C67CB  |.  92            |XCHG    EAX, EDX
004C67CC  |.  E8 57DDF3FF   |CALL    MoneyHom.00404528======>此CALL幹什麼?把機器碼中間的"-"去掉,變成聯在一起的8位數!
004C67D1  |.  8B55 FC       |MOV     EDX, [LOCAL.1]=========>處理後的機器碼入EDX,即EDX的值為92269973!
004C67D4  |.  B8 80684C00   |MOV     EAX, MoneyHom.004C6880
004C67D9  |.  E8 EEDDF3FF   |CALL    MoneyHom.004045CC
004C67DE  |.  85C0          |TEST    EAX, EAX
004C67E0  |.^ 77 E1         \JA      SHORT MoneyHom.004C67C3
004C67E2  |>  8B45 FC       MOV     EAX, [LOCAL.1]
004C67E5  |.  E8 F6DAF3FF   CALL    MoneyHom.004042E0
004C67EA  |.  83F8 08       CMP     EAX, 8=================>比較是否是8位!
004C67ED  |.  74 04         JE      SHORT MoneyHom.004C67F3====>相等就跳,這裡當然會跳,因為處理過後的機器碼就是8位!
004C67EF  |.  33DB          XOR     EBX, EBX
004C67F1  |.  EB 58         JMP     SHORT MoneyHom.004C684B
004C67F3  |>  8D55 F8       LEA     EDX, [LOCAL.2]=============>跳到此處![LOCAL.2]存放經過處理後的8位機器碼!
004C67F6  |.  8B45 FC       MOV     EAX, [LOCAL.1]
004C67F9  |.  E8 BA36F4FF   CALL    MoneyHom.00409EB8
004C67FE  |.  33C9          XOR     ECX, ECX
004C6800  |.  33F6          XOR     ESI, ESI
004C6802  |.  B8 06000000   MOV     EAX, 6=====================>把6送入EAX,即是說取6位機器碼運算!
004C6807  |>  8B55 F8       /MOV     EDX, [LOCAL.2]============>機器碼放入EDX!
004C680A  |.  0FB65402 FF   |MOVZX   EDX, BYTE PTR DS:[EDX+EAX-1]
004C680F  |.  83EA 30       |SUB     EDX, 30
004C6812  |.  03F2          |ADD     ESI, EDX
004C6814  |.  03C9          |ADD     ECX, ECX
004C6816  |.  8D0C89        |LEA     ECX, DWORD PTR DS:[ECX+ECX*4]
004C6819  |.  03D1          |ADD     EDX, ECX
004C681B  |.  8BCA          |MOV     ECX, EDX
004C681D  |.  48            |DEC     EAX
004C681E  |.  85C0          |TEST    EAX, EAX
004C6820  |.^ 75 E5         \JNZ     SHORT MoneyHom.004C6807===>這裡是6次迴圈!對前6位機器碼處理!如何處理?取前6位機器碼,
======================================>把它反過來,即前6位機器碼是:922699,反過來是:996229,然後把它轉化為十六進位制數值,就
======================================>是:F3385,然後把它放入EDX和ECX當中!
004C6822  |.  33D2          XOR     EDX, EDX
004C6824  |.  B8 08000000   MOV     EAX, 8
004C6829  |>  03D2          /ADD     EDX, EDX
004C682B  |.  8D1492        |LEA     EDX, DWORD PTR DS:[EDX+EDX*4]
004C682E  |.  8B5D F8       |MOV     EBX, [LOCAL.2]                  ;  MoneyHom.004C69CA
004C6831  |.  0FB65C03 FF   |MOVZX   EBX, BYTE PTR DS:[EBX+EAX-1]
004C6836  |.  83EB 30       |SUB     EBX, 30
004C6839  |.  03D3          |ADD     EDX, EBX
004C683B  |.  48            |DEC     EAX
004C683C  |.  83F8 06       |CMP     EAX, 6
004C683F  |.^ 75 E8         \JNZ     SHORT MoneyHom.004C6829======>這裡又是兩次迴圈,對最後兩位機器碼處理,同上!即73反過來
======================================>是37,轉化為十六進位制值是:25,放入EDX中!然後我們回到演算法CALL(1)當中去看!看上面!
004C6841  |.  3BF2          CMP     ESI, EDX
004C6843  |.  74 04         JE      SHORT MoneyHom.004C6849
004C6845  |.  33DB          XOR     EBX, EBX
004C6847  |.  EB 02         JMP     SHORT MoneyHom.004C684B
004C6849  |>  8BD9          MOV     EBX, ECX
004C684B  |>  33C0          XOR     EAX, EAX
004C684D  |.  5A            POP     EDX                              ;  MoneyHom.004C69FB
004C684E  |.  59            POP     ECX                              ;  MoneyHom.004C69FB
004C684F  |.  59            POP     ECX                              ;  MoneyHom.004C69FB
004C6850  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004C6853  |.  68 6D684C00   PUSH    MoneyHom.004C686D
004C6858  |>  8D45 F8       LEA     EAX, [LOCAL.2]
004C685B  |.  BA 02000000   MOV     EDX, 2
004C6860  |.  E8 0FD8F3FF   CALL    MoneyHom.00404074
演算法基本搞清楚,下面進行總結:
1、機器碼的形式是:XXXX-YYYY,把中間的“-”去掉,連線成8位數,即:XXXXYYYY,只取前六位機器碼計算註冊碼,後兩位不參與。前6位
機器碼取反,轉換成十六進位制形式,減去常數:034B263C,得一十六進位制值,此值除1,再乘常數:0.9498864000000000,取整數,再除
1000000,取餘數,再取反得到前6位註冊碼,後兩位註冊碼是餘數逐位相加(注意餘數被視作是十六進位制值),然後轉化成十進位制值,取反
後,即為後兩位註冊碼,連線起來,四位一組,中間加“-”即為註冊碼!
計算公式如下:設機器碼的前6位取反後轉換成十六進值為A,前6位註冊碼是SN(1),後兩位註冊碼是sn(2),設六位餘數是:abcdef,餘數
逐位相加後轉化成十進位制的值為gh
SN(1)=[(A-034B263C)/1*0.9498864000000000]/1000000整除後餘數取反=fedcba
sn(2)=a+b+c+d+e+f 的十六進值轉化成十進值=gh取反=hg,註冊碼的形式是:fedc-bahg
2、例證:我的機器碼是:9226-9973,即:92269973,取前6位是:922699,取反是:996229,轉成十六進值是:F3385,
[(A-034B263C)/1*0.9498864000000000]/1000000=[(F3385-34B263C)/1*0.9498864000000000]/1000000=4028.189800,
sn(1)=008981.
1+8+9+8+0+0=1A(26)取反即為62,所以sn(2)=62,我的註冊碼是:0089-8162
註冊資訊存放在:HKEY_LOCAL_MACHINE\SOFTWARE\Moneywise\MoneyHome\RegisterCode

要變成未註冊版,先把未註冊的主程式備份,刪除登錄檔中的健值後,再把備份重新覆蓋,即可變為未註冊版!


相關文章