您的位置:首页精文荟萃破解文章 → 易吉八字算命3.2 简体中文版算法分析

易吉八字算命3.2 简体中文版算法分析

时间:2004/10/15 0:56:00来源:本站整理作者:蓝点我要评论(0)

 软件版本:3.2 简体中文版
软件下载: http://www.softreg.com.cn
http://www.bazi-soft.com
运行环境:Win95/98/Me/NT/2000/XP

一、软件简介 v3.2

★易吉八字算命软件是一款专业的排八字软件,可排出八字、命宫、胎元、大运、小运、日主强弱、用神、四柱及流年神煞、流年属性(包括岁运并临、与四柱冲合、神煞等信息),还有批近十年及近十二个月的运气等。点击批命示例可以看到本软件排出的八字样本。
★独一无二的采用天文时间(视太阳黄经时)计算出生时间,确保排出八字的准确性。
★输出的八字命状格式可任意修改,具体修改方法见帮助文件,其中已有十种格式可供选择,软件主页提供命状下载。
★收集了十多万字的八字知识。
★可查询全国2300多个城市的经纬度。
★软件注册费人民币100元(海外注册费US30或HK238或NT988)。

二、破解过程

1、安装完软件后试用,点“帮助”-->“输入注册码”进行注册,注册错误后一点提示都没有。下断点Bpx hmemcpy,不能中断,改下bpx SendMessage,正常中断后进行跟踪分析,用F8、F10、F12不断跟踪,没有结果,始终找不到关键点。此法不行,另想它法。
2、即然注册错误不显示提示框,注册正确应该显示吧。按此思路应先脱壳。用FI2.49分析为UPX1.22的壳,用PE-SCAN 3.31分析,得出OEP为422674h。用UPX 1.24w版正常脱去此壳,再用W32dsm89反汇编脱壳文件,点“字符串参考”,中文字串不显示。用UltraEdit打开,查找“注册成功”字符串,找到后改为“33333333”。再用W32dsm89反汇编脱壳文件,点“字符串参考”,找到“33333333”处双击,来到下面:
----------------------------------------------------
:00404F8F 90 nop
:00404F90 6AFF push FFFFFFFF
:00404F92 68B0DE4400 push 0044DEB0
:00404F97 64A100000000 mov eax, dword ptr fs:[00000000]
:00404F9D 50 push eax
:00404F9E 64892500000000 mov dword ptr fs:[00000000], esp
:00404FA5 83EC0C sub esp, 0000000C
:00404FA8 55 push ebp
:00404FA9 56 push esi
:00404FAA 8BF1 mov esi, ecx
:00404FAC 57 push edi
:00404FAD 8D4C240C lea ecx, dword ptr [esp+0C]
:00404FB1 E89A0E0100 call 00415E50
:00404FB6 8BCE mov ecx, esi
:00404FB8 C744242000000000 mov [esp+20], 00000000
:00404FC0 E874100300 call 00436039
:00404FC5 6A01 push 00000001
:00404FC7 8BCE mov ecx, esi
:00404FC9 E8A8EC0200 call 00433C76
:00404FCE 51 push ecx
:00404FCF 8D7E60 lea edi, dword ptr [esi+60]
:00404FD2 8BCC mov ecx, esp
:00404FD4 89642414 mov dword ptr [esp+14], esp
:00404FD8 57 push edi
:00404FD9 E8DCFF0200 call 00434FBA
:00404FDE 8D4C2410 lea ecx, dword ptr [esp+10]
:00404FE2 E8E9120100 call 004162D0 <--- 关键Call,在此计算注册码运算结果
:00404FE7 8D4C240C lea ecx, dword ptr [esp+0C]
:00404FEB 8BE8 mov ebp, eax <--- 关键Call,在此进行机器码运算
:00404FED E87E100100 call 00416070
:00404FF2 8D0440 lea eax, dword ptr [eax+2*eax]
:00404FF5 8D04C0 lea eax, dword ptr [eax+8*eax]
:00404FF8 3BE8 cmp ebp, eax
:00404FFA 753E jne 0040503A <--- 关键点,在此处进行机器码运算结果与注册码运算结果的比较!
:00404FFC 51 push ecx
:00404FFD 8BCC mov ecx, esp
:00404FFF 89642414 mov dword ptr [esp+14], esp
:00405003 57 push edi
:00405004 E8B1FF0200 call 00434FBA
:00405009 51 push ecx
:0040500A 83C664 add esi, 00000064
:0040500D 8BCC mov ecx, esp
:0040500F 8964241C mov dword ptr [esp+1C], esp
:00405013 56 push esi
:00405014 C644242C01 mov [esp+2C], 01
:00405019 E89CFF0200 call 00434FBA
:0040501E 8D4C2414 lea ecx, dword ptr [esp+14]
:00405022 C644242800 mov [esp+28], 00
:00405027 E8640E0100 call 00415E90
:0040502C 6A00 push 00000000
:0040502E 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"33333333333333" <---- 注册成功处
|
:00405030 6824BE4B00 push 004BBE24
:00405035 E85B830300 call 0043D395
----------------------------------------------------

3、用SoftIce加载程序,在404fd9h处设断,运行程序后,点“帮助”-->“输入注册码”-->“注册”,程序中断,中断后按F8进入这个Call,来到下面:
----------------------------------------------------
0167:004162CF NOP
0167:004162D0 SUB ESP,00000190
0167:004162D6 PUSH ESI
0167:004162D7 PUSH EDI
0167:004162D8 MOV DWORD PTR [ESP+08],0000001C <--- 索引表第一项
0167:004162E0 MOV DWORD PTR [ESP+0C],00000054 .
0167:004162E8 MOV DWORD PTR [ESP+10],00000051 .
0167:004162F0 MOV DWORD PTR [ESP+14],00000029 .
0167:004162F8 MOV DWORD PTR [ESP+18],00000048 .
0167:00416300 MOV DWORD PTR [ESP+1C],00000023 .
0167:00416308 MOV DWORD PTR [ESP+20],00000056 .
0167:00416310 MOV DWORD PTR [ESP+24],00000017 .
0167:00416318 MOV DWORD PTR [ESP+28],0000005C .
0167:00416320 MOV DWORD PTR [ESP+2C],0000003C .
0167:00416328 MOV DWORD PTR [ESP+30],0000000D .
0167:00416330 MOV DWORD PTR [ESP+34],00000013 .
0167:00416338 MOV DWORD PTR [ESP+38],0000005B .
0167:00416340 MOV DWORD PTR [ESP+3C],00000001 .
0167:00416348 MOV DWORD PTR [ESP+40],00000039 .
0167:00416350 MOV DWORD PTR [ESP+44],00000058 .
0167:00416358 MOV DWORD PTR [ESP+48],00000052 .
0167:00416360 MOV DWORD PTR [ESP+4C],0000002E .
0167:00416368 MOV DWORD PTR [ESP+50],00000011 .
0167:00416370 MOV DWORD PTR [ESP+54],00000042 .
0167:00416378 MOV DWORD PTR [ESP+58],0000004D .
0167:00416380 MOV DWORD PTR [ESP+5C],00000032 .
0167:00416388 MOV DWORD PTR [ESP+60],00000006 .
0167:00416390 MOV DWORD PTR [ESP+64],00000009 .
0167:00416398 MOV DWORD PTR [ESP+68],00000063 .
0167:004163A0 MOV DWORD PTR [ESP+6C],0000000B .
0167:004163A8 MOV DWORD PTR [ESP+70],00000003 .
0167:004163B0 MOV DWORD PTR [ESP+74],0000002B .
0167:004163B8 MOV DWORD PTR [ESP+78],0000000C .
0167:004163C0 MOV DWORD PTR [ESP+7C],0000001A .
0167:004163C8 MOV DWORD PTR [ESP+00000080],0000002A .
0167:004163D3 MOV DWORD PTR [ESP+00000084],00000010 .
0167:004163DE MOV DWORD PTR [ESP+00000088],0000003A .
0167:004163E9 MOV DWORD PTR [ESP+0000008C],00000024 .
0167:004163F4 MOV DWORD PTR [ESP+00000090],00000004 .
0167:004163FF MOV DWORD PTR [ESP+00000094],0000003D .
0167:0041640A MOV DWORD PTR [ESP+00000098],00000047 .
0167:00416415 MOV DWORD PTR [ESP+0000009C],0000005E .
0167:00416420 MOV DWORD PTR [ESP+000000A0],00000015 .
0167:0041642B MOV DWORD PTR [ESP+000000A4],0000003F .
0167:00416436 MOV DWORD PTR [ESP+000000A8],00000016 .
0167:00416441 MOV DWORD PTR [ESP+000000AC],00000014 .
0167:0041644C MOV DWORD PTR [ESP+000000B0],00000036 .
0167:00416457 MOV DWORD PTR [ESP+000000B4],00000059 .
0167:00416462 MOV DWORD PTR [ESP+000000B8],0000001E .
0167:0041646D MOV DWORD PTR [ESP+000000BC],00000061 .
0167:00416478 MOV DWORD PTR [ESP+000000C0],00000019 .
0167:00416483 MOV DWORD PTR [ESP+000000C4],00000053 .
0167:0041648E MOV DWORD PTR [ESP+000000C8],0000004A .
0167:00416499 MOV DWORD PTR [ESP+000000CC],00000045 .
0167:004164A4 MOV DWORD PTR [ESP+000000D0],00000043 .
0167:004164AF MOV DWORD PTR [ESP+000000D4],00000027 .
0167:004164BA MOV DWORD PTR [ESP+000000D8],0000004C .
0167:004164C5 MOV DWORD PTR [ESP+000000DC],00000046 .
0167:004164D0 MOV DWORD PTR [ESP+000000E0],0000005F .
0167:004164DB MOV DWORD PTR [ESP+000000E4],00000035 .
0167:004164E6 MOV DWORD PTR [ESP+000000E8],00000041 .
0167:004164F1 MOV DWORD PTR [ESP+000000EC],00000008 .
0167:004164FC MOV DWORD PTR [ESP+000000F0],00000050 .
0167:00416507 MOV DWORD PTR [ESP+000000F4],0000003B .
0167:00416512 MOV DWORD PTR [ESP+000000F8],00000025 .
0167:0041651D MOV DWORD PTR [ESP+000000FC],0000000F .
0167:00416528 MOV DWORD PTR [ESP+00000100],0000001F .
0167:00416533 MOV DWORD PTR [ESP+00000104],00000020 .
0167:0041653E MOV DWORD PTR [ESP+00000108],00000030 .
0167:00416549 MOV DWORD PTR [ESP+0000010C],0000001B .
0167:00416554 MOV DWORD PTR [ESP+00000110],0000005D .
0167:0041655F MOV DWORD PTR [ESP+00000114],0000004B .
0167:0041656A MOV DWORD PTR [ESP+00000118],00000012 .
0167:00416575 MOV DWORD PTR [ESP+0000011C],00000033 .
0167:00416580 MOV DWORD PTR [ESP+00000120],00000034 .
0167:0041658B MOV DWORD PTR [ESP+00000124],0000002C .
0167:00416596 MOV DWORD PTR [ESP+00000128],00000055 .
0167:004165A1 MOV DWORD PTR [ESP+0000012C],00000062 .
0167:004165AC MOV DWORD PTR [ESP+00000130],00000007 .
0167:004165B7 MOV DWORD PTR [ESP+00000134],00000018 .
0167:004165C2 MOV DWORD PTR [ESP+00000138],0000004F .
0167:004165CD MOV DWORD PTR [ESP+0000013C],0000000A .
0167:004165D8 MOV DWORD PTR [ESP+00000140],00000037 .
0167:004165E3 MOV EAX,[ESP+0000019C]
0167:004165EA XOR ESI,ESI
0167:004165EC PUSH 10
0167:004165EE PUSH ESI
0167:004165EF PUSH EAX
0167:004165F0 MOV DWORD PTR [ESP+00000150],00000028 .
0167:004165FB MOV [ESP+00000154],ESI .
0167:00416602 MOV DWORD PTR [ESP+00000158],0000004E .
0167:0041660D MOV DWORD PTR [ESP+0000015C],00000040 .
0167:00416618 MOV DWORD PTR [ESP+00000160],00000002 .
0167:00416623 MOV DWORD PTR [ESP+00000164],0000000E .
0167:0041662E MOV DWORD PTR [ESP+00000168],00000021 .
0167:00416639 MOV DWORD PTR [ESP+0000016C],00000026 .
0167:00416644 MOV DWORD PTR [ESP+00000170],0000001D .
0167:0041664F MOV DWORD PTR [ESP+00000174],0000002F .
0167:0041665A MOV DWORD PTR [ESP+00000178],00000057 .
0167:00416665 XLAT
0167:00416666 TEST [EDI*2+ESP],AH
0167:00416669 ADD [EAX],EAX
0167:0041666B ADD [EDX],AH
0167:0041666D ADD [EAX],AL
0167:0041666F ADD BH,AL
0167:00416671 TEST [EAX*4+EAX],AH
0167:00416674 ADD [EAX],EAX
0167:00416676 ADD [C7000000],CH
0167:0041667C TEST [EAX*4+ESP],AH
0167:0041667F ADD [EAX],EAX
0167:00416681 ADD [EAX+00],AH
0167:00416684 ADD [EAX],AL
0167:00416686 MOV DWORD PTR [ESP+00000188],00000005 .
0167:00416691 MOV DWORD PTR [ESP+0000018C],0000005A .
0167:0041669C MOV DWORD PTR [ESP+00000190],0000003E .
0167:004166A7 MOV DWORD PTR [ESP+00000194],00000038 .
0167:004166B2 MOV DWORD PTR [ESP+00000198],00000031 .
0167:004166BD MOV DWORD PTR [ESP+0000019C],00000044 .
0167:004166C8 MOV DWORD PTR [ESP+000001A0],00000049 <--- 索引表最后一项,共100项
0167:004166D3 CALL 004223A3
0167:004166D8 MOV EDI,EAX
0167:004166DA MOV ECX,00000064
0167:004166DF CDQ
0167:004166E0 ADD ESP,0C
0167:004166E3 IDIV ECX <--- Z1(输入的注册号)除以64h
0167:004166E5 LEA EAX,[ESP+08]
0167:004166E9 CMP [EAX],EDX <--- 一直查找直到索引表中找到(Z1%64h),将索引值存入ESI中,后面要用
0167:004166EB JZ 004166F6
0167:004166ED INC ESI
0167:004166EE ADD EAX,04
0167:004166F1 CMP ESI,63 <--- 此处可看出索引表共100(64h)项
0167:004166F4 JLE 004166E9
0167:004166F6 LEA ECX,[ESP+0000019C]
0167:004166FD CALL 00435245
0167:00416702 MOV EAX,EDI
0167:00416704 MOV ECX,00002710
0167:00416709 CDQ
0167:0041670A IDIV ECX
0167:0041670C MOV EAX,51EB851F <--- 这个操作数比较有意思,将它变为十进制为1374389535,不知是不是软件作者的手机号:-)
0167:00416711 MOV ECX,EDX
0167:00416713 IMUL ECX <--- 乘以(Z1%2710h)
0167:00416715 SAR EDX,05 <--- 除以20h
0167:00416718 MOV EAX,EDX
0167:0041671A SHR EAX,1F
0167:0041671D ADD EDX,EAX
0167:0041671F MOV EDX,[EDX*4+ESP+08]
0167:00416723 LEA EAX,[EDX*4+EDX] <--- 乘以64h(以下三条指令)
0167:00416726 LEA EAX,[EAX*4+EAX]
0167:00416729 SHL EAX,02
0167:0041672C SUB EAX,ECX <--- 减去(Z1%2710h)
0167:0041672E ADD EAX,ESI <--- 加上ESI,在4166EDh处的值
0167:00416730 ADD EAX,EDI <--- 加上Z1
0167:00416732 POP EDI
0167:00416733 POP ESI
0167:00416734 ADD ESP,00000190
0167:0041673A RET 0004
0167:0041673D NOP
----------------------------------------------------


三、注册算法分析:

设机器码为J1,机器码计算结果为J2,输入注册号为Z1,输入注册号计算结果为Z2,要注册成功必需使Z2=J2,另根据分析可得:Z2=Z1-Z1%2710h+以(Z1%64h)的为值的索引值+64h*{以[(51eb851fh*(Z1%2710h)的高位值/20h]为索引的值}。
J2为J1的函数,因该函数涉及到硬盘序列号等硬件标识的获取及运算,非常麻烦,而J2的值我们可以在内存中得到,故我们跳过该函数的分析,直接从内存中得到J2。

因此注册号的求解可等价为:

已知:J2=Z2=F(Z1),索引表(见附表) 求:Z1

求解过程:
因Z2=Z1-Z1%2710h+以(Z1%64h)的为值的索引值+64h*{以[(51eb851fh*(Z1%2710h)的高位值/20h]为索引的值},故可令
J2=A*2710h+B*64h+C,可得:

A*2710h=Z1-Z1%2710h ......①
B=以[((51eb851fh*(Z1%2710h))的高位值/20h]为索引的值 (此处高位值的意思是在内存中表现为EDX的值) ..②
C=以(Z1%64h)的为值的索引值 ......③

由①式可知:Z1必属于[A*2710h,(A+1)*2710h) ......④
由③式和索引表可得出:(Z1%64h),设为D ......⑤
由②式和索引表可得出:((51eb851fh*(Z1%2710h))的高位值/20h,设为E ......⑥

由⑥式可知:“((51eb851fh*(Z1%2710h))的高位值”必属于[E*20h,(E+1)*20h) ......⑦
再由⑦式可得:E*20h*100000000h/51eb851fh<=(Z1%2710h)<[(E+1)*20h*100000000+ffffffffh]/51eb851fh,令两个端值分别为F1、F2,(Z1%2710h)为G,则可得G属于[F1,F2) ......⑧

由④⑤⑧三式可得出结论:
正确的注册码Z1=A*2710+G,其中G属于[F1,F2),G/64h=D。


附:索引表

| 0 1 2 3 4 5 6 7 8 9 a b c d e f
-|----------------------------------------------------------------
0| 1c 54 51 29 48 23 56 17 5c 3c 0d 13 5b 01 39 58
1| 52 2e 11 42 4d 32 06 09 63 0b 03 2b 0c 1a 2a 10
2| 3a 24 04 3d 47 5e 15 3f 16 14 36 59 1e 61 19 53
3| 4a 45 43 27 4c 46 5f 35 41 08 50 3b 25 0f 1f 20
4| 30 1b 5d 4b 12 33 34 2c 55 62 07 18 4f 0a 37 *28
5| 00 4e 40 02 0e 21 26 1d 2f 57 22 2d 60 05 5a 3e
6| 38 31 44 49


在我机器上是这样的:
机器码:10324194746
注册码:44FC55E

四、注册机破解法
参照第三部分的分析,可写出注册机。在此不在细说。

五、暴力破解法
先用UPX脱壳,后用UltraEdit打开,找“753E518BCC”,找到后改为“9090518BCC”后存盘即可!


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程