• 标 题:财智家庭理财V3.30注册算法分析
  • 作 者:txm123
  • 时 间:2003/08/19 03:06pm
  • 链 接:http://bbs.pediy.com

财智家庭理财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

要变成未注册版,先把未注册的主程序备份,删除注册表中的健值后,再把备份重新覆盖,即可变为未注册版!