庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>破解实例>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

未完成的破解 (SubmitWolf Enterprise ) 下

 作者:本站收集   日期:2005-5-26
字号选择〖 〗/ 双击滚屏 单击停止   
  (第二次)    CTRL-N,回到程序,重新输入注册信息。
这次CODE我输的是191919(为了便于进行内存搜索,我每次都输不同的CODE,
这是个小经验)。CTRL-N进入TRW2000,在:0041859D处双击鼠标,
设置断点。再CTRL-N回到程序,按下“确定”钮。(BC *)清除所有断点,F10一直到

:0041865B E890090000              call 00418FF0

F8进入。再F10一路走下。

下面是call 00418FF0的内容:

:00418FF0 83EC70                  sub esp, 00000070
:00418FF3 53           push ebx
:00418FF4 8B5C2478                mov ebx, dword ptr [esp+78]     
;[ebx]->code
:00418FF8 56             push esi
:00418FF9 57             push edi
:00418FFA 85DB          test ebx, ebx
:00418FFC 7436          je 00419034
:00418FFE 6A52          push 00000052
    <--"R"----------------------------|注册码为第二种
:00419000 53             push ebx                    |形式时,执行这
:00419001 E8DA440100              call 0042D4E0<--返回code中"R"的地址.
                        |里的语句。
:00419006 83C408                  add esp, 00000008      |(***)
:00419009 85C0          test eax, eax               |
:0041900B 7427          je 00419034                 |
:0041900D 8BBC2484000000          mov edi, dword ptr [esp+00000084] 
;[edi]->name|
:00419014 85FF          test edi, edi               |
:00419016 0F84ED010000            je 00419209                 |
:0041901C 6A40          push 00000040               |
:0041901E 57             push edi               |
:0041901F E8BC440100              call 0042D4E0<--返回name中"@"的地址.   |
:00419024 83C408                  add esp, 00000008            |
:00419027 85C0          test eax, eax             |
:00419029 7410          je 0041903B              |
:0041902B 8BFB          mov edi, ebx              |
                                             |
* Possible StringData Ref from Data Obj ->"EPAK"              |
                         |                  |
:0041902D BB44824300              mov ebx, 00438244           |
:00419032 EB07          jmp 0041903B--------------------------|

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00418FFC(C), :0041900B(C)
|
:00419034 8BBC2484000000          mov edi, dword ptr [esp+00000084]
  ;[edi]->code

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00419029(C), :00419032(U)
|
:0041903B 85FF          test edi, edi
:0041903D 0F84C6010000            je 00419209
:00419043 85DB          test ebx, ebx
:00419045 0F84BE010000            je 00419209

* Possible Ref to Menu: MenuID_0064, Item: ""
                         |
:0041904B 6A02          push 00000002

* Possible StringData Ref from Data Obj ->"PY"
                         |
:0041904D 685C824300              push 0043825C
:00419052 57             push edi
:00419053 E898450100              call 0042D5F0
   <------比较code前两位是否为"PY",相等则返回0...(1)
:00419058 83C40C                  add esp, 0000000C   否则不为0
:0041905B 85C0          test eax, eax
:0041905D 7418          je 00419077

* Possible Ref to Menu: MenuID_0064, Item: ""
                         |
:0041905F 6A02          push 00000002

* Possible StringData Ref from Data Obj ->"EY"
                         |
:00419061 6858824300              push 00438258
:00419066 57             push edi
:00419067 E884450100              call 0042D5F0
    <------比较code前两位是否为"EY",相等则返回....(2)
:0041906C 83C40C                  add esp, 0000000C   否则不为0
:0041906F 85C0          test eax, eax
:00419071 0F8592010000            jne 00419209

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041905D(C)
|

* Possible Ref to Menu: MenuID_0064, Item: ""
                         |
:00419077 6A02          push 00000002

* Possible StringData Ref from Data Obj ->"EY"
                         |
:00419079 6858824300              push 00438258
:0041907E 57             push edi
:0041907F E86C450100              call 0042D5F0<----同上.....................................(3)
:00419084 F7D8          neg eax
:00419086 1BC0          sbb eax, eax
:00419088 6A2D          push 0000002D
:0041908A 40             inc eax
:0041908B 57             push edi
:0041908C A304BC4300              mov dword ptr [0043BC04], eax
:00419091 E81A470100              call 0042D7B0
     <-----------------返回code中"-"的位置.........(4)
:00419096 83C414                  add esp, 00000014
:00419099 85C0          test eax, eax
:0041909B 0F8468010000            je 00419209<------若无"-",则死
:004190A1 83C9FF                  or ecx, FFFFFFFF
:004190A4 33C0          xor eax, eax
:004190A6 F2             repnz
:004190A7 AE             scasb
:004190A8 F7D1          not ecx
:004190AA 2BF9          sub edi, ecx
:004190AC 8D542414                lea edx, dword ptr [esp+14]
:004190B0 8BC1          mov eax, ecx
:004190B2 8BF7          mov esi, edi
:004190B4 8BFA          mov edi, edx
:004190B6 6A2D          push 0000002D
:004190B8 C1E902                  shr ecx, 02
:004190BB F3             repz
:004190BC A5             movsd
:004190BD 8BC8          mov ecx, eax
:004190BF 83E103                  and ecx, 00000003
:004190C2 F3             repz
:004190C3 A4             movsb
:004190C4 8D4C2418                lea ecx, dword ptr [esp+18]
:004190C8 51             push ecx
:004190C9 E8E2460100              call 0042D7B0<--------------------同上....................(5)
:004190CE 8BF8          mov edi, eax
:004190D0 83C408                  add esp, 00000008
:004190D3 85FF          test edi, edi
:004190D5 0F842E010000            je 00419209
:004190DB C60700                  mov byte ptr [edi], 00
:004191BA 8D442448                lea eax, dword ptr [esp+48]

(第三次)   这里我略去了一个繁长的计算过程。其实第二次我们不会来到这里,
反而会很快跳到:00419209处,返回eax=0,跳到失败。从第二次的过程我们看到,
注册码的前两位必须是“PY”或“EY”并且必须有一位是“-”。
再从头来一次,这次输入name:QQQ/code:EY2000-121212。进入

           :0041865B E890090000              call 00418FF0
          
           后,反正是F10,一路按下。突然,看看下面,
多么熟悉的身影映入眼帘。这样你就得到了一个正确的注册码组合。
若想作注册机就仔细研究一下略去的部分。

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004191E0(C)
|
:004191BE 8A10          mov dl, byte ptr [eax]
      <--------真假code的比较!!!...........(6)
:004191C0 8A1E          mov bl, byte ptr [esi]
:004191C2 8ACA          mov cl, dl
:004191C4 3AD3          cmp dl, bl
:004191C6 752C          jne 004191F4
:004191C8 84C9          test cl, cl
:004191CA 7416          je 004191E2
:004191CC 8A5001                  mov dl, byte ptr [eax+01]
:004191CF 8A5E01                  mov bl, byte ptr [esi+01]
:004191D2 8ACA          mov cl, dl
:004191D4 3AD3          cmp dl, bl
:004191D6 751C          jne 004191F4
:004191D8 83C002                  add eax, 00000002
:004191DB 83C602                  add esi, 00000002
:004191DE 84C9          test cl, cl
:004191E0 75DC          jne 004191BE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
       <---跳到这里,则成功
|:004191CA(C)
|
:004191E2 33C0          xor eax, eax
:004191E4 33C9          xor ecx, ecx
:004191E6 85C0          test eax, eax
:004191E8 0F94C1                  sete cl
:004191EB 5F             pop edi
:004191EC 5E             pop esi
:004191ED 8BC1          mov eax, ecx
:004191EF 5B             pop ebx
:004191F0 83C470                  add esp, 00000070
:004191F3 C3             ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
<--跳到这里,有可能成功
|:004191C6(C), :004191D6(C)                       
但看看这两个跳转,都是
|                                        
jnz,所以到这里也是死!
:004191F4 1BC0          sbb eax, eax
:004191F6 5F             pop edi
:004191F7 83D8FF                  sbb eax, FFFFFFFF
:004191FA 33C9          xor ecx, ecx
:004191FC 85C0          test eax, eax
:004191FE 0F94C1                  sete cl
:00419201 5E             pop esi
:00419202 8BC1          mov eax, ecx
:00419204 5B             pop ebx
:00419205 83C470                  add esp, 00000070
:00419208 C3             ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
   <---若跳到这里,则失败.
|:00419016(C), :0041903D(C), :00419045(C), :00419071(C), :0041909B(C)
|:004190D5(C)
|
:00419209 5F             pop edi
:0041920A 5E             pop esi
:0041920B 33C0          xor eax, eax
:0041920D 5B             pop ebx
:0041920E 83C470                  add esp, 00000070
:00419211 C3             ret

事情完了吗?没有。我们应该研究一下两个标有(***)的程序段。
第一个程序段在判断CODE中含有“R”后,把NAME和CODE在内存的地址对调;
第二个程序段是判断NAME中是否含有字符“@”。见下面总结:

总结:

这个程序存在两种类型的注册码:

1、一种注册码形式如:
Name:QQQ/code:EY2000-121212
    这里,"EY"和"-"间的数字随意。“-”后的数字由Name和“-”前的字符(包括EY)
算出。“EY”也可以是“PY”。当然"EY"和"-"间也可以没东西,这样注册后也可看到
注册成功的画面。但在联网升级时,会发生错误,连选择升级组件的列表都不出现;我
用上面的注册码注册时,会出现选择升级组件的列表,选好组件后,要求我输入email地
址,这时我才犯难了。我怎么知道有哪些email地址在它的服务器上注了册,我又不是
黑客。

2、另一种注册码形式如:
Name:anything@anything/code:EYR2002-121212
    这种形式的注册码和NAME是无关的。注册码中必须含有“R”,
前两位也必须是“EY”或“PY”。“-”后的数字由字符“EPAK”和
“-”前的字符(包括“EY”或“PY”)算出。而NAME中的“@”是必须有的,
作者很可能想让你输入email地址。这种注册码也许和引擎软件包
(Engine Pack)的升级有关。
上一篇:谈到软件狗,我说几句    下一篇:未完成的破解 (SubmitWolf Enterprise ) 上  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-26
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿