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