欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

MobileSearch(手机号码归属地查询) v2.0注册算法,附注册机~~~~~~ (30千字)

MobileSearch(手机号码归属地查询) v2.0注册算法,附注册机~~~~~~ (30千字)

名称: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

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功