变速齿轮工作原理解密.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
变速齿轮工作原理解密

变速齿轮工作原理解密 PS:昨天回家搭车时听了About变速齿轮的工作原理的探讨,感觉有点奇怪,于是上网查了下,貌似最有说服力就是这篇,关于利用驱动通过Ring0进行访问I/O,我感觉采用这种方法的可能性不大,因为没下载变速齿轮,无法得知他是否采用这种方法。(用了呢种方案出错率非一般的大,一错了,随时死机。。。) ---------------------------------我是传说中的分割线------------------------------------- 变速齿轮工作原理解密 绝大部分游戏里面即时都会用到使用的定时器,变速齿轮之所欲可以给游戏加速,就是改变了定时器的性质。 有两种办法可以改变系统定时器。 1)API代码注入,通过注入自己的代码,使得API跳转到自己的代码处运行 计时API函数有GETTICKCOUNT和TIMEGETTIME,它是windows系统函数,如果可以找到他们的未知,修改成对自己有利的形式,就达到了加速的目的。 下面以GETTICKCOUNT为例进行分析:原本的GETTICKCOUNT汇编: kernel32!gettickcountmovgs,[bffcaea18] moveax,gs: subedx,edx movgs,dx ret 变速齿轮修改后的GETTICKCOUNT汇编: kernel32!gettickcount 这里是关键--jmp840500d9(840500d9并不是绝对的) add[eax],al add[ecx,ah subedx,edx movgs,dx ret 可以看出变速齿轮修改了gettickcount的代码,当游戏和程序使用gettickcount时就会自动跳转到840500d9处执行。 再看?40500d9处的代码汇编: 840500d9:CLI pushebp movebp,esp pushebx pushec pushedx pushesi pushedi call840500e7 840500e7:popedi xordi,di movesi,edi addesisubesi,00401f0b pushesi calledi cal84050101:popedi xordi,di call[edi+0000fef0] cal84050110:subeax,[edi+0000ff30] muldword,ptr[edi+0000ff30] movebxdivebx addeax,[edi+0000fe20] pusheax moveaxsubeax,00401f08 addeax,edi pusheax calledi popeax popedi popesi popedx popecx popebx popebp sil ret 以上正是变速齿轮变速的核心所在。(GETTICKCOUNT返回的是EAX的值你可以对EAX进行跟踪) 下面说一下变速齿轮挂接API的方法:首先变速齿轮在MMF区(WIN9X/ME)申请一块内存,把上面的代码从程序中移到该内存。使用修改描述符的方法从应用程序级跳到核心级,修改GETTICKCOUNT开头的代码使之指向申请的内存的首地址实现挂接。 这是普遍采用的一种方式。 2)还有一种方式。从驱动级修改。 在win95/98时代,我们是可以直接操作IO端口的,winNT以后,包括2000,XP系统,当我们试图操作IO端口,改变硬件设置的时候,系统会拒绝或者引起冲突。事实上在386以后的CPU上,用户程序都是运行在保护模式下,用户对IO端口对设备的访问都要经过操作系统的管理和监督。用户程序是无法直接对设备操作的。 那么在window下,要访问设备怎么办?windows提供了2中办法: 第一,通过修改EFLAGS寄存器中的特权级别(IOPL)实现 第二,任务状态段(TSS)中的IO许可映射BIt位 WindowsNT下,只使用了2种等级的特权级,0特权级和3特权级。用户程序运行在3特权级,设备驱动和系统内核运行在0特权级。只有系统内核程序和设备驱动才被允许直接操作IO端口。所有的用户程序在访问IO端口前,都需要得到设备驱动的准入,低信任级别的程序是无法访问的。 IObit映射就是为了使得那些低信任级别的程序能够访问设备IO而设置的。 在NT系统下,直接操作IO端口就有两种方式,一是,编写设备驱动,运行在0特权级直接操作IO设备端口。另外一种可行的办法就是修改IObit映射。 我们建议采用第一种办法,通过工作在0特权级的驱动访问IO端口。 这里有写好的设备驱动,PortTalk.

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档