sygate 3.0注册方法文档 (12千字)
SyGate3.0破解文档使用工具
Softice 3.0
w32dasm 8.93
破解者:买草帽
SyGate3.0是一个很好的代理服务软件,它把可以让用户用一台modem上网共享。这个软
件有31天的使用限制,也有使用次数的限制,几个并且它好象在注册表中写入了一个啥,
反正我重装不能使用,不爽,兄弟们几个在网上想用一个小猫同时在网上神游的感觉才没
几天就要结束了,可不行.得想想办法.看来得跟Sygate公司请个安了.因为这个软件的注册
必须在网上进行,先拨号上网再输入注册码,这个程序跟注册运算相关的,分别是Serial No
有两个输入文本框,还有一个是Registration文本框.我在它们中输入如下
Serial No: 18181818 41841888
Registration: 94189418
为啥这样输入,呵呵.我没钱钱去注册呀,他们要这样拨号验证.当然先去给Sygate公司道个
吉祥.(不是小弟舍不得注册的钱钱,不怕各位笑话,我连真的$都没摸过.哪有钱钱去注册嘛.
等二回我手头有$了一定.....恭喜发财!),先礼...而后在Softice的黑脸下面的断点
bpx hmemcpy
然后Ctrl+D切回,按注册按钮,断下了
就按F12回到程序空间.程序先把你输入的
东西转换为其相应的16进制表示的有点像BCD码的相应表示。然后再走一会可以看见如下代码:
:0040F1CE 50 push eax
:0040F1CF 57 push edi
* Reference To: SgSrvAd.SgSetLicense, Ord:001Fh
|
:0040F1D0 E883490000 Call 00413B58//这个调用就是调用接口函数在SgSrvAd.dll文件中,完成注册
//下面就要进去追注册了!我跳进这个dll去追注册码
:0040F1D5 8BF0 mov esi, eax
:0040F1D7 8B442424 mov eax, dword ptr [esp+24]
:0040F1DB 85C0 test eax, eax//返回eax=0就显示注册成功,
:0040F1DD 7479 je 0040F258
:0040F1DF 3D37FFFFFF cmp eax, FFFFFF37
:0040F1E4 7533 jne 0040F219
* Possible Reference to String Resource ID=02000: "SyGate Message"
|
:0040F1E6 68D0070000 push 000007D0
:0040F1EB 8D4C2414 lea ecx, dword ptr [esp+14]
:0040F1EF E83EC90100 call 0042BB32
*********************************************************************************************
下面就是在dll中的代码部分判断函数在SgSrvAd.dll中的函数SgSetLicense(),里的漫漫走没多久就可以走到
这里了,让我来一点一点的解读它.
* Referenced by a CALL at Addresses:
|:100056A5 , :10009C85
|
:10005630 53 push ebx
:10005631 8B5C240C mov ebx, dword ptr [esp+0C]
:10005635 57 push edi
:10005636 8B7C240C mov edi, dword ptr [esp+0C]
:1000563A 53 push ebx//第一部分输入的字符长度
:1000563B 57 push edi//这里是输入的serial No第一部分输入转换成相应16进制BCD码
:1000563C E86FFFFFFF call 100055B0//马上跟进望下边看,这个调用是验证第一部分输入的有效性和生成第二部分注册码的
:10005641 83C408 add esp, 00000008
:10005644 85C0 test eax, eax//回来后这个要为0才让你一路顺风哈
:10005646 753B jne 10005683
:10005648 837C241804 cmp dword ptr [esp+18], 00000004
:1000564D 752C jne 1000567B
:1000564F 8B442414 mov eax, dword ptr [esp+14]
:10005653 56 push esi//Registration部分输入的BCD码转换,94189418
:10005654 53 push ebx//第一部分输入的字符长度
:10005655 57 push edi//其内是16进制BCD表示的18181818
:10005656 8B30 mov esi, dword ptr [eax]
:10005658 E8B3FFFFFF call 10005610//这个也要跟进你先往下跳哈,遇到ret才回来(生成Registration部分注册码)
:1000565D 83C408 add esp, 00000008
:10005660 3BC6 cmp eax, esi//这两个要相等,才行哟,哪个为准?当然是eax中的,它才是真的哟!(esi中的94189418Sygate不收哈)
:10005662 5E pop esi
:10005663 7516 jne 1000567B//当然这里可不能跳的哈
:10005665 8B0F mov ecx, dword ptr [edi]//还有个机关哟...对18181818这段输入有一个很迷信的要求哈,Sygate公司制订的哈.
:10005667 BA00000040 mov edx, 40000000//第一部分第一个字符,一定不能大于4(看来Sygate确实有点忌讳的哈,输入第一个大于4的话它不高兴的哟),也玩完!!!
:1000566C 81E1000000F0 and ecx, F0000000
:10005672 5F pop edi
:10005673 3BD1 cmp edx, ecx//大于4就是影响S标志
:10005675 5B pop ebx
:10005676 1BC0 sbb eax, eax//这条指令要被S标志影响
:10005678 F7D8 neg eax//第一个输入字符大于4,就米嘎了
:1000567A C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:1000564D(C), :10005663(C)
|
:1000567B 5F pop edi
:1000567C B802000000 mov eax, 00000002
:10005681 5B pop ebx
:10005682 C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10005646(C)
|
:10005683 5F pop edi
:10005684 B801000000 mov eax, 00000001
:10005689 5B pop ebx
:1000568A C3 ret
/***************************************************************************/
第二部分生成代码区
* Referenced by a CALL at Address:
|:1000563C
|
:100055B0 837C240808 cmp dword ptr [esp+08], 00000008//第一部分必须为8个字符
:100055B5 7406 je 100055BD //不跳就玩完
:100055B7 B801000000 mov eax, 00000001//你不相信到了这里返回eax=1就要洗白
:100055BC C3 ret//知道了把,为啥输入'18181818',第一部分输入必须是8个字符才让你过哈
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:100055B5(C)
|
:100055BD 56 push esi
:100055BE 8B742408 mov esi, dword ptr [esp+08]
:100055C2 57 push edi
:100055C3 8B06 mov eax, dword ptr [esi]//BCD码18181818注册码第一部分
:100055C5 50 push eax
:100055C6 E805FFFFFF call 100054D0//生成注册码第二部分,跟进哈
:100055CB 8BC8 mov ecx, eax//返回值给ecx
:100055CD 83C404 add esp, 00000004
:100055D0 8BD1 mov edx, ecx
:100055D2 C1E834 shr eax, 34
:100055D5 C1EA28 shr edx, 28
:100055D8 8D0440 lea eax, dword ptr [eax+2*eax]
:100055DB 8D1492 lea edx, dword ptr [edx+4*edx]
:100055DE 03C2 add eax, edx
:100055E0 8BD1 mov edx, ecx
:100055E2 C1EA1C shr edx, 1C
:100055E5 C1E90E shr ecx, 0E
:100055E8 8D3C92 lea edi, dword ptr [edx+4*edx]
:100055EB 8D147A lea edx, dword ptr [edx+2*edi]
:100055EE 5F pop edi
:100055EF 03C2 add eax, edx
:100055F1 03C1 add eax, ecx
:100055F3 8B4E04 mov ecx, dword ptr [esi+04]//'34343434'
:100055F6 25FFFF0F00 and eax, 000FFFFF//这个值就是第一部分生成的
//第二部分,一定要等于esi+04
:100055FB 81E1FFFF0F00 and ecx, 000FFFFF
:10005601 2BC1 sub eax, ecx
:10005603 5E pop esi
:10005604 C3 ret
/*************************************************************************/
* Referenced by a CALL at Address:
|:100055C6
|
//算法部分:文本的第二部分跟18181818相匹配的注册码就由这里运算得来,你可以把它当做一个黑箱.在这里外
//界输入只有一个18181818,(当然你也可以把它当做一头奶牛,吃的是18181818,挤出的就是......:),其实程序
//在这里做的也就是做的几个异或加上小学就会的四则混合运算拉,我懒!就不分析了哈,有数学兴趣的漫漫看.
:100054D0 8B4C2404 mov ecx, dword ptr [esp+04] \\ BCD 18181818
:100054D4 56 push esi
:100054D5 8BC1 mov eax, ecx
:100054D7 3543512400 xor eax, 00245143
:100054DC 0FAFC1 imul eax, ecx
:100054DF 0FAFC1 imul eax, ecx
:100054E2 8BD0 mov edx, eax
:100054E4 C1E20B shl edx, 0B
:100054E7 2BD0 sub edx, eax
:100054E9 8D1492 lea edx, dword ptr [edx+4*edx]
:100054EC 8D1490 lea edx, dword ptr [eax+4*edx]
:100054EF 8D1452 lea edx, dword ptr [edx+2*edx]
:100054F2 8DB450777A0600 lea esi, dword ptr [eax+2*edx+00067A77]
:100054F9 B865A62573 mov eax, 7325A665
:100054FE 0FAFF1 imul esi, ecx
:10005501 F7E1 mul ecx
:10005503 0FAFF1 imul esi, ecx
:10005506 81EE6E1A0000 sub esi, 00001A6E
:1000550C 0FAFF1 imul esi, ecx
:1000550F C1EA11 shr edx, 11
:10005512 8BC2 mov eax, edx
:10005514 C1E008 shl eax, 08
:10005517 03C2 add eax, edx
:10005519 8D0440 lea eax, dword ptr [eax+2*eax]
:1000551C 8D8406B1110000 lea eax, dword ptr [esi+eax+000011B1]\\第二部分挤出来的在eax中,
:10005523 5E pop esi
:10005524 C3 ret
/**************************************************************************/
/**************************************************************************/
//第三部分生成代码区
10005610 837C240808 cmp dword ptr [esp+08], 00000008//第二次判断你输入是字符数是8吗?
:10005615 7406 je 1000561D//这里要跳过去哈,不然.....
:10005617 B801000000 mov eax, 00000001
:1000561C C3 ret// 呵呵~看来Sygate公司跟我们一样,对这样的吉祥数值8也是喜欢哈.但你可不要把代码走到这一行哟!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10005615(C)
|
:1000561D 8B442404 mov eax, dword ptr [esp+04]
:10005621 8B08 mov ecx, dword ptr [eax]
:10005623 51 push ecx//根据第一部分生成
10005624 E807FFFFFF call 10005530//跟进就是生成Registration的算法了哈!
:10005629 83C404 add esp, 00000004
:1000562C C3 ret
/***************************************************************************/
//算法部分:文本的第三部分跟18181818相匹配的Registration注册码就由这里运算得来,你可以把它当做一个
//黑箱.在这里外界输入只有一个18181818,(当然你也可以还是把它当做一头奶牛,吃的是18181818,挤出的就是......:),
:10005530 8B4C2404 mov ecx, dword ptr [esp+04]
:10005534 56 push esi
:10005535 8BC1 mov eax, ecx//ecx=(BCD码)18181818
:10005537 3545099294 xor eax, 94920945
:1000553C 0FAFC1 imul eax, ecx
:1000553F 0FAFC1 imul eax, ecx
:10005542 0FAFC1 imul eax, ecx
:10005545 0FAFC1 imul eax, ecx
:10005548 8D14C500000000 lea edx, dword ptr [8*eax+00000000]
:1000554F 2BD0 sub edx, eax
:10005551 8D1490 lea edx, dword ptr [eax+4*edx]
:10005554 8DB4D061050000 lea esi, dword ptr [eax+8*edx+00000561]
:1000555B B8CF4D0FC2 mov eax, C20F4DCF
:10005560 F7E1 mul ecx
:10005562 0FAFF1 imul esi, ecx
:10005565 8BC1 mov eax, ecx
:10005567 2BC2 sub eax, edx
:10005569 D1E8 shr eax, 1
:1000556B 03C2 add eax, edx
:1000556D C1E811 shr eax, 11
:10005570 8BD0 mov edx, eax
:10005572 C1E204 shl edx, 04
:10005575 03D0 add edx, eax
:10005577 8D04D2 lea eax, dword ptr [edx+8*edx]
:1000557A 8D04C0 lea eax, dword ptr [eax+8*eax]
:1000557D 03F0 add esi, eax
:1000557F 0FAFF1 imul esi, ecx
:10005582 81EE1C82B302 sub esi, 02B3821C
:10005588 0FAFF1 imul esi, ecx
:1000558B C1E91E shr ecx, 1E
:1000558E 81F1FAFAFAFA xor ecx, FAFAFAFA
:10005594 8D0489 lea eax, dword ptr [ecx+4*ecx]
:10005597 8D0480 lea eax, dword ptr [eax+4*eax]
:1000559A 8D0480 lea eax, dword ptr [eax+4*eax]
:1000559D 8D1480 lea edx, dword ptr [eax+4*eax]
:100055A0 C1E204 shl edx, 04
:100055A3 2BD1 sub edx, ecx
:100055A5 8D8416E3140000 lea eax, dword ptr [esi+edx+000014E3]//挤出来第三部分的就是这个eax的拉!
:100055AC 5E pop esi
:100055AD C3 ret
后记:
这个软件已经是我很久跟的了,不过它确实很好,现在它的版本也升高了.我这人既笨又懒.新的4.0注册方法
好象是改了,好象不是通过调用dll实现的注册码验证的了.我也不敢去追了,在汇编代码森林里真的好可怕.还是
上街去打望的好,呜呜......
