API Hook基本原理和实现

http://tech.ddvip.com   2008年01月10日    社区交流

内容摘要:将网络上几篇有代表性的api hook文章的精华进行了浓缩和适当简化,写成这篇介绍性文章。另外也希望初学者能够认真思考本文采用的循序渐进的分析思路,如何解决了一个未知的问题。文中借鉴的文献资料列于文末附录一节。

  api hook和pe格式的关系

  api hook技术的难点,并不在于hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握hook的基本使用技术。但是如何修改api函数的入口地址?这就需要学习pe可执行文件(.exe,.dll等)如何被系统映射到进程空间中,这就需要学习pe格式的基本知识。windows已经提供了很多数据结构struct帮助我们访问pe格式,借助它们,我们就不要自己计算格式的具体字节位置这些繁琐的细节。但是从api hook的实现来看,pe格式的访问部分仍然是整个编程实现中最复杂的一部分,对于经常crack的朋友不在此列。

  假设我们已经了解了pe格式,那么我们在哪里修改api的函数入口点比较合适呢?这个就是输入符号表imported symbols table(间接)指向的输入符号地址。

  下面对于pe格式的介绍这一部分,对于没有接触过pe格式学习的朋友应该是看不太明白的,但我已经把精华部分提取出来了,学习了pe格式后再看这些就很容易了。

  pe格式的基本组成

+-------------------+
  | DOS-stub     |  --DOS-头
  +-------------------+
  | file-header   |  --文件头
  +-------------------+
  | optional header |  --可选头
  |- - - - - - - - - -|
  |          |
  | data directories |  --(可选头尾的)数据目录
  |          |
  +-------------------+
  |          |
  | section headers |  --节头
  |          |
  +-------------------+
  |          |
  | section 1    |  --节1
  |          |
  +-------------------+
  |          |
  | section 2    |  --节2
  |     &// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=1036&d=cf6de2
nbsp;     |
  +-------------------+
  |          |
  | ...        |
  |          |
  +-------------------+
  |          |
  | section n    |  --节n
  |          |
  +-------------------+

来源:www.ccrun.com    作者:wskjuf    责编:豆豆技术应用

正在加载评论...