财智家庭理财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
要变成未注册版,先把未注册的主程序备份,删除注册表中的健值后,再把备份重新覆盖,即可变为未注册版!