专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » 拦截api:Detour开发包之API拦截技术 »正文

拦截api:Detour开发包之API拦截技术

来源: 发布时间:星期四, 2008年9月25日 浏览:81次 评论:0
我们截获执行最直接就是为增添功能修改返回值或者为调试以及性能测试加入附加代码或者截获输入输出作研究破解使用通过访问源代码我们可以轻而易举使用重建(Rebuilding)操作系统或者应用思路方法在它们中间插入新功能或者做功能扩展然而在今天这个商业化开发世界里以及在只有 2进制代码发布系统中研究人员几乎没有机会可以得到源代码本文主要讨论Detour在Windows 2进制PE文件基础上API截获技术对于Linux平台作这件事情将会非常简单由于最初操作系统设计者引入了LD_PRELOAD如果你设置LD_PRELOAD=mylib.so那么应用在载入dll时会先查看mylib.so符号表在relocation时候会优先使用mylib.so里symbol假如你在mylib.so里有个prf那么这个prf就会替代libcprf而在mylib.so里这个prf可以直接访问libc.so里prf指针来获得真正prf入口地址这样所有dllAPIHOOK在loader加载dll时候就已经完成非常自然和平台相关部分全部交给loader去处理

、Detour开发库:

介绍
Detours是个在x86平台上截获任意Win32工具库中断代码可以在运行时动态加载Detours使用个无条件转移指令来替换目标最初几条指令将控制流转移到个用户提供截获而目标些指令被保存在个被称为“trampoline”(译注:英文意为蹦床杂技)在这里我觉得翻译成目标部分克隆/拷贝比较贴切这些指令包括目标中被替换代码以及个重新跳转到目标无条件分支而截获可以替换目标或者通过执行“trampoline”时候将目标作为子办法来扩展功能
Detours是执行时被插入内存中目标代码不是在硬盘上被修改因而可以在个很好粒度上使得截获 2进制执行变得更容易例如个应用执行时加载DLL中过程可以被插入段截获代码(detoured)和此同时这个DLL还可以被其他应用按正常情况执行(译注:也就是按照不被截获方式执行DLL 2进制文件没有被修改所以发生截获时不会影响其他进程空间加载这个DLL)区别于DLL重新链接或者静态重定向Detours库中使用这种中断技术确保不会影响到应用思路方法或者系统代码对目标定位
如果其他人为了调试或者在内部使用其他系统检测手段而试图修改 2进制代码Detours将是个可以普遍使用开发包据我所知Detours是第个可以在任意平台上将未修改目标代码作为个可以通过“trampoline”来保留开发包而以前系统在逻辑上预先将截获代码放到目标代码中而不是将原始目标代码做为个普通我们独特“trampoline”设计对于扩展现有软件Software 2进制代码是至关重要
出于使用基本截获功能Detours同样提供了编辑任何DLL导入表功能达到向存在 2进制代码中添加任意数据节表个新进程或者个已经运行着进程中注入个DLL旦向个进程注入了DLL这个动态库就可以截获任何Win32不论它是在应用中或者在系统库中
基本原理

1.WIN32进程内存管理
众所周知WINDOWSNT实现了虚拟存储器WIN32进程拥有4GB虚存空间有关WIN32进程虚存结构及其操作具体细节请参阅WIN32API手册以下仅指出和Detours相关几点:
(1)进程要执行指令也放在虚存空间中
(2)可以使用QueryProtectEx把存放指令页面权限更改为可读可写可执行再改写其内容从而修改正在运行
(3)可以使用VirtualAllocEx从个进程为另正运行进程分配虚存再使用QueryProtectEx把页面权限更改为可读可写可执行并把要执行指令以 2进制机器码形式写入从而为个正在运行进程注入任意代码
2.拦截WIN32API原理
Detours定义了 3个概念:
(1)Target:要拦截通常为WindowsAPI[Page]
(2)Trampoline:Target部分复制品Detours将会改写Target所以先把Target前5个字节复制保存好方面仍然保存Target过程语义方面便于以后恢复
(3)Detour:用来替代Target

Detours在Target开头加入JMPAddress_of_Detour_Function指令(共5个字节)把对Target引导到自己Detour把Target开头5个字节加上JMPAddress_of_Target_Function+5共10个字节作为Trampoline请参考下面图1和图2


(图1:Detour过程)
er\" alt=/Files/BeyondPic/2007-8/1/crack_01.jpg src=\"/Files/BeyondPic/2007-8/1/crack_01.jpg\" border=0>

(图2:Detour过程)

er\" alt=/Files/BeyondPic/2007-8/1/crack_02.jpg src=\"/Files/BeyondPic/2007-8/1/crack_02.jpg\" border=0>

介绍说明:
目标:
目标体( 2进制)至少有5个字节以上按照微软介绍说明文档Trampoline体是拷贝前5个字节加个无条件跳转指令话(如果没有特殊处理不可分割指令话)那么前5个字节必须是完整指令也就是不能第5个字节和第6个字节是条不可分割指令否则会造成Trampoline执行条完整指令被硬性分割开来造成崩溃对于第5字节和第6个字节是不可分割指令需要调整拷贝到杂技(Trampoline)字节个数这个值可以查看目标汇编代码得到是目标修改版本不能在Detour中直接需要通过对Trampoline来达到间接
1

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: