老文章档案 · 2003 年

3.2 简体中文版 算法分析

破解教程 · 算法分析 · 2003-08-15 · 作者:人气: · 出处:赢政天下整理收藏)

软件版本: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”后存盘即可!

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史