文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → 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破解如何给软件脱壳基础教程