• 标 题:FxTools5.02和ImagXress3.0调用的ActiveX控件破解
  • 作 者: FTBirthday
  • 时 间:2003/05/17 01:54pm
  • 链 接:http://bbs.pediy.com

[分享]这是一位前辈写的提高篇(一),我在学习时加了点注解,请大家过目,谢谢! 


因为R*F***不愿意与破解再有牵连,也公开发文要求删除其署名编写的教程。我这里只能隐名了。

大家好,我是FTBirthday,初学破解,请多多指教.

学习破解,肯定知道R* F***前辈.看过他写的<初学者入门>,使我受益匪浅.接着又找到了前辈写的提高篇.怎奈自己太菜,好好补习了汇编,又花了好几天才把提高篇(一)看得比较懂了,于是写下来与大家分享.一句一句注解,比较稚嫩.不当之处,希望大家提出宝贵意见!谢了.

FTBirthday详细注解  
2003.5.17  

原文加注解后如下:
                               提高篇(一)
   大家好!我是******,又到上课的时候了,相信看这篇文章的朋友都看过我写的<初学者入门>吧!已经对于如何Crack软件有了一定的了解,所以在这里,我把最基本的操作都省去了,希望不懂的朋友,先去看一看<初学者入门>吧!
   好了言归正传了!既然是提高篇了,我们就要把程式分析得比较的详细,做到弄清楚程式是如何来算注册码的,最终得出公式,写成注册机提高自己的水平.,使大家分享你的成果.
   最近在网上,不时都会见到不少的人问,ActiveX控件是如何破解的,我看到网上也很少有这方面的文章,所以在网上Download了现在名气最大的两个多煤体ActiveX控件回来,看看它是否是人如其名.一试之下,good!!!!!!我真的爱上了它了,但可惜它要moneny注册.我真想自己是亿万富翁,我会马上去注册了.各位喜欢VB的朋友,请马上去下载啊!说了这么久,大家还不知道它们是什么呢?
它们是FxTools5.02和ImagXress3.0.不要问我要去那里下载,如果连这样的好东西都不知道,我看.......哈哈............!好了然归正传,来解破解吧!为了写这篇文章,我花了近一个星期来分析这个软件的程式,为求清楚明了,但如果只是为了单单为了注册,就不要这么久了.这两个控件,每个都值XXX美金,所以它的注册码吗!就不是这么简单的比较了,而是较为复杂的运算.
首先,我们看一看它的注册形式吧!
Registration name:
Organization Name:
E-mail Address:
Serial Number:
Registration code:
以上的每一项都要你填写,注册时它是这样做的,它会先检查你的Serial Number的形式,如果不是?????????-???????????,就会把你的Serial Number的第一位变为T,也会一样进注册Call运行,但一出来就跳到失败处,值得一提的是这个软件注册失败时没有失败窗口.如果形式正确,它就断续运行.它会把你的名字,组织,信箱,密码都经过一定的运算得到一个值,又把你的注册码运算得到另外一个值,两值比较,如果相等就把你的Serial Number经过运算写入注册表,在下次调用时提出来,再经过运算化出来,再检查是否正确,错误就不能运行.
    我们为了对程式能分析得比较,所以很多时把整个Call内的内容都Copy出来,以便大家分析之用.这也是我对大家的希望,要知道一个Cracker要成为高手,就是要看他能否写出注册机来,因为这要求他对所Crack的程序的了解得很深.改文件来注册,那只是没办法之中的办法,如果你永远停留在这个水平,那么终有一天,你会发现你已经没有软件可Crack了,因为现在软件向着加壳化发展,很多时在原文件中找不到要改的内容了.好了现在讲破解了,由于Fxtools和ImagXress都是同一个公司的产品,所以注册程式是一样的,只是Serial Number不同,问我如何知道,我Crack过吗?
所以我们以Fxtools为例来说明:
1.我们把内容都填好!下bpx hmemcpy.
2.中断程式.按F12跳到原程式.
3.按F10向下走:
       至
(之前,它会先检查你的Serial Number的形式,如果不是?????????-???????????,就会把你的Serial Number的第一位变为T,但也会一样进注册Call运行,但一出来就跳到失败处.)

0137:01441785  PUSH    EDX
0137:01441786  CALL    01442ED0                 ;比较注册码 (下断点,进入)
0137:0144178B  MOV     EDI,EAX
(到这一步,已经经过了注册Call的运行,出来了,要检查Serial Number第一字是否T,为T跳往失败处,反之注册成功)
0137:0144178D  MOV     AL,[ESI]      ;ESI处值作为地址,此地址的值给AL,此地址存有Serial Number的首字母
0137:0144178F  CMP     AL,54         ;54对应T
0137:01441791  JNZ     0144179A;不为T则注册成功了,直接跳往0144179A
0137:01441793  MOV     EAX,0000006B
0137:01441798  JMP     014417A4;为T的话,跳往失败处
(下面大概是注册成功后把你的Serial Number经过运算写入注册表的过程)
0137:0144179A  XOR     EAX,EAX
0137:0144179C  TEST    EDI,EDI
0137:0144179E  SETNZ   AL
0137:014417A1  ADD     EAX,6A
0137:014417A4  PUSH    00
0137:014417A6  PUSH    EAX
0137:014417A7  MOV     EAX,[014493BC]
0137:014417AC  PUSH    00000111

(下面是比较注册码CALL的内容,现在我们来看它算注册码了。)
:CALL    01442ED0
0137:01442ED0  MOV     EAX,[ESP+0C]
0137:01442ED4  SUB     ESP,00000084
0137:01442EDA  MOV     [01449550],EAX
0137:01442EDF  PUSH    EBX
0137:01442EE0  PUSH    EBP
0137:01442EE1  PUSH    ESI
0137:01442EE2  PUSH    EDI
0137:01442EE3  MOV     EDI,[ESP+000000A4]
0137:01442EEA  XOR     ESI,ESI;ESI置零
0137:01442EEC  MOV     [01449290],ESI;这条命令初始化[01449290]为零
0137:01442EF2  CMP     BYTE PTR [EDI+08],42
0137:01442EF6  JZ      01442F2A
0137:01442EF8  MOV     EBP,[ESP+000000A8]         ;名字Registration name的地址
0137:01442EFF  PUSH    EBP         ;名字入栈,EBP存着名字
0137:01442F00  CALL    01441030         ;名字算ds:01449290的值
0137:01442F05  MOV     ECX,[ESP+000000B0]         ;公司Organization Name的地址
0137:01442F0C  ADD     ESP,04         ;平衡堆栈
0137:01442F0F  PUSH    ECX         ;公司名入栈,ECX存着公司名
0137:01442F10  CALL    01441030         ;公司算ds:01449290的值
0137:01442F15  MOV     EBX,[ESP+000000B4]         ;邮箱的E-mail Address地址
0137:01442F1C  ADD     ESP,04         ;平衡堆栈
0137:01442F1F  PUSH    EBX         ;邮箱名入栈,EBX存着邮箱名
0137:01442F20  CALL    01441030         ;邮箱算ds:01449290的值
0137:01442F25  ADD     ESP,04         ;平衡堆栈
0137:01442F28  JMP     01442F38         ;无条件跳转到01442F38
0137:01442F2A  MOV     EBX,[ESP+000000B0]
0137:01442F31  MOV     EBP,[ESP+000000A8]         ;密码Serial Number的地址
0137:01442F38  PUSH    EDI
0137:01442F39  CALL    01441030         ;密码算ds:01449290的值
(注册码处理过程)
0137:01442F3E  MOV     EDX,[ESP+000000B8]            ;注册码的地址赋给EDX
0137:01442F45  ADD     ESP,04;平衡堆栈
0137:01442F48  TEST    EDX,EDX;检查注册码是否为空
0137:01442F4A  JZ      01442FA9;为空则跳转到01442FA9关键比较处
0137:01442F4C  MOV     AL,[EDX];注册码首字母赋给AL
0137:01442F4E  TEST    AL,AL;检查注册码首字母是否为零
0137:01442F50  JZ      01442FAF;为零直接跳到关键比较处
(检查注册码字符是不是数字0--9)
0137:01442F52  CMP     AL,39        ;39对应9
0137:01442F54  JG      01442F71;大于9则跳到01442F71去检查是不是字母A--Z
0137:01442F56  CMP     AL,30;30对应0
0137:01442F58  JL      01443418;小于0则直接跳出此call到01443418处

(ESI=35(35(35a+b)+c)+d=d*35^0+c*35^1+b*35^2+a*35^3的由来)
0137:01442F5E  MOV     ECX,ESI;ESI初值0赋给ECX,即ECX=ESI
0137:01442F60  SHL     ECX,03;SHL移位指令,把ECX左移3位,相当于ECX=ECX*2^3=ECX*8
0137:01442F63  SUB     ECX,ESI;ECX=ECX-ESI=ECX*8-ECX=ECX*7
0137:01442F65  MOVSX   EAX,AL;把AL先符号扩展,再传送到EAX,EAX=AL
0137:01442F68  LEA     ECX,[ECX*4+ECX];把ECX*4+ECX=ECX*5=ECX*7*5=ECX*35的值的有效地址传给ECX
0137:01442F6B  LEA     ESI,[EAX+ECX-30];EAX+ECX-30=AL+ECX*35-30的值的有效地址传给ESI,解释:ASCII码30代表零,这样AL-30,即代表字符0--9对应整型数0--9
(注册码字符为数字则处理完毕)
0137:01442F6F  JMP     01442F9F;无条件跳到01442F9F去判断注册码字符是否循环完毕
(检查注册码字符是不是字母A--Z)
0137:01442F71  CMP     AL,41       ;41对应A
0137:01442F73  JL      01443418;小于A则直接跳出此call到01443418
0137:01442F79  CMP     AL,5A;5A对应Z
0137:01442F7B  JG      01443418;大于Z则直接跳出此call到01443418
(检查是不是字母O,对O字母无效)
0137:01442F81  CMP     AL,4F;4F对应字母O
0137:01442F83  JZ      01443418;等于O则直接跳出此call到01443418,即注册码中不允许出现字母O

(ESI=35(35(35a+b)+c)+d=d*35^0+c*35^1+b*35^2+a*35^3的由来)
0137:01442F89  MOV     ECX,ESI;ESI赋给ECX,下面的ECX就是前一个字符的运算结果
0137:01442F8B  SHL     ECX,03;SHL移位指令,把ECX左移3位,相当与ECX=ECX*2^3=ECX*8
0137:01442F8E  SUB     ECX,ESI;ECX=ECX-ESI=ECX*8-ECX=ECX*7,
(是对于在O字母后的字母计算时ESI要减一)
0137:01442F90  CMP     AL,4F;4F对应字母O
0137:01442F92  MOVSX   ESI,AL;把AL先符号扩展,再传送到ESI
0137:01442F95  LEA     ECX,[ECX*4+ECX];把ECX*4+ECX=ECX*5=ECX*35的值的有效地址传给ECX
0137:01442F98  LEA     ESI,[ESI+ECX-37];ESI+ECX-37=AL+ECX*35-37的值的有效地址传给ESI,解释:ASCII码37代表7,这样ESI-37=AL-37,即字符A--Z对应整型数10--35
0137:01442F9C  JL      01442F9F;若该字母小于字母O则跳到01442F9F判断注册码字符是否循环完毕
0137:01442F9E  DEC     ESI;否则ESI=ESI-1
(注册码字符处理完毕,接下来判断注册码字符是否循环完毕)
0137:01442F9F  MOV     AL,[EDX+01];当前字符的下一个字符传送给AL
0137:01442FA2  INC     EDX;EDX=EDX+1,循环指针
0137:01442FA3  TEST    AL,AL;判断AL是否为空,即没有字符了
0137:01442FA5  JNZ     01442F52;如不为空则跳回01442F52继续处理注册码字符
0137:01442FA7  JMP     01442FAF;无条件跳转到01442FAF比较ESI和[01449290]
0137:01442FA9  MOV     ESI,[01449290]
0137:01442FAF  CMP     ESI,[01449290]    ;关键比较地方,ds:01449290的值是最关键值,为了计算注册码的方便我们设为sn1,而ESI的值我们设为ESI
0137:01442FB5  JZ      01442FCE         ;两者不相等则跳到01442FCE失败
0137:01442FB7  CMP     BYTE PTR [EDI],54;EDI所指地址存有Serial Number的首字母,与T作比较
0137:01442FBA  JZ      01442FCE;若Serial Number的首字母与T相等,则跳到01442FCE失败
0137:01442FBC  MOV     EAX,00000001
0137:01442FC1  POP     EDI
0137:01442FC2  POP     ESI
0137:01442FC3  POP     EBP
0137:01442FC4  POP     EBX
0137:01442FC5  ADD     ESP,00000084
0137:01442FCB  RET     0020;一切顺利返回调用处
0137:01442FCE  CALL    [01445074]

好我们现在来看一看它是如何比较我们的注册码的,根据上面的程式,我们可以得到以下的公式
设你的注册码为abcd
ESI=35(35(35a+b)+c)+d=d*35^0+c*35^1+b*35^2+a*35^3

但一点要补充的,程式在对字母运算时做了一点动作,
其中:

0137:01442F81  CMP     AL,4F
0137:01442F83  JZ      01443418
是对O字母无效。

0137:01442F90  CMP     AL,4F
0137:01442F92  MOVSX   ESI,AL
0137:01442F95  LEA     ECX,[ECX*4+ECX]
0137:01442F98  LEA     ESI,[ESI+ECX-37]
0137:01442F9C  JL      01442F9F
0137:01442F9E  DEC     ESI
是对于在O字母后的字母计算时ESI要减一。

注册码字符处理过程,C语言版
******************************************************
注册码字符数组=string1[x]
int i=0;
int ESI=0;
int ECX=0;
char string2[x]=strpur(string1);    /*将string1[x]的字母全转化为大写,并存入
                                     string2[x]中*/
for(i=0;i<=strlen(string2);i++)
 {   if('0'<=string2[i]<='9')
       {ESI=string[i]+ECX*35-30;}
     else if('A'<=string2[i]<='N')
          {ESI=string[i]+ECX*35-37;}
           else if('O'<string2[i]<='Z')
                {ESI=string[i]+ECX*35-37-1;}
 }
*******************************************************

从上面分析可知:
如果要算注册码,第一我们要知道sn1(ds:01449290的值)
第二就是用它对35求余,就可以得到d 的值了,再求余可以得到c了,如此类推,就可以求出注册码来了。如果求出来的余数大于9,从程式中可知,它是这样处理的,它把10用A来代替,11为B……但有一点要注意,就是当余数大于24(字符O)时,那么对应的字母就要向后移一个了,如余数为25,那么正确的字母应为26所对应的字母了。

好我们现在来了解ds:01449290的值sn1是怎么样得出来的。
这是用名字,公司,邮箱,密码来算注册码的公共CALL

:CALL    01441030
0137:01441030  PUSH    EBX
0137:01441031  MOV     EBX,[ESP+08]
0137:01441035  PUSH    ESI
0137:01441036  PUSH    EDI
0137:01441037  MOV     EDI,EBX
0137:01441039  OR      ECX,-01
0137:0144103C  XOR     EAX,EAX
0137:0144103E  XOR     ESI,ESI
0137:01441040  REPNZ SCASB
0137:01441042  NOT     ECX
0137:01441044  DEC     ECX    ;取名字,公司,邮箱,密码等的字符串长度给ECX
0137:01441045  MOV     EDI,ECX;ECX给EDI,EDI存放了名字,公司,邮箱,密码等的字符串长度
0137:01441047  TEST    EDI,EDI;判断是否输入了名字,公司,邮箱,密码
0137:01441049  JLE     0144105E;没有就跳过算sn1
0137:0144104B  XOR     EAX,EAX;EAX清零
0137:0144104D  MOV     AL,[EBX+ESI]  ;[EBX+ESI]为放名字,公司,邮箱,密码等的地方
0137:01441050  PUSH    EAX      ;把EAX送到[ESP+04]中,后面有用
0137:01441051  CALL    01441000 ;算sn1(ds:01449290的值)
0137:01441056  ADD     ESP,04
0137:01441059  INC     ESI
0137:0144105A  CMP     ESI,EDI ;字符串长度为多少就循环多少次
0137:0144105C  JL      0144104B
0137:0144105E  MOV     EAX,[01449290]
0137:01441063  POP     EDI
0137:01441064  POP     ESI
0137:01441065  POP     EBX
0137:01441066  RET

这是CALL 01441000的内核:

:CALL    01441000
0137:01441000  MOV     EAX,[01449290]    ;把sn1送EAX
0137:01441005  MOV     EDX,[ESP+04]      ;重取字母
0137:01441009  MOV     ECX,EAX           ;把sn1送ECX
0137:0144100B  AND     ECX,000000FF      ;取出CL来
0137:01441011  XOR     ECX,EDX           ;CL与字母XOR
0137:01441013  SHR     EAX,08            ;EAX右移8位
0137:01441016  MOV     EDX,[ECX*4+01446000]  ;查表,DS是16位段寄存器,从ds:01446148开始一个字四个16进制数放入EDX.
0137:0144101D  XOR     EDX,EAX           ;EAX与字母XOR后放回EDX
0137:0144101F  MOV     [01449290],EDX    ;EDX送回sn1
0137:01441025  RET
好了,现在我们来看一看sn1是如何得到的了。
我们现在以名字为Ru Feng为例来说明程式是如何运行的:
由程式我们知道,它的sn1的为法是一种查表的方法,从语句:
0137:01441016  MOV     EDX,[ECX*4+01446000]
可得表格的地址最小为ds:01446000,解释这里ECX是重取的字母,一个字节,最大FF,即范围00000000-11111111,所以最大为ds:[ffh*4+01446000]即最大为ds:014463FC

为了分析的方便和后面写注册机,我们把这段数据抓出来,如下表1.
首先取得名字长度为ecx=7,所以循环7次:
1.ds:01449290=0
eax=0h0137:01441000  MOV     EAX,[01449290]    把sn1送EAX
edx=52h0137:01441005  MOV     EDX,[ESP+04]      重取字母
ecx=0h0137:01441009  MOV     ECX,EAX           把sn1送ECX
ecx=0h0137:0144100B  AND     ECX,000000FF      取出CL来
ecx=52h0137:01441011  XOR     ECX,EDX           CL与字母XOR
eax=0h0137:01441013  SHR     EAX,08            EAX右移8位
edx=ds:52*4h+01446000h=ds:01446148h=856530D8h
                    0137:01441016  MOV     EDX,[ECX*4+01446000]  查表
edx=856530D8h        0137:0144101D  XOR     EDX,EAX     EAX与字母XOR后放回EDX
ds:[01449290]=856530D8h
                    0137:0144101F  MOV     [01449290],EDX    EDX送回sn1

如此类推:
2.开始时ds:[01449290]=856530D8h
eax=856530D8h
edx=75h
ecx=856530D8h
ecx=000000D8h
ecx=000000ADh
eax=00856530h
edx=ds:AD*4h+01446000h=ds:014462B4h=A867DF55h

XOR过程如下:
--------------------------------------------------------------------------
需要的工具 hex->byte转换器  hex->dec计算器
            hex                          byte
edx       A867DF55         1010 1000 0110 0111 1101 1111 0101 0101
eax       00856530         0000 0000 1000 0101 0110 0101 0011 0000
xor       A8E2BA65         1010 1000 1110 0010 1011 1010 0110 0101
---------------------------------------------------------------------------
edx=A8E2BA65h
ds:[01449290]=A8E2BA65h
3.
ds:[01449290]=061E57A5h
4.
ds:[01449290]=3905AD95h
5.
ds:[01449290]=BD84F7B1h
6.
ds:[01449290]=16D14BB2h
7.
ds:[01449290]=F6AFF710h

作者:Ru Feng
信箱:ocq@163.net
网址:http://ocq.yeah.net
                                                (未完,代续)
附表1.
013F:01446000 00 00 00 00 96 30 07 77-2C 61 0E EE BA 51 09 99  .....0.w,a...Q..
013F:01446010 19 C4 6D 07 8F F4 6A 70-35 A5 63 E9 A3 95 64 9E  ..m...jp5.c...d.
013F:01446020 32 88 DB 0E A4 B8 DC 79-1E E9 D5 E0 88 D9 D2 97  2......y........
013F:01446030 2B 4C B6 09 BD 7C B1 7E-07 2D B8 E7 91 1D BF 90  +L...|.~.-......
013F:01446040 64 10 B7 1D F2 20 B0 6A-48 71 B9 F3 DE 41 BE 84  d.... .jHq...A..
013F:01446050 7D D4 DA 1A EB E4 DD 6D-51 B5 D4 F4 C7 85 D3 83  }......mQ.......
013F:01446060 56 98 6C 13 C0 A8 6B 64-7A F9 62 FD EC C9 65 8A  V.l...kdz.b...e.
013F:01446070 4F 5C 01 14 D9 6C 06 63-63 3D 0F FA F5 0D 08 8D  O\...l.cc=......
013F:01446080 C8 20 6E 3B 5E 10 69 4C-E4 41 60 D5 72 71 67 A2  . n;^.iL.A`.rqg.
013F:01446090 D1 E4 03 3C 47 D4 04 4B-FD 85 0D D2 6B B5 0A A5  ...<G..K....k...
013F:014460A0 FA A8 B5 35 6C 98 B2 42-D6 C9 BB DB 40 F9 BC AC  ...5l..B....@...
013F:014460B0 E3 6C D8 32 75 5C DF 45-CF 0D D6 DC 59 3D D1 AB  .l.2u\.E....Y=..
013F:014460C0 AC 30 D9 26 3A 00 DE 51-80 51 D7 C8 16 61 D0 BF  .0.&:..Q.Q...a..
013F:014460D0 B5 F4 B4 21 23 C4 B3 56-99 95 BA CF 0F A5 BD B8  ...!#..V........
013F:014460E0 9E B8 02 28 08 88 05 5F-B2 D9 0C C6 24 E9 0B B1  ...(..._....$...
013F:014460F0 87 7C 6F 2F 11 4C 68 58-AB 1D 61 C1 3D 2D 66 B6  .|o/.LhX..a.=-f.
013F:01446100 90 41 DC 76 06 71 DB 01-BC 20 D2 98 2A 10 D5 EF  .A.v.q... ..*...
013F:01446110 89 85 B1 71 1F B5 B6 06-A5 E4 BF 9F 33 D4 B8 E8  ...q........3...
013F:01446120 A2 C9 07 78 34 F9 00 0F-8E A8 09 96 18 98 0E E1  ...x4...........
013F:01446130 BB 0D 6A 7F 2D 3D 6D 08-97 6C 64 91 01 5C 63 E6  ..j-=m..ld..\c.
013F:01446140 F4 51 6B 6B 62 61 6C 1C-D8 30 65 85 4E 00 62 F2  .Qkkbal..0e.N.b.
013F:01446150 ED 95 06 6C 7B A5 01 1B-C1 F4 08 82 57 C4 0F F5  ...l{.......W...
013F:01446160 C6 D9 B0 65 50 E9 B7 12-EA B8 BE 8B 7C 88 B9 FC  ...eP.......|...
013F:01446170 DF 1D DD 62 49 2D DA 15-F3 7C D3 8C 65 4C D4 FB  ...bI-...|..eL..
013F:01446180 58 61 B2 4D CE 51 B5 3A-74 00 BC A3 E2 30 BB D4  Xa.M.Q.:t....0..
013F:01446190 41 A5 DF 4A D7 95 D8 3D-6D C4 D1 A4 FB F4 D6 D3  A..J...=m.......
013F:014461A0 6A E9 69 43 FC D9 6E 34-46 88 67 AD D0 B8 60 DA  j.iC..n4F.g...`.
013F:014461B0 73 2D 04 44 E5 1D 03 33-5F 4C 0A AA C9 7C 0D DD  s-.D...3_L...|..
013F:014461C0 3C 71 05 50 AA 41 02 27-10 10 0B BE 86 20 0C C9  <q.P.A.'..... ..
013F:014461D0 25 B5 68 57 B3 85 6F 20-09 D4 66 B9 9F E4 61 CE  %.hW..o ..f...a.
013F:014461E0 0E F9 DE 5E 98 C9 D9 29-22 98 D0 B0 B4 A8 D7 C7  ...^...)".......
013F:014461F0 17 3D B3 59 81 0D B4 2E-3B 5C BD B7 AD 6C BA C0  .=.Y....;\...l..
013F:01446200 20 83 B8 ED B6 B3 BF 9A-0C E2 B6 03 9A D2 B1 74   ..............t
013F:01446210 39 47 D5 EA AF 77 D2 9D-15 26 DB 04 83 16 DC 73  9G...w...&.....s
013F:01446220 12 0B 63 E3 84 3B 64 94-3E 6A 6D 0D A8 5A 6A 7A  ..c..;d.>jm..Zjz
013F:01446230 0B CF 0E E4 9D FF 09 93-27 AE 00 0A B1 9E 07 7D  ........'......}
013F:01446240 44 93 0F F0 D2 A3 08 87-68 F2 01 1E FE C2 06 69  D.......h......i
013F:01446250 5D 57 62 F7 CB 67 65 80-71 36 6C 19 E7 06 6B 6E  ]Wb..ge.q6l...kn
013F:01446260 76 1B D4 FE E0 2B D3 89-5A 7A DA 10 CC 4A DD 67  v....+..Zz...J.g
013F:01446270 6F DF B9 F9 F9 EF BE 8E-43 BE B7 17 D5 8E B0 60  o.......C......`
013F:01446280 E8 A3 D6 D6 7E 93 D1 A1-C4 C2 D8 38 52 F2 DF 4F  ....~......8R..O
013F:01446290 F1 67 BB D1 67 57 BC A6-DD 06 B5 3F 4B 36 B2 48  .g..gW.....?K6.H
013F:014462A0 DA 2B 0D D8 4C 1B 0A AF-F6 4A 03 36 60 7A 04 41  .+..L....J.6`z.A
013F:014462B0 C3 EF 60 DF 55 DF 67 A8-EF 8E 6E 31 79 BE 69 46  ..`.U.g...n1y.iF
013F:014462C0 8C B3 61 CB 1A 83 66 BC-A0 D2 6F 25 36 E2 68 52  ..a...f...o%6.hR
013F:014462D0 95 77 0C CC 03 47 0B BB-B9 16 02 22 2F 26 05 55  .w...G....."/&.U
013F:014462E0 BE 3B BA C5 28 0B BD B2-92 5A B4 2B 04 6A B3 5C  .;..(....Z.+.j.\
013F:014462F0 A7 FF D7 C2 31 CF D0 B5-8B 9E D9 2C 1D AE DE 5B  ....1......,...[
013F:01446300 B0 C2 64 9B 26 F2 63 EC-9C A3 6A 75 0A 93 6D 02  ..d.&.c...ju..m.
013F:01446310 A9 06 09 9C 3F 36 0E EB-85 67 07 72 13 57 00 05  ....?6...g.r.W..
013F:01446320 82 4A BF 95 14 7A B8 E2-AE 2B B1 7B 38 1B B6 0C  .J...z...+.{8...
013F:01446330 9B 8E D2 92 0D BE D5 E5-B7 EF DC 7C 21 DF DB 0B  ...........|!...
013F:01446340 D4 D2 D3 86 42 E2 D4 F1-F8 B3 DD 68 6E 83 DA 1F  ....B......hn...
013F:01446350 CD 16 BE 81 5B 26 B9 F6-E1 77 B0 6F 77 47 B7 18  ....[&...w.owG..
013F:01446360 E6 5A 08 88 70 6A 0F FF-CA 3B 06 66 5C 0B 01 11  .Z..pj...;.f\...
013F:01446370 FF 9E 65 8F 69 AE 62 F8-D3 FF 6B 61 45 CF 6C 16  ..e.i.b...kaE.l.
013F:01446380 78 E2 0A A0 EE D2 0D D7-54 83 04 4E C2 B3 03 39  x.......T..N...9
013F:01446390 61 26 67 A7 F7 16 60 D0-4D 47 69 49 DB 77 6E 3E  a&g...`.MGiI.wn>
013F:014463A0 4A 6A D1 AE DC 5A D6 D9-66 0B DF 40 F0 3B D8 37  Jj...Z..f..@.;.7
013F:014463B0 53 AE BC A9 C5 9E BB DE-7F CF B2 47 E9 FF B5 30  S.........G...0
013F:014463C0 1C F2 BD BD 8A C2 BA CA-30 93 B3 53 A6 A3 B4 24  ........0..S...$
013F:014463D0 05 36 D0 BA 93 06 D7 CD-29 57 DE 54 BF 67 D9 23  .6......)W.T.g.#
013F:014463E0 2E 7A 66 B3 B8 4A 61 C4-02 1B 68 5D 94 2B 6F 2A  .zf..Ja...h].+o*
013F:014463F0 37 BE 0B B4 A1 8E 0C C3-1B DF 05 5A 8D EF 02 2D  7..........Z...-
                  表格的地址最大为ds:014463FC(5A)对应Z是表的最后一位