- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
修改程序功能的方法 摘要:文章从静态和动态两个方面介绍了修改程序功能的几种方法,并总结了各种方法的优缺点。 关键词:修改;程序功能;截获系统调用 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)31-0059-02 在工作中我们经常会遇到一些需要修改现有程序的情况,如修改程序界面,对程序输入输出数据进行加解密,修改程序的某些功能等。对于游戏爱好者来说,能自己做一个游戏外挂将是很有效增加积分的方法。对于研究病毒的人来说,修改程序是一种病毒感染的常用方法。 1 概述 如果我们能获得程序的源代码,一切都迎刃而解了,直接修改程序代码,可以做任何我们想做的修改。但大多数情况下我们并不能获得程序的源代码,这时我们就需要对二进制的可执行文件进行修改或进行运行控制,改变其运行行为,以达到我们的目的。这可以通过两种方式进行,一种是静态修改二进制文件,另外一种是动态捕获软件对系统功能的调用。 2 静态方法 这种方式主要是对二进制的程序进行直接修改,从而改变其行为。从原理上?v,这种方法可以实现和修改源代码一样的功能,但在现今的技术条件下,我们只能实现有限的修改功能。 如果是用解释型语言编写的程序,如foxpro、java等,可以使用逆向工程工具进行反编译,可以较大程度上恢复源代码,这样对程序的修改就比较方便了,如foxpro程序,可以基本上恢复为源代码。但有些解释性语言如c#,java等,只能恢复一部分代码。对这种形式程序的修改可参阅一些逆向工程的书籍,如文献[1],本文不作讨论。 如果只是修改软件的资源,如进行汉化等,可以使用一些汉化工具直接对资源进行修改。 静态修改基本上遵循如下步骤,首先对二进制程序进行反汇编,使用高级反汇编工具,如IDA Pro可以较大程度上获得各个模块的调用关系和程序的基本框架,以及对windows API 的调用情况等。然后对反汇编的汇编代码进行分析,找出要修改部分的代码所在的位置及调用关系等。最后使用二进制编辑器,如Hex Workshop等或者编写程序对二进制文件进行修改。 其实采用静态方法修改程序功能受到很多方面的限制,一般只能做简单的修改,如crack密码,跳过某些执行代码等,要进行功能很复杂的修改则需要克服很多的困难,有时甚至是不可能完成的。比如上面所说步骤中的第二步,找到待修改的位置,这其实是一个非常困难的工作,也是修改的关键性步骤。二进制文件的反汇编代码非常大,即使使用IDA Pro这样的工具也只能获得一个很复杂的调用关系图,而且和源代码的调用关系图有很大的差距。我们知道汇编代码的可读性是很差的,这种反汇编的代码的可读性更差。一般通过动态调试和静态分析相结合的方法来分析程序的结构。第三步文件修改也涉及很多工作,如代码放置位置、文件头修改、输入输出函数表修改、函数重定位等,但好在这部分有较成熟的技术,也有一些工具可以做这部分工作,有兴趣的可参阅文献[2]。 3 动态方法 动态方法的核心思想就是截获系统调用,也就是系统的API函数,因为软件不管其功能如何复杂,其都是在调用系统函数的基础上完成的,例如NotePad程序就是调用TextOut或TextOutW函数将文本显示在窗口中的,如果我们截获此调用,则可以截获显示在窗口中的数据,可以进行及时翻译、数据解密等工作。对于对输入输出数据(如硬盘数据,网络数据等)的加解密工作,可以通过各自专有的机制进行,如对硬盘数据可以采用IFS(Installable File System)的过滤驱动来实现,详见[3],对网络数据可以采用NDIS(Network Driver Interface Specification)来实现,详见[4],但这种方式是针对整个系统进行的,对系统的性能有较大影响,而且实现很复杂,需要较强的技术基础,我们修改的是某个程序的功能,不需要在整个系统级别上进行,我们只要捕获此程序的相应的输入输出函数即可,如对网络的WSASend和WSARecv等函数,硬盘的ReadFile和WriteFile等。游戏外挂制作可能根据需要使用多种技术,如模拟鼠标和键盘消息来自动操作游戏,自动发送和捕获网络数据包进行游戏操作模拟等,这里对数据包的捕获即可以通过截获系统调用来实现。 截获系统调用有多种方法,总体上可以分为内核层捕获和用户层捕获两种。内核层捕获工作在内核层,也就是ring0级,主要是通过对windows并未正式公布的一些内部数据结构的修改和操作来达到捕获函数的目的,这种方法捕获的层次低,可以更接近原始的数据,可以对所有的用户层进程进行捕获,受用户层程序的影响小,缺点是在内核层编程,程序调试、安装和与用户层程序通信都较复杂,另外因为使用的都
有哪些信誉好的足球投注网站
文档评论(0)