• 标 题:MobileSearch(手机号码归属地查询) v2.0注册算法,附注册机~~~~~~ (30千字)
  • 作 者:Sam.com
  • 时 间:2002-3-29 5:23:07
  • 链 接:http://bbs.pediy.com

名称:MobileSearch(手机号码归属地查询) v2.0 测试版 数据库[2002-02-17]
下载:http://www.SearchCN.net (作者主页)或天天安全网(正式版)

简介:本软件收录了34300多条手机号码归属地信息,可以详细查询到手机号码的开户地信息,包括该号码所属省份、城市、长途区号以及该号码SIM卡类型。号码资源收录容量极大,可以方便地帮你了解任何一个手机来电、短信息的来源地。

限制:在2002年2月3日前,您可以使用该注册测试版的全部功能,在2002年2月3日后,除了您不能使用在线更新数据库功能外,其他功能完全可以使用,但是,您无法获得我们的升级服务。

原因:不久前下载了MobileSearch v2.0 测试版,里面附有另类注册机,但不能用,于是自己动手,可能因为是测试版,它的保护很弱,输入注册码后会直接明码比较,所以找了个注册码自己使用.上个星期,在网上看到出了正式版,下载后发现保护加强,不直接比较,须退出后验证,试着把测试版的注册码填入可注册成功,说明它算法没变(已证实,请留意文章后部分),虽然可确定它的注册信息保存在MobileSearch.ini中,可下bpx GetPrivateProfileString来追,但感觉测试版比较容易入手,于是决定写个注册机以免日后麻烦,当追到它算法部分时更坚定了这个决心!

为何发布注册机:正式版中的使用条款上只说未注册不能使用超过一个月,不可修改本软件,不可使用修改版,不可获取和使用软件数据库,没说不能使用注册机:-) 另外我觉得,使用一个这么复杂烦琐而且应该不可逆的算法算出注册码,最后来个明码比较,这样的保护不如没有好,不过也难怪作者好象是第一次写软件,但愿以后我们的程序员都不要这样为好!同时说明一下如何用程序本身来写注册机

开始:软件是用Borland C++写的,没加壳,我的注册名Sam Von,我是用TRW直接bpm注册名找到下面代码的,用TRW而不用w32dasm的原因是可以比较容易确定那里才是算法的开始,因为程序可能会分几个部分来算注册码,缺点是很容易迷失方向.以下数据如不特别说明均为16进制数.另外要注意测试版未注册会在标题处有(注册版)字样,每次进入都会提示,注册成功后会消失!

==Main Code=================================================
这里比较明显,第1第2个Call是一样的,说明程序经过了两次相同的算法来获得正确的注册码,第3个Call是进行注册码比较的地方,很简单我没贴出来,我的目的是了解算法写出注册机

0187:004075D6  MOV      BYTE [EBP-77],00
0187:004075DA  PUSH    DWORD [EBP-70]    <---这里指向一个字串"MobileSearch2",重要数据
0187:004075DD  LEA      ECX,[EBP+FFFFFF6C] <---ecx指向我的注册名"Sam Von"
0187:004075E3  PUSH    ECX               
0187:004075E4  CALL    00401C00
0187:004075E9  ADD      ESP,BYTE +08
0187:004075EC  MOV      [EBP-6C],EAX
0187:004075EF  PUSH    DWORD [EBP-70]    <---"MobileSearch2"
0187:004075F2  PUSH    DWORD [EBP-6C]    <---这里指向上面Call算出的结果,称为
0187:004075F5  CALL    00401C00              中间注册码,用它代替注册名来运算
0187:004075FA  ADD      ESP,BYTE +08
0187:004075FD  MOV      [EBP-6C],EAX
0187:00407600  LEA      EAX,[EBP+FFFFFF7C]
0187:00407606  PUSH    EAX
0187:00407607  PUSH    DWORD [EBP-6C]    <---这里就是正确的注册码了
0187:0040760A  CALL    004707F0
0187:0040760F  ADD      ESP,BYTE +08
0187:00407612  TEST    EAX,EAX
0187:00407614  JNZ      NEAR 00407809
==Main Code End================================================

==Main Call====================================================
这个算法可心说又臭又长,我写不出它的算法公式,光是在追Call 1的过程里我就做了4页纸的笔记,Call 2我就没做记录了,如果想了解它的算法请大家自己追一下,我只讲个大概:
1.程序先用字符"MobileSearch2"的前两位查表,得到两个数据,并将前两位当作注册码的前两位
2.将注册名的每一位X2,如Sam Von(53 61 6D 20 56 6F 6E)-->A6 C2 DA 40 AC DE DC 00
3.注册名最多只取8位,不够就用0补上
4.将2步得到的数据进行N次移位,补位,去位,前后4位相运算,查表得到"中间"注册码
5.重复1~4步,不过要将2中的注册名用"中间"注册码代替来运算,最后查表得正确注册码

注:下面注解中所说的"第2次运算"是指进入Main Code中(004075F5 CALL 00401C00)这个Call里内存的状态,因为虽然两个Call的过程一样,不过两次运算中内存的数据有了变化,调试过程中请注意[ebp+??]这样的地址!!

0187:00401C00  PUSH    EBP
0187:00401C01  MOV      EBP,ESP
0187:00401C03  ADD      ESP,FFFFFF40
0187:00401C09  XOR      EAX,EAX
0187:00401C0B  MOV      [EBP-14],EAX
0187:00401C0E  XOR      EDX,EDX
0187:00401C10  MOV      [EBP-18],EDX          第1次运算这里为0,第二次运算这里是
0187:00401C13  LEA      ECX,[EBP-38]      <---Call 2的运算结果37 8E 9C 0C  FD F9 75 96
0187:00401C16  MOV      [EBP-3C],ECX          可先不管这一步
0187:00401C19  MOV      EAX,[EBP+0C]
0187:00401C1C  CMP      BYTE [EAX],00    <---[eax]="MobileSearch2"
0187:00401C1F  JNZ      00401C25
0187:00401C21  MOV      DL,41
0187:00401C23  JMP      SHORT 00401C2A
0187:00401C25  MOV      ECX,[EBP+0C]
0187:00401C28  MOV      DL,[ECX]          <---"M"
0187:00401C2A  MOV      [00487694],DL    <---这里是最后保存注册码的地方
0187:00401C30  XOR      EAX,EAX
0187:00401C32  MOV      AL,DL
0187:00401C34  MOV      [EBP-0C],EAX
0187:00401C37  MOV      ECX,[EBP-0C]
0187:00401C3A  XOR      EAX,EAX
0187:00401C3C  MOV      AL,[ECX+0047E4B4] <---用"M"查表,数据请参照注册机的数据DATA1
0187:00401C42  MOV      [EBP-14],EAX      <---Save
0187:00401C45  MOV      EDX,[EBP+0C]
0187:00401C48  CMP      BYTE [EDX+01],00
0187:00401C4C  JNZ      00401C52
0187:00401C4E  MOV      CL,41
0187:00401C50  JMP      SHORT 00401C58
0187:00401C52  MOV      EAX,[EBP+0C]
0187:00401C55  MOV      CL,[EAX+01]      <---"o"
0187:00401C58  MOV      [00487695],CL
0187:00401C5E  XOR      EAX,EAX
0187:00401C60  MOV      AL,CL
0187:00401C62  MOV      [EBP-0C],EAX
0187:00401C65  MOV      EDX,[EBP-0C]
0187:00401C68  XOR      EAX,EAX
0187:00401C6A  MOV      AL,[EDX+0047E4B4] <---用"o"查表,并shl它
0187:00401C70  SHL      EAX,04
0187:00401C73  MOV      [EBP-18],EAX      <---Save
0187:00401C76  XOR      EDX,EDX
0187:00401C78  MOV      [EBP-04],EDX
0187:00401C7B  MOV      ECX,[EBP+08]
0187:00401C7E  MOV      AL,[ECX]          <---"Sam Von"
0187:00401C80  MOV      [EBP-3D],AL
0187:00401C83  INC      DWORD [EBP+08]
0187:00401C86  CMP      BYTE [EBP-3D],00
0187:00401C8A  JZ      00401CA1
0187:00401C8C  MOV      DL,[EBP-3D]
0187:00401C8F  ADD      EDX,EDX          <---ADD
0187:00401C91  MOV      ECX,[EBP-04]
0187:00401C94  MOV      [EBP+ECX-2C],DL
0187:00401C98  INC      DWORD [EBP-04]
0187:00401C9B  CMP      DWORD [EBP-04],BYTE +08
0187:00401C9F  JC      00401C7B
0187:00401CA1  CMP      DWORD [EBP-04],BYTE +08
0187:00401CA5  JNC      00401CB8
0187:00401CA7  MOV      EAX,[EBP-04]
0187:00401CAA  MOV      BYTE [EBP+EAX-2C],00
0187:00401CAF  INC      DWORD [EBP-04]    <---最多取8位,不够补0
0187:00401CB2  CMP      DWORD [EBP-04],BYTE +08
0187:00401CB6  JC      00401CA7
0187:00401CB8  LEA      EDX,[EBP+FFFFFF40]
0187:00401CBE  PUSH    EDX
0187:00401CBF  LEA      ECX,[EBP-2C]
0187:00401CC2  PUSH    ECX
0187:00401CC3  CALL    00401514          <---Call 1先进去看看
0187:00401CC8  ADD      ESP,BYTE +08
0187:00401CCB  PUSH    DWORD [EBP-18]<---340
0187:00401CCE  PUSH    DWORD [EBP-14]<---18
0187:00401CD1  LEA      EAX,[EBP+FFFFFF40]  <---指向Call 1结果 lea eax,[esp]=mov eax,esp
0187:00401CD7  PUSH    EAX
0187:00401CD8  LEA      EDX,[EBP-1C]
0187:00401CDB  PUSH    EDX
0187:00401CDC  LEA      ECX,[EBP-20]
0187:00401CDF  PUSH    ECX
0187:00401CE0  CALL    00401825      <---进入Call 2
0187:00401CE5  ADD      ESP,BYTE +14  <---esp指向Call 2结果
0187:00401CE8  MOV      EAX,[EBP-20]  <---Call 2结果前4位
0187:00401CEB  MOV      [EBP-24],EAX
0187:00401CEE  MOV      DL,[EBP-24]
0187:00401CF1  AND      DL,FF
0187:00401CF4  MOV      ECX,[EBP-3C]
0187:00401CF7  MOV      [ECX],DL
0187:00401CF9  INC      DWORD [EBP-3C]
0187:00401CFC  MOV      EAX,[EBP-24]
0187:00401CFF  SHR      EAX,08
0187:00401D02  AND      AL,FF
0187:00401D04  MOV      EDX,[EBP-3C]
0187:00401D07  MOV      [EDX],AL
0187:00401D09  INC      DWORD [EBP-3C]
0187:00401D0C  MOV      ECX,[EBP-24]
0187:00401D0F  SHR      ECX,10
0187:00401D12  AND      CL,FF
0187:00401D15  MOV      EAX,[EBP-3C]
0187:00401D18  MOV      [EAX],CL
0187:00401D1A  INC      DWORD [EBP-3C]
0187:00401D1D  MOV      EDX,[EBP-24]
0187:00401D20  SHR      EDX,18
0187:00401D23  AND      DL,FF
0187:00401D26  MOV      ECX,[EBP-3C]
0187:00401D29  MOV      [ECX],DL
0187:00401D2B  INC      DWORD [EBP-3C]
0187:00401D2E  MOV      EAX,[EBP-1C]
0187:00401D31  MOV      [EBP-24],EAX
0187:00401D34  MOV      DL,[EBP-24]
0187:00401D37  AND      DL,FF
0187:00401D3A  MOV      ECX,[EBP-3C]
0187:00401D3D  MOV      [ECX],DL
0187:00401D3F  INC      DWORD [EBP-3C]
0187:00401D42  MOV      EAX,[EBP-24]
0187:00401D45  SHR      EAX,08
0187:00401D48  AND      AL,FF
0187:00401D4A  MOV      EDX,[EBP-3C]
0187:00401D4D  MOV      [EDX],AL
0187:00401D4F  INC      DWORD [EBP-3C]
0187:00401D52  MOV      ECX,[EBP-24]
0187:00401D55  SHR      ECX,10
0187:00401D58  AND      CL,FF
0187:00401D5B  MOV      EAX,[EBP-3C]
0187:00401D5E  MOV      [EAX],CL
0187:00401D60  INC      DWORD [EBP-3C]
0187:00401D63  MOV      EDX,[EBP-24]
0187:00401D66  SHR      EDX,18
0187:00401D69  AND      DL,FF
0187:00401D6C  MOV      ECX,[EBP-3C]
0187:00401D6F  MOV      [ECX],DL
0187:00401D71  INC      DWORD [EBP-3C]
0187:00401D74  XOR      EAX,EAX
0187:00401D76  MOV      [EBP-10],EAX
0187:00401D79  MOV      BYTE [EBP-3E],80  <---这几个数据是要参与运算的
0187:00401D7D  MOV      BYTE [EBP-30],00
0187:00401D81  MOV      DWORD [EBP-04],02
0187:00401D88  MOV      BYTE [EBP-3D],00
0187:00401D8C  XOR      EDX,EDX
0187:00401D8E  MOV      [EBP-08],EDX
0187:00401D91  SHL      BYTE [EBP-3D],1
0187:00401D94  MOV      ECX,[EBP-10]
0187:00401D97  MOV      AL,[EBP+ECX-38]  <---取结果第一位
0187:00401D9B  AND      AL,[EBP-3E]
0187:00401D9E  JZ      00401DA4
0187:00401DA0  OR      BYTE [EBP-3D],01
0187:00401DA4  SHR      BYTE [EBP-3E],1
0187:00401DA7  CMP      BYTE [EBP-3E],00
0187:00401DAB  JNZ      00401DB4
0187:00401DAD  INC      DWORD [EBP-10]
0187:00401DB0  MOV      BYTE [EBP-3E],80
0187:00401DB4  INC      DWORD [EBP-08]
0187:00401DB7  CMP      DWORD [EBP-08],BYTE +06  <---上面这一小段作运算
0187:00401DBB  JC      00401D91
0187:00401DBD  XOR      EDX,EDX
0187:00401DBF  MOV      DL,[EBP-3D]
0187:00401DC2  MOV      CL,[EDX+0047E534] <---查表得到注册码,请参照注册机的szDATA
0187:00401DC8  MOV      EAX,[EBP-04]      <---eax=2
0187:00401DCB  MOV      [EAX+00487694],CL <---跳过注册码前两位"Mo"来保存
0187:00401DD1  INC      DWORD [EBP-04]
0187:00401DD4  CMP      DWORD [EBP-04],BYTE +0D  <---注册码为13(D)位
0187:00401DD8  JC      00401D88
0187:00401DDA  MOV      BYTE [004876A1],00 <---最后补上0
0187:00401DE1  MOV      EAX,00487694  <---d 487694,"中间"注册码和正确注册码都保存在此
0187:00401DE6  MOV      ESP,EBP
0187:00401DE8  POP      EBP
0187:00401DE9  RET   


==Call 1=================================================
0187:00401514  PUSH    EBP        <---这里可能有花指令
0187:00401515  MOV      EBP,ESP
0187:00401517  ADD      ESP,BYTE -1C
0187:0040151A  MOV      EAX,[EBP+0C]
0187:0040151D  MOV      [EBP-18],EAX
0187:00401520  MOV      EDX,[EBP+08]
0187:00401523  MOV      [EBP-14],EDX
0187:00401526  MOV      ECX,[EBP-14]
0187:00401529  XOR      EAX,EAX        这里指向注册名变形后的结果
0187:0040152B  MOV      AL,[ECX]  <---A6 C2 DA 40  | AC DE DC 00
0187:0040152D  MOV      [EBP-04],EAX
0187:00401530  INC      DWORD [EBP-14]
0187:00401533  MOV      EDX,[EBP-14]
0187:00401536  XOR      ECX,ECX
0187:00401538  MOV      CL,[EDX]
0187:0040153A  SHL      ECX,08
0187:0040153D  OR      [EBP-04],ECX
0187:00401540  INC      DWORD [EBP-14]
0187:00401543  MOV      EAX,[EBP-14]
0187:00401546  XOR      EDX,EDX
0187:00401548  MOV      DL,[EAX]
0187:0040154A  SHL      EDX,10
0187:0040154D  OR      [EBP-04],EDX
0187:00401550  INC      DWORD [EBP-14]
0187:00401553  MOV      ECX,[EBP-14]
0187:00401556  XOR      EAX,EAX
0187:00401558  MOV      AL,[ECX]
0187:0040155A  SHL      EAX,18
0187:0040155D  OR      [EBP-04],EAX
0187:00401560  INC      DWORD [EBP-14]
0187:00401563  MOV      EDX,[EBP-14]
0187:00401566  XOR      ECX,ECX
0187:00401568  MOV      CL,[EDX]
0187:0040156A  MOV      [EBP-08],ECX
0187:0040156D  INC      DWORD [EBP-14]
0187:00401570  MOV      EAX,[EBP-14]
0187:00401573  XOR      EDX,EDX
0187:00401575  MOV      DL,[EAX]
0187:00401577  SHL      EDX,08
0187:0040157A  OR      [EBP-08],EDX
0187:0040157D  INC      DWORD [EBP-14]
0187:00401580  MOV      ECX,[EBP-14]
0187:00401583  XOR      EAX,EAX
0187:00401585  MOV      AL,[ECX]
0187:00401587  SHL      EAX,10
0187:0040158A  OR      [EBP-08],EAX
0187:0040158D  INC      DWORD [EBP-14]
0187:00401590  MOV      EDX,[EBP-14]
0187:00401593  XOR      ECX,ECX
0187:00401595  MOV      CL,[EDX]
0187:00401597  SHL      ECX,18            这上面是将它变成这样
0187:0040159A  OR      [EBP-08],ECX  <---AC DE DC 00 | A6 C2 DA 40
0187:0040159D  INC      DWORD [EBP-14]
0187:004015A0  MOV      EAX,[EBP-08]  <---这里下面进行了前后4位相互间的运算
0187:004015A3  SHR      EAX,04            调试时注意几个地方就能搞清楚,
0187:004015A6  XOR      EAX,[EBP-04]      [ebp-8]是前4位,[ebp-4]是后4位
0187:004015A9  AND      EAX,0F0F0F0F      [ebp-c]保存临时结果,其它的是些数据
0187:004015AE  MOV      [EBP-0C],EAX      指针和计数器等
0187:004015B1  MOV      EDX,[EBP-0C]
0187:004015B4  XOR      [EBP-04],EDX
0187:004015B7  MOV      ECX,[EBP-0C]
0187:004015BA  SHL      ECX,04
0187:004015BD  XOR      [EBP-08],ECX
0187:004015C0  MOV      EAX,[EBP-04]
0187:004015C3  SHL      EAX,12
0187:004015C6  XOR      EAX,[EBP-04]
0187:004015C9  AND      EAX,CCCC0000
0187:004015CE  MOV      [EBP-0C],EAX
0187:004015D1  MOV      EDX,[EBP-04]
0187:004015D4  XOR      EDX,[EBP-0C]
0187:004015D7  MOV      ECX,[EBP-0C]
0187:004015DA  SHR      ECX,12
0187:004015DD  XOR      EDX,ECX
0187:004015DF  MOV      [EBP-04],EDX
0187:004015E2  MOV      EAX,[EBP-08]
0187:004015E5  SHL      EAX,12
0187:004015E8  XOR      EAX,[EBP-08]
0187:004015EB  AND      EAX,CCCC0000
0187:004015F0  MOV      [EBP-0C],EAX
0187:004015F3  MOV      EDX,[EBP-08]
0187:004015F6  XOR      EDX,[EBP-0C]
0187:004015F9  MOV      ECX,[EBP-0C]
0187:004015FC  SHR      ECX,12
0187:004015FF  XOR      EDX,ECX
0187:00401601  MOV      [EBP-08],EDX
0187:00401604  MOV      EAX,[EBP-08]
0187:00401607  SHR      EAX,1
0187:00401609  XOR      EAX,[EBP-04]
0187:0040160C  AND      EAX,55555555
0187:00401611  MOV      [EBP-0C],EAX
0187:00401614  MOV      EDX,[EBP-0C]
0187:00401617  XOR      [EBP-04],EDX
0187:0040161A  MOV      ECX,[EBP-0C]
0187:0040161D  ADD      ECX,ECX
0187:0040161F  XOR      [EBP-08],ECX
0187:00401622  MOV      EAX,[EBP-04]
0187:00401625  SHR      EAX,08
0187:00401628  XOR      EAX,[EBP-08]
0187:0040162B  AND      EAX,00FF00FF
0187:00401630  MOV      [EBP-0C],EAX
0187:00401633  MOV      EDX,[EBP-0C]
0187:00401636  XOR      [EBP-08],EDX
0187:00401639  MOV      ECX,[EBP-0C]
0187:0040163C  SHL      ECX,08
0187:0040163F  XOR      [EBP-04],ECX
0187:00401642  MOV      EAX,[EBP-08]
0187:00401645  SHR      EAX,1
0187:00401647  XOR      EAX,[EBP-04]
0187:0040164A  AND      EAX,55555555
0187:0040164F  MOV      [EBP-0C],EAX
0187:00401652  MOV      EDX,[EBP-0C]
0187:00401655  XOR      [EBP-04],EDX
0187:00401658  MOV      ECX,[EBP-0C]
0187:0040165B  ADD      ECX,ECX
0187:0040165D  XOR      [EBP-08],ECX
0187:00401660  MOV      EAX,[EBP-08]
0187:00401663  AND      EAX,FF
0187:00401668  SHL      EAX,10
0187:0040166B  MOV      EDX,[EBP-08]
0187:0040166E  AND      EDX,FF00
0187:00401674  OR      EAX,EDX
0187:00401676  MOV      ECX,[EBP-08]
0187:00401679  AND      ECX,00FF0000
0187:0040167F  SHR      ECX,10
0187:00401682  OR      EAX,ECX
0187:00401684  MOV      EDX,[EBP-04]
0187:00401687  AND      EDX,F0000000
0187:0040168D  SHR      EDX,04
0187:00401690  OR      EAX,EDX
0187:00401692  MOV      [EBP-08],EAX
0187:00401695  AND      DWORD [EBP-04],0FFFFFFF
0187:0040169C  XOR      EAX,EAX
0187:0040169E  MOV      [EBP-1C],EAX
0187:004016A1  MOV      ECX,[EBP-1C]            <---从这里开始至ret前是一个循环
0187:004016A4  CMP      BYTE [ECX+0047E4A4],00  <---这里查表使下面的运算产生分支
0187:004016AB  JZ      004016D1                    数据参照注册机的DATA5
0187:004016AD  MOV      EAX,[EBP-04]
0187:004016B0  SHR      EAX,02
0187:004016B3  MOV      EDX,[EBP-04]
0187:004016B6  SHL      EDX,1A
0187:004016B9  OR      EAX,EDX
0187:004016BB  MOV      [EBP-04],EAX
0187:004016BE  MOV      ECX,[EBP-08]
0187:004016C1  SHR      ECX,02
0187:004016C4  MOV      EAX,[EBP-08]
0187:004016C7  SHL      EAX,1A
0187:004016CA  OR      ECX,EAX
0187:004016CC  MOV      [EBP-08],ECX
0187:004016CF  JMP      SHORT 004016F1
0187:004016D1  MOV      EDX,[EBP-04]
0187:004016D4  SHR      EDX,1
0187:004016D6  MOV      ECX,[EBP-04]
0187:004016D9  SHL      ECX,1B
0187:004016DC  OR      EDX,ECX
0187:004016DE  MOV      [EBP-04],EDX
0187:004016E1  MOV      EAX,[EBP-08]
0187:004016E4  SHR      EAX,1
0187:004016E6  MOV      EDX,[EBP-08]
0187:004016E9  SHL      EDX,1B
0187:004016EC  OR      EAX,EDX
0187:004016EE  MOV      [EBP-08],EAX
0187:004016F1  AND      DWORD [EBP-04],0FFFFFFF
0187:004016F8  AND      DWORD [EBP-08],0FFFFFFF
0187:004016FF  MOV      ECX,[EBP-04]
0187:00401702  SHR      ECX,06
0187:00401705  AND      ECX,BYTE +03
0187:00401708  MOV      EAX,[EBP-04]
0187:0040170B  SHR      EAX,07
0187:0040170E  AND      EAX,BYTE +3C
0187:00401711  OR      ECX,EAX
0187:00401713  MOV      EDX,[ECX*4+0047DDA4]  <---往下请注意此形式的代码,它是在查表
0187:0040171A  MOV      ECX,[EBP-04]              共有3个表,每个都很大
0187:0040171D  AND      ECX,BYTE +3F
0187:00401720  OR      EDX,[ECX*4+0047DCA4]  <---47DCA4是表1的开始,请参照注册机的DATA2
0187:00401727  MOV      EAX,[EBP-04]
0187:0040172A  SHR      EAX,0D
0187:0040172D  AND      EAX,BYTE +0F
0187:00401730  MOV      ECX,[EBP-04]
0187:00401733  SHR      ECX,0E
0187:00401736  AND      ECX,BYTE +30
0187:00401739  OR      EAX,ECX
0187:0040173B  OR      EDX,[EAX*4+0047DEA4]
0187:00401742  MOV      EAX,[EBP-04]
0187:00401745  SHR      EAX,14
0187:00401748  AND      EAX,BYTE +01
0187:0040174B  MOV      ECX,[EBP-04]
0187:0040174E  SHR      ECX,15
0187:00401751  AND      ECX,BYTE +06
0187:00401754  OR      EAX,ECX
0187:00401756  MOV      ECX,[EBP-04]
0187:00401759  SHR      ECX,16
0187:0040175C  AND      ECX,BYTE +38
0187:0040175F  OR      EAX,ECX
0187:00401761  OR      EDX,[EAX*4+0047DFA4]
0187:00401768  MOV      [EBP-10],EDX
0187:0040176B  MOV      EAX,[EBP-08]
0187:0040176E  SHR      EAX,07
0187:00401771  AND      EAX,BYTE +03
0187:00401774  MOV      EDX,[EBP-08]
0187:00401777  SHR      EDX,08
0187:0040177A  AND      EDX,BYTE +3C
0187:0040177D  OR      EAX,EDX
0187:0040177F  MOV      EAX,[EAX*4+0047E1A4]
0187:00401786  MOV      EDX,[EBP-08]
0187:00401789  AND      EDX,BYTE +3F
0187:0040178C  OR      EAX,[EDX*4+0047E0A4]  <---表2开始,请参照注册机的DATA3
0187:00401793  MOV      ECX,[EBP-08]
0187:00401796  SHR      ECX,0F
0187:00401799  AND      ECX,BYTE +3F
0187:0040179C  OR      EAX,[ECX*4+0047E2A4]
0187:004017A3  MOV      EDX,[EBP-08]
0187:004017A6  SHR      EDX,15
0187:004017A9  AND      EDX,BYTE +0F
0187:004017AC  MOV      ECX,[EBP-08]
0187:004017AF  SHR      ECX,16
0187:004017B2  AND      ECX,BYTE +30
0187:004017B5  OR      EDX,ECX
0187:004017B7  OR      EAX,[EDX*4+0047E3A4]
0187:004017BE  MOV      [EBP-0C],EAX
0187:004017C1  MOV      EAX,[EBP-0C]
0187:004017C4  SHL      EAX,10
0187:004017C7  MOV      EDX,[EBP-10]
0187:004017CA  AND      EDX,FFFF
0187:004017D0  OR      EAX,EDX
0187:004017D2  AND      EAX,BYTE -01
0187:004017D5  MOV      ECX,[EBP-18]
0187:004017D8  MOV      [ECX],EAX              <---保存在此,请打d ecx观察运算的结果
0187:004017DA  ADD      DWORD [EBP-18],BYTE +04
0187:004017DE  MOV      EAX,[EBP-10]
0187:004017E1  SHR      EAX,10
0187:004017E4  MOV      EDX,[EBP-0C]
0187:004017E7  AND      EDX,FFFF0000
0187:004017ED  OR      EAX,EDX
0187:004017EF  MOV      [EBP-10],EAX
0187:004017F2  MOV      EAX,[EBP-10]
0187:004017F5  SHL      EAX,04
0187:004017F8  MOV      ECX,[EBP-10]
0187:004017FB  SHR      ECX,1C
0187:004017FE  OR      EAX,ECX
0187:00401800  MOV      [EBP-10],EAX
0187:00401803  MOV      EAX,[EBP-10]
0187:00401806  AND      EAX,BYTE -01
0187:00401809  MOV      EDX,[EBP-18]
0187:0040180C  MOV      [EDX],EAX            <---保存在此
0187:0040180E  ADD      DWORD [EBP-18],BYTE +04
0187:00401812  INC      DWORD [EBP-1C]
0187:00401815  CMP      DWORD [EBP-1C],BYTE +10  <---共循环16(D)次,循环完后会在内存中产生
0187:00401819  JL      NEAR 004016A1                一个共32(D) dword的数据
0187:0040181F  XOR      EAX,EAX
0187:00401821  MOV      ESP,EBP
0187:00401823  POP      EBP
0187:00401824  RET                <---请先返回Main Call


==Call 2==========================================================
0187:00401825  PUSH    EBP
0187:00401826  MOV      EBP,ESP
0187:00401828  ADD      ESP,BYTE -24
0187:0040182B  XOR      EAX,EAX
0187:0040182D  MOV      [EBP-04],EAX
0187:00401830  XOR      EDX,EDX
0187:00401832  MOV      [EBP-08],EDX
0187:00401835  MOV      ECX,[EBP+10]
0187:00401838  MOV      [EBP-14],ECX
0187:0040183B  MOV      EAX,[EBP+14]  <---这是用"M"查表得到的18
0187:0040183E  MOV      [EBP-20],EAX  <---Save Here
0187:00401841  MOV      EDX,[EBP+18]  <---这是用"o"查表得到的340
0187:00401844  MOV      [EBP-24],EDX  <---Save Here
0187:00401847  XOR      ECX,ECX
0187:00401849  MOV      [EBP-1C],ECX  <---计数器
0187:0040184C  XOR      EAX,EAX
0187:0040184E  MOV      [EBP-18],EAX
0187:00401851  MOV      EDX,[EBP-08]
0187:00401854  SHR      EDX,10
0187:00401857  XOR      EDX,[EBP-08]
0187:0040185A  MOV      [EBP-0C],EDX
0187:0040185D  MOV      ECX,[EBP-0C]
0187:00401860  AND      ECX,[EBP-20]
0187:00401863  MOV      [EBP-10],ECX
0187:00401866  MOV      EAX,[EBP-24]
0187:00401869  AND      [EBP-0C],EAX
0187:0040186C  MOV      EDX,[EBP-14]  <---指向Call 1结果
0187:0040186F  MOV      ECX,[EBP-18]
0187:00401872  MOV      EAX,[EDX+ECX*4]    <---取第1个dword
0187:00401875  MOV      EDX,[EBP-10]
0187:00401878  SHL      EDX,10
0187:0040187B  XOR      EDX,[EBP-10]
0187:0040187E  XOR      EDX,[EBP-08]
0187:00401881  XOR      EAX,EDX
0187:00401883  MOV      [EBP-10],EAX
0187:00401886  MOV      ECX,[EBP-14]
0187:00401889  MOV      EAX,[EBP-18]
0187:0040188C  MOV      EDX,[ECX+EAX*4+04] <---取第2个dword
0187:00401890  MOV      ECX,[EBP-0C]
0187:00401893  SHL      ECX,10
0187:00401896  XOR      ECX,[EBP-0C]
0187:00401899  XOR      ECX,[EBP-08]
0187:0040189C  XOR      EDX,ECX
0187:0040189E  MOV      [EBP-0C],EDX
0187:004018A1  MOV      EAX,[EBP-0C]
0187:004018A4  SHR      EAX,04
0187:004018A7  MOV      EDX,[EBP-0C]
0187:004018AA  SHL      EDX,1C
0187:004018AD  OR      EAX,EDX
0187:004018AF  MOV      [EBP-0C],EAX
0187:004018B2  MOV      ECX,[EBP-0C]
0187:004018B5  AND      ECX,BYTE +3F
0187:004018B8  MOV      EAX,[ECX*4+0047D5A4]  <---经运算后查表
0187:004018BF  MOV      EDX,[EBP-0C]
0187:004018C2  SHR      EDX,08
0187:004018C5  AND      EDX,BYTE +3F
0187:004018C8  OR      EAX,[EDX*4+0047D7A4]
0187:004018CF  MOV      ECX,[EBP-0C]
0187:004018D2  SHR      ECX,10
0187:004018D5  AND      ECX,BYTE +3F
0187:004018D8  OR      EAX,[ECX*4+0047D9A4]
0187:004018DF  MOV      EDX,[EBP-0C]
0187:004018E2  SHR      EDX,18
0187:004018E5  AND      EDX,BYTE +3F
0187:004018E8  OR      EAX,[EDX*4+0047DBA4]
0187:004018EF  MOV      ECX,[EBP-10]
0187:004018F2  AND      ECX,BYTE +3F
0187:004018F5  OR      EAX,[ECX*4+0047D4A4]  <---表3开始,请参照注册机的DATA4
0187:004018FC  MOV      EDX,[EBP-10]
0187:004018FF  SHR      EDX,08
0187:00401902  AND      EDX,BYTE +3F
0187:00401905  OR      EAX,[EDX*4+0047D6A4]
0187:0040190C  MOV      ECX,[EBP-10]
0187:0040190F  SHR      ECX,10
0187:00401912  AND      ECX,BYTE +3F
0187:00401915  OR      EAX,[ECX*4+0047D8A4]
0187:0040191C  MOV      EDX,[EBP-10]
0187:0040191F  SHR      EDX,18
0187:00401922  AND      EDX,BYTE +3F
0187:00401925  OR      EAX,[EDX*4+0047DAA4]
0187:0040192C  XOR      [EBP-04],EAX
0187:0040192F  MOV      EAX,[EBP-04]
0187:00401932  SHR      EAX,10
0187:00401935  XOR      EAX,[EBP-04]
0187:00401938  MOV      [EBP-0C],EAX
0187:0040193B  MOV      ECX,[EBP-0C]
0187:0040193E  AND      ECX,[EBP-20]
0187:00401941  MOV      [EBP-10],ECX
0187:00401944  MOV      EAX,[EBP-24]
0187:00401947  AND      [EBP-0C],EAX
0187:0040194A  MOV      EDX,[EBP-14]
0187:0040194D  MOV      ECX,[EBP-18]
0187:00401950  MOV      EAX,[EDX+ECX*4+08] <---取第3个dword
0187:00401954  MOV      EDX,[EBP-10]
0187:00401957  SHL      EDX,10
0187:0040195A  XOR      EDX,[EBP-10]
0187:0040195D  XOR      EDX,[EBP-04]
0187:00401960  XOR      EAX,EDX
0187:00401962  MOV      [EBP-10],EAX
0187:00401965  MOV      ECX,[EBP-14]
0187:00401968  MOV      EAX,[EBP-18]
0187:0040196B  MOV      EDX,[ECX+EAX*4+0C] <---取第4个dword
0187:0040196F  MOV      ECX,[EBP-0C]
0187:00401972  SHL      ECX,10
0187:00401975  XOR      ECX,[EBP-0C]
0187:00401978  XOR      ECX,[EBP-04]
0187:0040197B  XOR      EDX,ECX
0187:0040197D  MOV      [EBP-0C],EDX
0187:00401980  MOV      EAX,[EBP-0C]
0187:00401983  SHR      EAX,04
0187:00401986  MOV      EDX,[EBP-0C]
0187:00401989  SHL      EDX,1C
0187:0040198C  OR      EAX,EDX
0187:0040198E  MOV      [EBP-0C],EAX
0187:00401991  MOV      ECX,[EBP-0C]
0187:00401994  AND      ECX,BYTE +3F
0187:00401997  MOV      EAX,[ECX*4+0047D5A4]  <---查表3
0187:0040199E  MOV      EDX,[EBP-0C]
0187:004019A1  SHR      EDX,08
0187:004019A4  AND      EDX,BYTE +3F
0187:004019A7  OR      EAX,[EDX*4+0047D7A4]
0187:004019AE  MOV      ECX,[EBP-0C]
0187:004019B1  SHR      ECX,10
0187:004019B4  AND      ECX,BYTE +3F
0187:004019B7  OR      EAX,[ECX*4+0047D9A4]
0187:004019BE  MOV      EDX,[EBP-0C]
0187:004019C1  SHR      EDX,18
0187:004019C4  AND      EDX,BYTE +3F
0187:004019C7  OR      EAX,[EDX*4+0047DBA4]
0187:004019CE  MOV      ECX,[EBP-10]
0187:004019D1  AND      ECX,BYTE +3F
0187:004019D4  OR      EAX,[ECX*4+0047D4A4]
0187:004019DB  MOV      EDX,[EBP-10]
0187:004019DE  SHR      EDX,08
0187:004019E1  AND      EDX,BYTE +3F
0187:004019E4  OR      EAX,[EDX*4+0047D6A4]
0187:004019EB  MOV      ECX,[EBP-10]
0187:004019EE  SHR      ECX,10
0187:004019F1  AND      ECX,BYTE +3F
0187:004019F4  OR      EAX,[ECX*4+0047D8A4]
0187:004019FB  MOV      EDX,[EBP-10]
0187:004019FE  SHR      EDX,18
0187:00401A01  AND      EDX,BYTE +3F
0187:00401A04  OR      EAX,[EDX*4+0047DAA4]
0187:00401A0B  XOR      [EBP-08],EAX
0187:00401A0E  ADD      DWORD [EBP-18],BYTE +04
0187:00401A12  CMP      DWORD [EBP-18],BYTE +20  <---循环8次,每次处理4个dword
0187:00401A16  JL      NEAR 00401851
0187:00401A1C  MOV      EAX,[EBP-04]
0187:00401A1F  MOV      [EBP-0C],EAX
0187:00401A22  MOV      ECX,[EBP-08]
0187:00401A25  MOV      [EBP-04],ECX
0187:00401A28  MOV      EAX,[EBP-0C]
0187:00401A2B  MOV      [EBP-08],EAX
0187:00401A2E  INC      DWORD [EBP-1C]
0187:00401A31  CMP      DWORD [EBP-1C],BYTE +19  <---这是大循环,共25(D)次,循环完后
0187:00401A35  JL      NEAR 0040184C                就会得到一个2个dword的数据
0187:00401A3B  MOV      EDX,[EBP-08]
0187:00401A3E  MOV      [EBP-0C],EDX
0187:00401A41  MOV      ECX,[EBP-04]
0187:00401A44  SHR      ECX,1
0187:00401A46  MOV      EAX,[EBP-04]
0187:00401A49  SHL      EAX,1F
0187:00401A4C  OR      ECX,EAX
0187:00401A4E  MOV      [EBP-08],ECX
0187:00401A51  MOV      EDX,[EBP-0C]
0187:00401A54  SHR      EDX,1
0187:00401A56  MOV      ECX,[EBP-0C]
0187:00401A59  SHL      ECX,1F
0187:00401A5C  OR      EDX,ECX
0187:00401A5E  MOV      [EBP-04],EDX
0187:00401A61  AND      DWORD [EBP-04],BYTE -01
0187:00401A65  AND      DWORD [EBP-08],BYTE -01
0187:00401A69  MOV      EAX,[EBP-08]
0187:00401A6C  SHR      EAX,1
0187:00401A6E  XOR      EAX,[EBP-04]
0187:00401A71  AND      EAX,55555555
0187:00401A76  MOV      [EBP-0C],EAX
0187:00401A79  MOV      EDX,[EBP-0C]
0187:00401A7C  XOR      [EBP-04],EDX
0187:00401A7F  MOV      ECX,[EBP-0C]
0187:00401A82  ADD      ECX,ECX
0187:00401A84  XOR      [EBP-08],ECX
0187:00401A87  MOV      EAX,[EBP-04]
0187:00401A8A  SHR      EAX,08
0187:00401A8D  XOR      EAX,[EBP-08]
0187:00401A90  AND      EAX,00FF00FF
0187:00401A95  MOV      [EBP-0C],EAX
0187:00401A98  MOV      EDX,[EBP-0C]
0187:00401A9B  XOR      [EBP-08],EDX
0187:00401A9E  MOV      ECX,[EBP-0C]
0187:00401AA1  SHL      ECX,08
0187:00401AA4  XOR      [EBP-04],ECX
0187:00401AA7  MOV      EAX,[EBP-08]
0187:00401AAA  SHR      EAX,02
0187:00401AAD  XOR      EAX,[EBP-04]
0187:00401AB0  AND      EAX,33333333
0187:00401AB5  MOV      [EBP-0C],EAX
0187:00401AB8  MOV      EDX,[EBP-0C]
0187:00401ABB  XOR      [EBP-04],EDX
0187:00401ABE  MOV      ECX,[EBP-0C]
0187:00401AC1  SHL      ECX,02
0187:00401AC4  XOR      [EBP-08],ECX
0187:00401AC7  MOV      EAX,[EBP-04]
0187:00401ACA  SHR      EAX,10
0187:00401ACD  XOR      EAX,[EBP-08]
0187:00401AD0  AND      EAX,FFFF
0187:00401AD5  MOV      [EBP-0C],EAX
0187:00401AD8  MOV      EDX,[EBP-0C]
0187:00401ADB  XOR      [EBP-08],EDX
0187:00401ADE  MOV      ECX,[EBP-0C]
0187:00401AE1  SHL      ECX,10
0187:00401AE4  XOR      [EBP-04],ECX
0187:00401AE7  MOV      EAX,[EBP-08]
0187:00401AEA  SHR      EAX,04
0187:00401AED  XOR      EAX,[EBP-04]
0187:00401AF0  AND      EAX,0F0F0F0F
0187:00401AF5  MOV      [EBP-0C],EAX
0187:00401AF8  MOV      EDX,[EBP-0C]
0187:00401AFB  XOR      [EBP-04],EDX
0187:00401AFE  MOV      ECX,[EBP-0C]
0187:00401B01  SHL      ECX,04
0187:00401B04  XOR      [EBP-08],ECX
0187:00401B07  MOV      EAX,[EBP+08]
0187:00401B0A  MOV      EDX,[EBP-04]
0187:00401B0D  MOV      [EAX],EDX    <---上面得到的数据再经过运算保存在这里
0187:00401B0F  MOV      ECX,[EBP+0C]
0187:00401B12  MOV      EAX,[EBP-08]
0187:00401B15  MOV      [ECX],EAX    <---Save here
0187:00401B17  XOR      EAX,EAX
0187:00401B19  MOV      ESP,EBP
0187:00401B1B  POP      EBP
0187:00401B1C  RET   
==End=============================================================
      _/_/_/
    _/          _/_/_/  _/_/_/  _/_/
    _/_/    _/    _/  _/    _/    _/
        _/  _/    _/  _/    _/    _/
_/_/_/      _/_/_/  _/    _/    _/

                                              Sam.com
                                          5:10 2002-3-29

  • 标 题:注册机~~~~~~~~~~~~~汇编的~~~~~~~ (29千字)
  • 作 者:Sam.com
  • 时 间:2002-3-29 5:27:26
  • 链 接:http://bbs.pediy.com

==KeyGen=========================================================
附上注册机,将下面第1段代码保存为.rek文件,第2段代码保存为.asm文件,在注册机编写器中的声明里写入include ...\..\???.asm一行,请改为你保存的绝对路径,用注册机编写器编译,注册机编写器1.65测试通过.支持中文名,注意在编译后最好将声明中的东西删掉,不然以后写注册机的时候它找不到.asm文件就会编译不了,但它并不会告诉你到底是那里出错,我曾经碰上以为是源码的问题,改了又改,呵呵~~~~~~~

其实写这个注册机不难,我只是将上面的代码经过处理(文件处理大师和txt2asm很好用呀),再经过修改就搞掂了,刚开始我还担心堆栈的问题,怕结果不正确,谁知改好后一运行,结果是正确的,这全靠程序中的sub esp,??这样的语句,相当于子程序里的宏指令"LOCAL",它会自动为我们的子程序分配空间来保存参数.那为什么我们要分开两个文件来处理呢,因为注册机编写器的作者在它的模块里有这样一句KeyDialogProc proc uses ebx edi esi....我们写的源码就放在这个子程序里,所以如果我们将代码都放在一起且只用简单的Call来调用的话,程序也能运行,但生成的程序在第个子程序后都加了pop esi,pop edi,pop ebx三句,这样一来我们就必须在子程序前加上push,那么我们的堆栈指针就会乱掉,结果可能就不正确了.

做这个注册机最麻烦的是改源码,因为汇编我还不熟,一些语句写得不规范,老是编译不成功,下面我会有些注解,希望初学者能学到一点.

;==从这里开始保存为.rek文件====================================
.data
szHomePage db "http://www.365hz.net",0
szEmail    db "mailto:ljyljx@163.com",0
szErrMess  db "输入的序列号不正确!",0
szChar    db "MobileSearch2",0

DATA1  db 47 dup (0)
        db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah
        db 0Bh,05h,06h,07h,08h,09h,0Ah,0Bh,0Ch,0Dh
        db 0Eh,0Fh,10h,11h,12h,13h,14h,15h,16h,17h
        db 18h,19h,1Ah,1Bh,1Ch,1Dh,1Eh,1Fh,20h,21h
        db 22h,23h,24h,25h,20h,21h,22h,23h,24h,25h
        db 26h,27h,28h,29h,2Ah,2Bh,2Ch,2Dh,2Eh,2Fh
        db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
        db 3Ah,3Bh,3Ch,3Dh,3Eh,3Fh,00h,00h,00h,00h,00

DATA2    dd 00000000h,00000010h,20000000h,20000010h
    dd 00010000h,00010010h,20010000h,20010010h
    dd 00000800h,00000810h,20000800h,20000810h
    dd 00010800h,00010810h,20010800h,20010810h
    dd 00000020h,00000030h,20000020h,20000030h
    dd 00010020h,00010030h,20010020h,20010030h
    dd 00000820h,00000830h,20000820h,20000830h
    dd 00010820h,00010830h,20010820h,20010830h
    dd 00080000h,00080010h,20080000h,20080010h
    dd 00090000h,00090010h,20090000h,20090010h
    dd 00080800h,00080810h,20080800h,20080810h
    dd 00090800h,00090810h,20090800h,20090810h
    dd 00080020h,00080030h,20080020h,20080030h
    dd 00090020h,00090030h,20090020h,20090030h
    dd 00080820h,00080830h,20080820h,20080830h
    dd 00090820h,00090830h,20090820h,20090830h
    dd 00000000h,02000000h,00002000h,02002000h
    dd 00200000h,02200000h,00202000h,02202000h
    dd 00000004h,02000004h,00002004h,02002004h
    dd 00200004h,02200004h,00202004h,02202004h
    dd 00000400h,02000400h,00002400h,02002400h
    dd 00200400h,02200400h,00202400h,02202400h
    dd 00000404h,02000404h,00002404h,02002404h
    dd 00200404h,02200404h,00202404h,02202404h
    dd 10000000h,12000000h,10002000h,12002000h
    dd 10200000h,12200000h,10202000h,12202000h
    dd 10000004h,12000004h,10002004h,12002004h
    dd 10200004h,12200004h,10202004h,12202004h
    dd 10000400h,12000400h,10002400h,12002400h
    dd 10200400h,12200400h,10202400h,12202400h
    dd 10000404h,12000404h,10002404h,12002404h
    dd 10200404h,12200404h,10202404h,12202404h
    dd 00000000h,00000001h,00040000h,00040001h
    dd 01000000h,01000001h,01040000h,01040001h
    dd 00000002h,00000003h,00040002h,00040003h
    dd 01000002h,01000003h,01040002h,01040003h
    dd 00000200h,00000201h,00040200h,00040201h
    dd 01000200h,01000201h,01040200h,01040201h
    dd 00000202h,00000203h,00040202h,00040203h
    dd 01000202h,01000203h,01040202h,01040203h
    dd 08000000h,08000001h,08040000h,08040001h
    dd 09000000h,09000001h,09040000h,09040001h
    dd 08000002h,08000003h,08040002h,08040003h
    dd 09000002h,09000003h,09040002h,09040003h
    dd 08000200h,08000201h,08040200h,08040201h
    dd 09000200h,09000201h,09040200h,09040201h
    dd 08000202h,08000203h,08040202h,08040203h
    dd 09000202h,09000203h,09040202h,09040203h
    dd 00000000h,00100000h,00000100h,00100100h
    dd 00000008h,00100008h,00000108h,00100108h
    dd 00001000h,00101000h,00001100h,00101100h
    dd 00001008h,00101008h,00001108h,00101108h
    dd 04000000h,04100000h,04000100h,04100100h
    dd 04000008h,04100008h,04000108h,04100108h
    dd 04001000h,04101000h,04001100h,04101100h
    dd 04001008h,04101008h,04001108h,04101108h
    dd 00020000h,00120000h,00020100h,00120100h
    dd 00020008h,00120008h,00020108h,00120108h
    dd 00021000h,00121000h,00021100h,00121100h
    dd 00021008h,00121008h,00021108h,00121108h
    dd 04020000h,04120000h,04020100h,04120100h
    dd 04020008h,04120008h,04020108h,04120108h
    dd 04021000h,04121000h,04021100h,04121100h
    dd 04021008h,04121008h,04021108h,04121108h

DATA3  dd 00000000h,10000000h,00010000h,10010000h
    dd 00000004h,10000004h,00010004h,10010004h
    dd 20000000h,30000000h,20010000h,30010000h
    dd 20000004h,30000004h,20010004h,30010004h
    dd 00100000h,10100000h,00110000h,10110000h
    dd 00100004h,10100004h,00110004h,10110004h
    dd 20100000h,30100000h,20110000h,30110000h
    dd 20100004h,30100004h,20110004h,30110004h
    dd 00001000h,10001000h,00011000h,10011000h
    dd 00001004h,10001004h,00011004h,10011004h
    dd 20001000h,30001000h,20011000h,30011000h
    dd 20001004h,30001004h,20011004h,30011004h
    dd 00101000h,10101000h,00111000h,10111000h
    dd 00101004h,10101004h,00111004h,10111004h
    dd 20101000h,30101000h,20111000h,30111000h
    dd 20101004h,30101004h,20111004h,30111004h
    dd 00000000h,08000000h,00000008h,08000008h
    dd 00000400h,08000400h,00000408h,08000408h
    dd 00020000h,08020000h,00020008h,08020008h
    dd 00020400h,08020400h,00020408h,08020408h
    dd 00000001h,08000001h,00000009h,08000009h
    dd 00000401h,08000401h,00000409h,08000409h
    dd 00020001h,08020001h,00020009h,08020009h
    dd 00020401h,08020401h,00020409h,08020409h
    dd 02000000h,0A000000h,02000008h,0A000008h
    dd 02000400h,0A000400h,02000408h,0A000408h
    dd 02020000h,0A020000h,02020008h,0A020008h
    dd 02020400h,0A020400h,02020408h,0A020408h
    dd 02000001h,0A000001h,02000009h,0A000009h
    dd 02000401h,0A000401h,02000409h,0A000409h
    dd 02020001h,0A020001h,02020009h,0A020009h
    dd 02020401h,0A020401h,02020409h,0A020409h
    dd 00000000h,00000100h,00080000h,00080100h
    dd 01000000h,01000100h,01080000h,01080100h
    dd 00000010h,00000110h,00080010h,00080110h
    dd 01000010h,01000110h,01080010h,01080110h
    dd 00200000h,00200100h,00280000h,00280100h
    dd 01200000h,01200100h,01280000h,01280100h
    dd 00200010h,00200110h,00280010h,00280110h
    dd 01200010h,01200110h,01280010h,01280110h
    dd 00000200h,00000300h,00080200h,00080300h
    dd 01000200h,01000300h,01080200h,01080300h
    dd 00000210h,00000310h,00080210h,00080310h
    dd 01000210h,01000310h,01080210h,01080310h
    dd 00200200h,00200300h,00280200h,00280300h
    dd 01200200h,01200300h,01280200h,01280300h
    dd 00200210h,00200310h,00280210h,00280310h
    dd 01200210h,01200310h,01280210h,01280310h
    dd 00000000h,04000000h,00040000h,04040000h
    dd 00000002h,04000002h,00040002h,04040002h
    dd 00002000h,04002000h,00042000h,04042000h
    dd 00002002h,04002002h,00042002h,04042002h
    dd 00000020h,04000020h,00040020h,04040020h
    dd 00000022h,04000022h,00040022h,04040022h
    dd 00002020h,04002020h,00042020h,04042020h
    dd 00002022h,04002022h,00042022h,04042022h
    dd 00000800h,04000800h,00040800h,04040800h
    dd 00000802h,04000802h,00040802h,04040802h
    dd 00002800h,04002800h,00042800h,04042800h
    dd 00002802h,04002802h,00042802h,04042802h
    dd 00000820h,04000820h,00040820h,04040820h
    dd 00000822h,04000822h,00040822h,04040822h
    dd 00002820h,04002820h,00042820h,04042820h
    dd 00002822h,04002822h,00042822h,04042822h

DATA4    dd 00820200h,00020000h,80800000h,80820200h
    dd 00800000h,80020200h,80020000h,80800000h
    dd 80020200h,00820200h,00820000h,80000200h
    dd 80800200h,00800000h,00000000h,80020000h
    dd 00020000h,80000000h,00800200h,00020200h
    dd 80820200h,00820000h,80000200h,00800200h
    dd 80000000h,00000200h,00020200h,80820000h
    dd 00000200h,80800200h,80820000h,00000000h
    dd 00000000h,80820200h,00800200h,80020000h
    dd 00820200h,00020000h,80000200h,00800200h
    dd 80820000h,00000200h,00020200h,80800000h
    dd 80020200h,80000000h,80800000h,00820000h
    dd 80820200h,00020200h,00820000h,80800200h
    dd 00800000h,80000200h,80020000h,00000000h
    dd 00020000h,00800000h,80800200h,00820200h
    dd 80000000h,80820000h,00000200h,80020200h
    dd 10042004h,00000000h,00042000h,10040000h
    dd 10000004h,00002004h,10002000h,00042000h
    dd 00002000h,10040004h,00000004h,10002000h
    dd 00040004h,10042000h,10040000h,00000004h
    dd 00040000h,10002004h,10040004h,00002000h
    dd 00042004h,10000000h,00000000h,00040004h
    dd 10002004h,00042004h,10042000h,10000004h
    dd 10000000h,00040000h,00002004h,10042004h
    dd 00040004h,10042000h,10002000h,00042004h
    dd 10042004h,00040004h,10000004h,00000000h
    dd 10000000h,00002004h,00040000h,10040004h
    dd 00002000h,10000000h,00042004h,10002004h
    dd 10042000h,00002000h,00000000h,10000004h
    dd 00000004h,10042004h,00042000h,10040000h
    dd 10040004h,00040000h,00002004h,10002000h
    dd 10002004h,00000004h,10040000h,00042000h
    dd 41000000h,01010040h,00000040h,41000040h
    dd 40010000h,01000000h,41000040h,00010040h
    dd 01000040h,00010000h,01010000h,40000000h
    dd 41010040h,40000040h,40000000h,41010000h
    dd 00000000h,40010000h,01010040h,00000040h
    dd 40000040h,41010040h,00010000h,41000000h
    dd 41010000h,01000040h,40010040h,01010000h
    dd 00010040h,00000000h,01000000h,40010040h
    dd 01010040h,00000040h,40000000h,00010000h
    dd 40000040h,40010000h,01010000h,41000040h
    dd 00000000h,01010040h,00010040h,41010000h
    dd 40010000h,01000000h,41010040h,40000000h
    dd 40010040h,41000000h,01000000h,41010040h
    dd 00010000h,01000040h,41000040h,00010040h
    dd 01000040h,00000000h,41010000h,40000040h
    dd 41000000h,40010040h,00000040h,01010000h
    dd 00100402h,04000400h,00000002h,04100402h
    dd 00000000h,04100000h,04000402h,00100002h
    dd 04100400h,04000002h,04000000h,00000402h
    dd 04000002h,00100402h,00100000h,04000000h
    dd 04100002h,00100400h,00000400h,00000002h
    dd 00100400h,04000402h,04100000h,00000400h
    dd 00000402h,00000000h,00100002h,04100400h
    dd 04000400h,04100002h,04100402h,00100000h
    dd 04100002h,00000402h,00100000h,04000002h
    dd 00100400h,04000400h,00000002h,04100000h
    dd 04000402h,00000000h,00000400h,00100002h
    dd 00000000h,04100002h,04100400h,00000400h
    dd 04000000h,04100402h,00100402h,00100000h
    dd 04100402h,00000002h,04000400h,00100402h
    dd 00100002h,00100400h,04100000h,04000402h
    dd 00000402h,04000000h,04000002h,04100400h
    dd 02000000h,00004000h,00000100h,02004108h
    dd 02004008h,02000100h,00004108h,02004000h
    dd 00004000h,00000008h,02000008h,00004100h
    dd 02000108h,02004008h,02004100h,00000000h
    dd 00004100h,02000000h,00004008h,00000108h
    dd 02000100h,00004108h,00000000h,02000008h
    dd 00000008h,02000108h,02004108h,00004008h
    dd 02004000h,00000100h,00000108h,02004100h
    dd 02004100h,02000108h,00004008h,02004000h
    dd 00004000h,00000008h,02000008h,02000100h
    dd 02000000h,00004100h,02004108h,00000000h
    dd 00004108h,02000000h,00000100h,00004008h
    dd 02000108h,00000100h,00000000h,02004108h
    dd 02004008h,02004100h,00000108h,00004000h
    dd 00004100h,02004008h,02000100h,00000108h
    dd 00000008h,00004108h,02004000h,02000008h
    dd 20000010h,00080010h,00000000h,20080800h
    dd 00080010h,00000800h,20000810h,00080000h
    dd 00000810h,20080810h,00080800h,20000000h
    dd 20000800h,20000010h,20080000h,00080810h
    dd 00080000h,20000810h,20080010h,00000000h
    dd 00000800h,00000010h,20080800h,20080010h
    dd 20080810h,20080000h,20000000h,00000810h
    dd 00000010h,00080800h,00080810h,20000800h
    dd 00000810h,20000000h,20000800h,00080810h
    dd 20080800h,00080010h,00000000h,20000800h
    dd 20000000h,00000800h,20080010h,00080000h
    dd 00080010h,20080810h,00080800h,00000010h
    dd 20080810h,00080800h,00080000h,20000810h
    dd 20000010h,20080000h,00080810h,00000000h
    dd 00000800h,20000010h,20000810h,20080800h
    dd 20080000h,00000810h,00000010h,20080010h
    dd 00001000h,00000080h,00400080h,00400001h
    dd 00401081h,00001001h,00001080h,00000000h
    dd 00400000h,00400081h,00000081h,00401000h
    dd 00000001h,00401080h,00401000h,00000081h
    dd 00400081h,00001000h,00001001h,00401081h
    dd 00000000h,00400080h,00400001h,00001080h
    dd 00401001h,00001081h,00401080h,00000001h
    dd 00001081h,00401001h,00000080h,00400000h
    dd 00001081h,00401000h,00401001h,00000081h
    dd 00001000h,00000080h,00400000h,00401001h
    dd 00400081h,00001081h,00001080h,00000000h
    dd 00000080h,00400001h,00000001h,00400080h
    dd 00000000h,00400081h,00400080h,00001080h
    dd 00000081h,00001000h,00401081h,00400000h
    dd 00401080h,00000001h,00001001h,00401081h
    dd 00400001h,00401080h,00401000h,00001001h
    dd 08200020h,08208000h,00008020h,00000000h
    dd 08008000h,00200020h,08200000h,08208020h
    dd 00000020h,08000000h,00208000h,00008020h
    dd 00208020h,08008020h,08000020h,08200000h
    dd 00008000h,00208020h,00200020h,08008000h
    dd 08208020h,08000020h,00000000h,00208000h
    dd 08000000h,00200000h,08008020h,08200020h
    dd 00200000h,00008000h,08208000h,00000020h
    dd 00200000h,00008000h,08000020h,08208020h
    dd 00008020h,08000000h,00000000h,00208000h
    dd 08200020h,08008020h,08008000h,00200020h
    dd 08208000h,00000020h,00200020h,08008000h
    dd 08208020h,00200000h,08200000h,08000020h
    dd 00208000h,00008020h,08008020h,08200000h
    dd 00000020h,08208000h,00208020h,00000000h
    dd 08000000h,08200020h,00008000h,00208020h

DATA5    dd 01010000h,01010101h,01010100h,00010101h
szDATA  db "./0123456789ABCDEFGHIJKLMNOPQRST"
        db "UVWXYZabcdefghijklmnopqrstuvwxyz",0
szBuffer db 14 dup(0)
.code
;请在声明中加入include ...\..\???.asm

    PUSH     EAX
    MOV      BYTE PTR [EBP-77h],0
    PUSH    OFFSET szChar
    PUSH     EAX
    INVOKE  Sub_00401C00
    ADD      ESP,8
    MOV      [EBP-6Ch],EAX
    PUSH    OFFSET szChar
    PUSH    [EBP-6Ch]
    INVOKE  Sub_00401C00
    LEA      EAX,szBuffer


;==从这里开始保存为.asm文件====================================
Sub_00401C00 PROTO  ;声明子程序
Sub_00401514 PROTO
Sub_00401825 PROTO

.code
Sub_00401C00 PROC
    PUSH    EBP
    MOV      EBP,ESP
    ADD      ESP,0FFFFFF40h  ;记得在前面加0
    XOR      EAX,EAX
    MOV      [EBP-14h],EAX
    XOR      EDX,EDX
    MOV      [EBP-18h],EDX
    LEA      ECX,[EBP-38h]
    MOV      [EBP-3Ch],ECX
    MOV      EAX,[EBP+0Ch]
    CMP      BYTE PTR [EAX],00
    JNZ      Loc_00401C25
    MOV      DL,41h
    JMP      SHORT Loc_00401C2A
Loc_00401C25:
    MOV      ECX,[EBP+0Ch]
    MOV      DL,BYTE PTR [ECX]
Loc_00401C2A:
    MOV      szBuffer,BYTE PTR DL
    XOR      EAX,EAX
    MOV      AL,DL
    MOV      [EBP-0Ch],EAX
    MOV      ECX,[EBP-0Ch]
    XOR      EAX,EAX
    MOV      AL,BYTE PTR [ECX+DATA1]
    MOV      [EBP-14h],EAX
    MOV      EDX,[EBP+0Ch]
    CMP      BYTE PTR [EDX+01],00
    JNZ      Loc_00401C52
    MOV      CL,41h
    JMP      SHORT Loc_00401C58
Loc_00401C52:
    MOV      EAX,[EBP+0Ch]
    MOV      CL,BYTE PTR [EAX+01]
Loc_00401C58:
    MOV      szBuffer+1,CL
    XOR      EAX,EAX
    MOV      AL,CL
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      EAX,EAX
    MOV      AL,BYTE PTR [EDX+DATA1]
    SHL      EAX,04
    MOV      [EBP-18h],EAX
    XOR      EDX,EDX
    MOV      [EBP-04h],EDX
Loc_00401C7B:
    MOV      ECX,[EBP+08h]
    MOV      AL,BYTE PTR [ECX]
    MOV      [EBP-3Dh],AL
    INC      DWORD PTR [EBP+08h]  ;不能写成 INC [EBP+08h]
    CMP      BYTE PTR [EBP-3Dh],00
    JZ      Loc_00401CA1
    MOV      DL,BYTE PTR [EBP-3Dh] ;记得在数字后加上h,不然编译器会出错或结果不正确
    ADD      EDX,EDX
    MOV      ECX,[EBP-04h]
    MOV      [EBP+ECX-2Ch],DL
    INC      DWORD PTR [EBP-04h]
    CMP      [EBP-04h],BYTE PTR 08
    JC      Loc_00401C7B
Loc_00401CA1:
    CMP      [EBP-04h],BYTE PTR 08
    JNC      Loc_00401CB8
Loc_00401CA7:
    MOV      EAX,[EBP-04h]
    MOV      BYTE PTR [EBP+EAX-2Ch],00
    INC      DWORD PTR [EBP-04h]
    CMP      [EBP-04h],BYTE PTR 08
    JC      Loc_00401CA7
Loc_00401CB8:
    LEA      EDX,[EBP+0FFFFFF40h]
    PUSH    EDX
    LEA      ECX,[EBP-2Ch]
    PUSH    ECX
    INVOKE  Sub_00401514
    ADD      ESP,08
    PUSH    [EBP-18h]
    PUSH    [EBP-14h]
    LEA      EAX,[EBP+0FFFFFF40h]
    PUSH    EAX
    LEA      EDX,[EBP-1Ch]
    PUSH    EDX
    LEA      ECX,[EBP-20h]
    PUSH    ECX
    INVOKE  Sub_00401825
    ADD      ESP,14h
    MOV      EAX,[EBP-20h]
    MOV      [EBP-24h],EAX
    MOV      DL,BYTE PTR [EBP-24h]
    AND      DL,0FFh
    MOV      ECX,[EBP-3Ch]
    MOV      [ECX],DL
    INC      DWORD PTR [EBP-3Ch]
    MOV      EAX,[EBP-24h]
SHR      EAX,08  ;请将上页最后一句改成这样
    AND      AL,0FFh
    MOV      EDX,[EBP-3Ch]
    MOV      [EDX],AL
    INC      DWORD PTR [EBP-3Ch]
    MOV      ECX,[EBP-24h]
    SHR      ECX,10h
    AND      CL,0FFh
    MOV      EAX,[EBP-3Ch]
    MOV      [EAX],CL
    INC      DWORD PTR [EBP-3Ch]
    MOV      EDX,[EBP-24h]
    SHR      EDX,18h
    AND      DL,0FFh
    MOV      ECX,[EBP-3Ch]
    MOV      [ECX],DL
    INC      DWORD PTR [EBP-3Ch]
    MOV      EAX,[EBP-1Ch]
    MOV      [EBP-24h],EAX
    MOV      DL,BYTE PTR [EBP-24h]
    AND      DL,0FFh
    MOV      ECX,[EBP-3Ch]
    MOV      [ECX],DL
    INC      DWORD PTR [EBP-3Ch]
    MOV      EAX,[EBP-24h]
    SHR      EAX,08
    AND      AL,0FFh
    MOV      EDX,[EBP-3Ch]
    MOV      [EDX],AL
    INC      DWORD PTR [EBP-3Ch]
    MOV      ECX,[EBP-24h]
    SHR      ECX,10h
    AND      CL,0FFh
    MOV      EAX,[EBP-3Ch]
    MOV      [EAX],CL
    INC      DWORD PTR [EBP-3Ch]
    MOV      EDX,[EBP-24h]
    SHR      EDX,18h
    AND      DL,0FFh
    MOV      ECX,[EBP-3Ch]
    MOV      [ECX],DL
    INC      DWORD PTR [EBP-3Ch]
    XOR      EAX,EAX
    MOV      [EBP-10h],EAX
    MOV      BYTE PTR [EBP-3Eh],80h  ;把直接数写入内存,必须加入BYTE PTR
    MOV      BYTE PTR [EBP-30h],00
    MOV      DWORD PTR [EBP-04h],02
Loc_00401D88:
    MOV      BYTE PTR [EBP-3Dh],00
    XOR      EDX,EDX
    MOV      [EBP-08h],EDX
Loc_00401D91:
    SHL      BYTE PTR [EBP-3Dh],1
    MOV      ECX,[EBP-10h]
    MOV      AL,BYTE PTR [EBP+ECX-38h]
    AND      AL,[EBP-3Eh]
    JZ      Loc_00401DA4
    OR      BYTE PTR [EBP-3Dh],01
Loc_00401DA4:
    SHR      BYTE PTR [EBP-3Eh],1
    CMP      BYTE PTR [EBP-3Eh],00
    JNZ      Loc_00401DB4
    INC      DWORD PTR [EBP-10h]
    MOV      BYTE PTR [EBP-3Eh],80h
Loc_00401DB4:
    INC      DWORD PTR [EBP-08h]
    CMP      BYTE PTR [EBP-08h],06
    JC      Loc_00401D91
    XOR      EDX,EDX
    MOV      DL,BYTE PTR [EBP-3Dh]
    MOV      CL,BYTE PTR [EDX+szDATA]
    MOV      EAX,[EBP-04]
    MOV      [EAX+szBuffer],BYTE PTR CL
    INC      DWORD PTR [EBP-04h]
    CMP      BYTE PTR [EBP-04h],0Dh
    JC      Loc_00401D88
    LEA     EAX,szBuffer
    MOV      ESP,EBP
    POP      EBP
    RET
Sub_00401C00    ENDP

Sub_00401514    PROC
    PUSH    EBP
    MOV      EBP,ESP
    ADD      ESP,-1Ch
    MOV      EAX,[EBP+0Ch]
    MOV      [EBP-18h],EAX
    MOV      EDX,[EBP+08h]
    MOV      [EBP-14h],EDX
    MOV      ECX,[EBP-14h]
    XOR      EAX,EAX
    MOV      AL,BYTE PTR [ECX]
    MOV      [EBP-04h],EAX
    INC      DWORD PTR [EBP-14h]
    MOV      EDX,[EBP-14h]
    XOR      ECX,ECX
    MOV      CL,BYTE PTR [EDX]
    SHL      ECX,08
    OR      [EBP-04h],ECX
    INC      DWORD PTR [EBP-14h]
    MOV      EAX,[EBP-14h]
    XOR      EDX,EDX
    MOV      DL,BYTE PTR [EAX]
    SHL      EDX,10h
    OR      [EBP-04h],EDX
    INC      DWORD PTR [EBP-14h]
    MOV      ECX,[EBP-14h]
    XOR      EAX,EAX
    MOV      AL,BYTE PTR [ECX]
    SHL      EAX,18h
    OR      [EBP-04h],EAX
    INC      DWORD PTR [EBP-14h]
    MOV      EDX,[EBP-14h]
    XOR      ECX,ECX
    MOV      CL,BYTE PTR [EDX]
    MOV      [EBP-08h],ECX
    INC      DWORD PTR [EBP-14h]
    MOV      EAX,[EBP-14h]
    XOR      EDX,EDX
    MOV      DL,BYTE PTR [EAX]
    SHL      EDX,08
    OR      [EBP-08h],EDX
    INC      DWORD PTR [EBP-14h]
    MOV      ECX,[EBP-14h]
    XOR      EAX,EAX
    MOV      AL,BYTE PTR [ECX]
    SHL      EAX,10h
    OR      [EBP-08h],EAX
    INC      DWORD PTR [EBP-14h]
    MOV      EDX,[EBP-14h]
    XOR      ECX,ECX
    MOV      CL,BYTE PTR [EDX]
    SHL      ECX,18h
    OR      [EBP-08h],ECX
    INC      DWORD PTR [EBP-14h]
    MOV      EAX,[EBP-08h]
    SHR      EAX,04
    XOR      EAX,[EBP-04h]
    AND      EAX,0F0F0F0Fh
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04h],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,04
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP-04h]
    SHL      EAX,12h
    XOR      EAX,[EBP-04h]
    AND      EAX,0CCCC0000h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-04h]
    XOR      EDX,[EBP-0Ch]
    MOV      ECX,[EBP-0Ch]
    SHR      ECX,12h
    XOR      EDX,ECX
    MOV      [EBP-04h],EDX
    MOV      EAX,[EBP-08h]
    SHL      EAX,12h
    XOR      EAX,[EBP-08h]
    AND      EAX,0CCCC0000h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-08h]
    XOR      EDX,[EBP-0Ch]
    MOV      ECX,[EBP-0Ch]
    SHR      ECX,12h
    XOR      EDX,ECX
    MOV      [EBP-08h],EDX
    MOV      EAX,[EBP-08h]
    SHR      EAX,1
    XOR      EAX,[EBP-04h]
    AND      EAX,55555555h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04h],EDX
    MOV      ECX,[EBP-0Ch]
    ADD      ECX,ECX
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP-04h]
    SHR      EAX,08
    XOR      EAX,[EBP-08h]
    AND      EAX,00FF00FFh
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-08h],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,08
    XOR      [EBP-04h],ECX
    MOV      EAX,[EBP-08h]
    SHR      EAX,1
    XOR      EAX,[EBP-04h]
    AND      EAX,55555555h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04h],EDX
    MOV      ECX,[EBP-0Ch]
    ADD      ECX,ECX
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP-08h]
    AND      EAX,0FFh
    SHL      EAX,10h
    MOV      EDX,[EBP-08h]
    AND      EDX,0FF00h
    OR      EAX,EDX
    MOV      ECX,[EBP-08h]
    AND      ECX,00FF0000h
    SHR      ECX,10h
    OR      EAX,ECX
    MOV      EDX,[EBP-04h]
    AND      EDX,0F0000000h
    SHR      EDX,04
    OR      EAX,EDX
    MOV      [EBP-08h],EAX
    AND      [EBP-04h],DWORD PTR 0FFFFFFFh
    XOR      EAX,EAX
    MOV      [EBP-1Ch],EAX
Loc_004016A1:
    MOV      ECX,[EBP-1Ch]
    CMP      BYTE PTR [ECX+DATA5],00
    JZ      Loc_004016D1
    MOV      EAX,[EBP-04h]
    SHR      EAX,02
    MOV      EDX,[EBP-04h]
    SHL      EDX,1Ah
    OR      EAX,EDX
    MOV      [EBP-04h],EAX
    MOV      ECX,[EBP-08h]
    SHR      ECX,02
    MOV      EAX,[EBP-08h]
    SHL      EAX,1Ah
    OR      ECX,EAX
    MOV      [EBP-08h],ECX
    JMP      SHORT Loc_004016F1
Loc_004016D1:
    MOV      EDX,[EBP-04h]
    SHR      EDX,1
    MOV      ECX,[EBP-04h]
    SHL      ECX,1Bh
    OR      EDX,ECX
    MOV      [EBP-04h],EDX
    MOV      EAX,[EBP-08h]
    SHR      EAX,1
    MOV      EDX,[EBP-08h]
    SHL      EDX,1Bh
    OR      EAX,EDX
    MOV      [EBP-08h],EAX
Loc_004016F1:
    AND      DWORD PTR [EBP-04h],0FFFFFFFh ;必须加DWORD PTR
    AND      DWORD PTR [EBP-08h],0FFFFFFFh
    MOV      ECX,[EBP-04h]
    SHR      ECX,06
    AND      ECX,03
    MOV      EAX,[EBP-04h]
    SHR      EAX,07
    AND      EAX,3Ch
    OR      ECX,EAX
    MOV      EDX,[ECX*4+DATA2+100h]
    MOV      ECX,[EBP-04h]
    AND      ECX,3Fh
    OR      EDX,[ECX*4+DATA2]
    MOV      EAX,[EBP-04h]
    SHR      EAX,0Dh
    AND      EAX,0Fh
    MOV      ECX,[EBP-04h]
    SHR      ECX,0Eh
    AND      ECX,30h
    OR      EAX,ECX
    OR      EDX,[EAX*4+DATA2+200h]
    MOV      EAX,[EBP-04h]
    SHR      EAX,14h
    AND      EAX,01
    MOV      ECX,[EBP-04h]
    SHR      ECX,15h
    AND      ECX,06
    OR      EAX,ECX
    MOV      ECX,[EBP-04h]
    SHR      ECX,16h
    AND      ECX,38h
    OR      EAX,ECX
    OR      EDX,[EAX*4+DATA2+300h]
    MOV      [EBP-10h],EDX
    MOV      EAX,[EBP-08h]
    SHR      EAX,07
    AND      EAX,03
    MOV      EDX,[EBP-08h]
    SHR      EDX,08
    AND      EDX,3Ch
    OR      EAX,EDX
    MOV      EAX,[EAX*4+DATA3+100h]
    MOV      EDX,[EBP-08h]
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA3]
    MOV      ECX,[EBP-08h]
    SHR      ECX,0Fh
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA3+200h]
    MOV      EDX,[EBP-08h]
    SHR      EDX,15h
    AND      EDX,0Fh
    MOV      ECX,[EBP-08h]
    SHR      ECX,16h
    AND      ECX,30h
    OR      EDX,ECX
    OR      EAX,[EDX*4+DATA3+300h]
    MOV      [EBP-0Ch],EAX
    MOV      EAX,[EBP-0Ch]
    SHL      EAX,10h
    MOV      EDX,[EBP-10h]
    AND      EDX,0FFFFh
    OR      EAX,EDX
    AND      EAX,-01
    MOV      ECX,[EBP-18h]
    MOV      [ECX],EAX
    ADD      [EBP-18h],DWORD PTR 04
    MOV      EAX,[EBP-10h]
    SHR      EAX,10h
    MOV      EDX,[EBP-0Ch]
    AND      EDX,0FFFF0000h
    OR      EAX,EDX
    MOV      [EBP-10h],EAX
    MOV      EAX,[EBP-10h]
    SHL      EAX,04
    MOV      ECX,[EBP-10h]
    SHR      ECX,1Ch
    OR      EAX,ECX
    MOV      [EBP-10h],EAX
    MOV      EAX,[EBP-10h]
    AND      EAX,-01
    MOV      EDX,[EBP-18h]
    MOV      [EDX],EAX
    ADD      [EBP-18h],DWORD PTR 04
    INC      DWORD PTR [EBP-1Ch]
    CMP      BYTE PTR [EBP-1Ch],10h
    JL      Loc_004016A1
    XOR      EAX,EAX
    MOV      ESP,EBP
    POP      EBP
    RET   
Sub_00401514    ENDP

Sub_00401825    PROC
    PUSH    EBP
    MOV      EBP,ESP
    ADD      ESP,-24h
    XOR      EAX,EAX
    MOV      [EBP-04h],EAX
    XOR      EDX,EDX
    MOV      [EBP-08h],EDX
    MOV      ECX,[EBP+10h]
    MOV      [EBP-14h],ECX
    MOV      EAX,[EBP+14h]
    MOV      [EBP-20h],EAX
    MOV      EDX,[EBP+18h]
    MOV      [EBP-24h],EDX
    XOR      ECX,ECX
    MOV      [EBP-1Ch],ECX
Loc_0040184C:
    XOR      EAX,EAX
    MOV      [EBP-18h],EAX
Loc_00401851:
    MOV      EDX,[EBP-08h]
    SHR      EDX,10h
    XOR      EDX,[EBP-08h]
    MOV      [EBP-0Ch],EDX
    MOV      ECX,[EBP-0Ch]
    AND      ECX,[EBP-20h]
    MOV      [EBP-10h],ECX
    MOV      EAX,[EBP-24h]
    AND      [EBP-0Ch],EAX
    MOV      EDX,[EBP-14h]
    MOV      ECX,[EBP-18h]
    MOV      EAX,[EDX+ECX*4]
    MOV      EDX,[EBP-10h]
    SHL      EDX,10h
    XOR      EDX,[EBP-10h]
    XOR      EDX,[EBP-08h]
    XOR      EAX,EDX
    MOV      [EBP-10h],EAX
    MOV      ECX,[EBP-14h]
    MOV      EAX,[EBP-18h]
    MOV      EDX,[ECX+EAX*4+04]
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,10h
    XOR      ECX,[EBP-0Ch]
    XOR      ECX,[EBP-08h]
    XOR      EDX,ECX
    MOV      [EBP-0Ch],EDX
    MOV      EAX,[EBP-0Ch]
    SHR      EAX,04
    MOV      EDX,[EBP-0Ch]
    SHL      EDX,1Ch
    OR      EAX,EDX
    MOV      [EBP-0Ch],EAX
    MOV      ECX,[EBP-0Ch]
    AND      ECX,3Fh
    MOV      EAX,[ECX*4+DATA4+100h]
    MOV      EDX,[EBP-0Ch]
    SHR      EDX,08
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+300h]
    MOV      ECX,[EBP-0Ch]
    SHR      ECX,10h
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4+500h]
    MOV      EDX,[EBP-0Ch]
    SHR      EDX,18h
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+700h]
    MOV      ECX,[EBP-10h]
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4]
    MOV      EDX,[EBP-10h]
    SHR      EDX,08
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+200h]
    MOV      ECX,[EBP-10h]
    SHR      ECX,10h
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4+400h]
    MOV      EDX,[EBP-10h]
    SHR      EDX,18h
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+600h]
    XOR      [EBP-04h],EAX
    MOV      EAX,[EBP-04h]
    SHR      EAX,10h
    XOR      EAX,[EBP-04h]
    MOV      [EBP-0Ch],EAX
    MOV      ECX,[EBP-0Ch]
    AND      ECX,[EBP-20h]
    MOV      [EBP-10h],ECX
    MOV      EAX,[EBP-24h]
    AND      [EBP-0Ch],DWORD PTR EAX
    MOV      EDX,[EBP-14h]
    MOV      ECX,[EBP-18h]
    MOV      EAX,[EDX+ECX*4+08]
    MOV      EDX,[EBP-10h]
    SHL      EDX,10h
    XOR      EDX,[EBP-10h]
    XOR      EDX,[EBP-04h]
    XOR      EAX,EDX
    MOV      [EBP-10h],EAX
    MOV      ECX,[EBP-14h]
    MOV      EAX,[EBP-18h]
    MOV      EDX,[ECX+EAX*4+0Ch]
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,10h
    XOR      ECX,[EBP-0Ch]
    XOR      ECX,[EBP-04h]
    XOR      EDX,ECX
    MOV      [EBP-0Ch],EDX
    MOV      EAX,[EBP-0Ch]
    SHR      EAX,04
    MOV      EDX,[EBP-0Ch]
    SHL      EDX,1Ch
    OR      EAX,EDX
    MOV      [EBP-0Ch],EAX
    MOV      ECX,[EBP-0Ch]
    AND      ECX,3Fh
    MOV      EAX,[ECX*4+DATA4+100h]
    MOV      EDX,[EBP-0Ch]
    SHR      EDX,08
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+300h]
    MOV      ECX,[EBP-0Ch]
    SHR      ECX,10h
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4+500h]
    MOV      EDX,[EBP-0Ch]
    SHR      EDX,18h
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+700h]
    MOV      ECX,[EBP-10h]
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4]
    MOV      EDX,[EBP-10h]
    SHR      EDX,08
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+200h]
    MOV      ECX,[EBP-10h]
    SHR      ECX,10h
    AND      ECX,3Fh
    OR      EAX,[ECX*4+DATA4+400h]
    MOV      EDX,[EBP-10h]
    SHR      EDX,18h
    AND      EDX,3Fh
    OR      EAX,[EDX*4+DATA4+600h]
    XOR      [EBP-08h],EAX
    ADD      [EBP-18h],DWORD PTR 04
    CMP      [EBP-18h],BYTE PTR 20h
    JL      Loc_00401851
    MOV      EAX,[EBP-04h]
    MOV      [EBP-0Ch],EAX
    MOV      ECX,[EBP-08h]
    MOV      [EBP-04h],ECX
    MOV      EAX,[EBP-0Ch]
    MOV      [EBP-08h],EAX
    INC      DWORD PTR [EBP-1Ch]
    CMP      [EBP-1Ch],BYTE PTR 19h
    JL      Loc_0040184C
    MOV      EDX,[EBP-08h]
    MOV      [EBP-0Ch],EDX
    MOV      ECX,[EBP-04h]
    SHR      ECX,1
    MOV      EAX,[EBP-04h]
    SHL      EAX,1Fh
    OR      ECX,EAX
    MOV      [EBP-08h],ECX
    MOV      EDX,[EBP-0Ch]
    SHR      EDX,1
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,1Fh
    OR      EDX,ECX
    MOV      [EBP-04h],EDX
    AND      [EBP-04h],BYTE PTR -01
    AND      [EBP-08h],BYTE PTR -01
    MOV      EAX,[EBP-08h]
    SHR      EAX,1
    XOR      EAX,[EBP-04h]
    AND      EAX,55555555h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04h],EDX
    MOV      ECX,[EBP-0Ch]
    ADD      ECX,ECX
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP-04h]
    SHR      EAX,08
    XOR      EAX,[EBP-08h]
    AND      EAX,00FF00FFh
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-08h],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,08
    XOR      [EBP-04h],ECX
    MOV      EAX,[EBP-08h]
    SHR      EAX,02
    XOR      EAX,[EBP-04h]
    AND      EAX,33333333h
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,02
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP-04h]
    SHR      EAX,10h
    XOR      EAX,[EBP-08h]
    AND      EAX,0FFFFh
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-08h],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,10h
    XOR      [EBP-04h],ECX
    MOV      EAX,[EBP-08h]
    SHR      EAX,04
    XOR      EAX,[EBP-04h]
    AND      EAX,0F0F0F0Fh
    MOV      [EBP-0Ch],EAX
    MOV      EDX,[EBP-0Ch]
    XOR      [EBP-04h],EDX
    MOV      ECX,[EBP-0Ch]
    SHL      ECX,04
    XOR      [EBP-08h],ECX
    MOV      EAX,[EBP+08h]
    MOV      EDX,[EBP-04h]
    MOV      [EAX],EDX
    MOV      ECX,[EBP+0Ch]
    MOV      EAX,[EBP-08h]
    MOV      [ECX],EAX
    XOR      EAX,EAX
    MOV      ESP,EBP
    POP      EBP
    RET
Sub_00401825    ENDP



-=End=-
      _/_/_/
    _/          _/_/_/  _/_/_/  _/_/
    _/_/    _/    _/  _/    _/    _/
        _/  _/    _/  _/    _/    _/
_/_/_/      _/_/_/  _/    _/    _/

                                              Sam.com
                                          5:10 2002-3-29