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
