中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > ASM汇编
变速齿轮的原理
作者:rwjgpget 时间:2001-12-09 11:28 出处:互联网 责编:chinaitpower
              摘要:变速齿轮的原理

变速齿轮通过修改API函数GETTICKCOUNT和TIMEGETTIME骗过了游戏和程序的定时器导致游戏和程序速度看起来被改变。下面以GETTICKCOUNT为例进行分析:原本的GETTICKCOUNT汇编:

kernel32!gettickcount     mov gs,[bffcaea18]

                                    mov eax,gs:[00000000]

                                    sub edx,edx

                                     mov  gs,dx

                                     ret

变速齿轮修改后的GETTICKCOUNT汇编:

kernel32!gettickcount

 这里是关键-->jmp 840500d9(840500d9并不是绝对的)

                      add [eax],al

                      add [ecx+00000000],ah

                      sub edx,edx    

                      mov  gs,dx    

                      ret     

     可以看出变速齿轮修改了gettickcount的代码,当游戏和程序使用gettickcount时就会自动跳转到840500d9处执行。再看看840500d9处的代码汇编:

             840500d9:CLI

                            push ebp

                            mov ebp,esp               

                            push ebx                   

                            push ecx                     

                           push edx

                           push esi

                           push edi

                            call 840500e7

             840500e7:pop edi

                           xor di,di

                           mov esi,edi

                           add esi,00402051

                           sub esi,00401f0b

                           push esi      

                           call edi

                           call 84050101

            84050101:pop edi

                           xor di,di    

                           call [edi+0000fef0]                     

                           call 84050110         

            84050110:sub eax,[edi+0000ff30]     

                           mul dword,ptr[edi+0000ff30] 

                           mov ebx,00100000                 

                           div ebx                

                           add eax,[edi+0000fe20]         

                           push eax                 

                            mov eax,00402072              

                            sub eax,00401f08          

                            add eax,edi              

                            push eax             

                            call edi                  

                            pop eax                     

                            pop edi               

                           pop esi             

                           pop edx                

                           pop ecx               

                           pop ebx                

                            pop ebp                 

                            sil                

                            ret  

以上正是变速齿轮变速的核心所在。(GETTICKCOUNT返回的是EAX的值你可以对EAX进行跟踪)

    下面说一下变速齿轮挂接API的方法:首先变速齿轮在MMF区(WIN9X/ME)申请一块内存,把上面的代码从程序中移到该内存。使用修改描述符的方法从应用程序级跳到核心级(具体可查看《电脑编程技巧与维护》2000年第6期34页)修改GETTICKCOUNT开头的代码使之指向申请的内存的首地址实现挂接。 以上就是我对变速齿轮分析,如果有什么意见或想查看详细的原代码请与我联系,我的邮箱:rwjgpget@sohu.com我会尽快给你答复

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有