跟踪Native API函数调用.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文档。上传文档
查看更多
跟踪Native API函数调用

跟踪Native?API函数调用 ?????????????????????????????????????? 跟踪Native API函数调用 序言 我们来研究一样非常有用的东西。我甚至要说,在某些情况下,离了它是寸步难行的,而且它能让我们对Windows的内部机制有个很好的认识。是的,本文的题目已经是不新鲜的已经被讲滥了的东西了。在这方面有众多的文章甚至是专著,作者也都是著名的专家,像Jeferry Ritcher, Matt Petriek, Sven Schreiber, Mark Russinovich等等。 是的,值得注意的是这些内容都是针对Windows NT产品线的,对9x来说就不成了。 为了更有效地掌握文章的内容,您应该具有以下知识: ??? * C语言 ??? * 使用Windows NT? 2K/XP/2K3操作系统 ??? * 了解进程,线程和Windows NT系统的基本结构。 ??? * 知道x86处理器如何在保护模式下工作 ??? * DDK(我们这里用的是DDK 2K Build 2195) ??? * SoftIce. 我用的是DriverStudio v2.7。一定要安装完整的Studio版,而不要用那种分离出来的Ice,否则会有兼容性问题。然而这个问题在论坛上讨论了不是一两次了。 我们有什么? 就我从Ritcher写的书和文章(我为什么要把Ritcher搬出来说事儿呢?对,因为它的书和文章都翻译成了俄语且广泛流行,更重要的是他的方法是比较标准的)里学到的来看,作者从事于直接在用户模式下拦截API函数的处理与研究。对我们的意义何在呢? 这里有个对比: 方法1: 直接修改进程的import/export table,将原始函数的指针改为指向我们的stub函数。 优点: 1. 实现起来非常简单(因此在Jeferry Ritcher的“Programming Applications for Microsoft Windows”一书中对其进行了详尽的讲解)。此方法保证了进程地址空间不会受到破坏。 2. 出现问题的时候只会宕掉试验用的进程,不会使整个系统崩溃。 缺点: 1. 必须用某些方法向其它进程的地址空间中注入自己的代码(设置全局HOOK (SetWindowsHookEx()),通过注册标加载DLL,直接向进程地址空间注入代码 (WriteProcessMemory(), CreateRemoteThread()…))。 2. 不能对任意进程进行此种操作,因为Win NT为系统中所有的对象都赋予了一个security descriptor,这个security descripter定义了一个对象能否拥有另一对象以及拥有的程度。 3. 如果被拦截的系统函数A本身基于另一个系统函数B而进程突然直接调用了B,这时该怎么办?这时又得找到函数B并对其进行拦截。 4. 所跟踪到的函数调用情况只是针对于“被处理过”的进程,而不是所有的进程。 方法2: 修改包含所要跟踪的函数的那部分库代码(splicing法,例如在函数起始部分注入指向我们处理程序的机器指令Jmp 0xXXXXXXXX)。 ? 优点: 不要需要修改进程模块的import表!在Win9X中此法可以跟踪到所有进程对系统库函数的调用。 缺点: 1. 有让系统宕掉的危险,因为在修改库代码的时候可能会发生上下文的切换,如果修改尚未完成而被修改的函数被另一个进程或线程调用的话,则发生异常的可能性非常大,而可能更坏的是,系统会挂起或者是发生BSOD。如果此函数的拦截代码位于非调用进程的进程上下文中,也会有同样的问题。 ? 2. 要实现这种方法必须修改库代码的segments,而这些segments却有着“ReadExecute”属性,但修改还是可以的。 最后还有一种办法——特别是用在Windows的调试机制中(Debug API)。讲到这里,我想大家都能明白。顺便说一句,在wasm.ru有相当多的文章是讲前面这些拦截方法的。特别值得注意的是90210/HI-TECH的文章,所有这些方法在那篇文章里都有。 现在我们假设我们需要监视所有的进程来取得某些资源使用情况和对这些资源的操作(创建/打开/读取/写入某个文件、注册表、修改某个进程页的保护属性等等)。准备好了么?现在请再看一下前面的内容并告诉我,借助于前面讲的方法这可能实现吗?当然,在读者当中一定会有乐观主义者认为是可以的,但这说起来容易做起来难。但是有一种办法更为简单,最主要的是它更为有效。 ?????????????????????????????????????????????????????????? NATIVE API 我们知道,Windows 2000的设计理念是它不止能运行Win32应用

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档