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

3.2 简体中文版 算法分析

时间:2004/10/15 0:55: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破解如何给软件脱壳基础教程