stud_PE软件
从这张图片中我们得到如下信息
从外部引入的函数
文件头
最重要的也就是这个说明可选头大小的字段了
节表
我觉得最重要的就是这两个了
其他的节表依次类推都可以了
.rdata节
这个节是最不想分析的。。。
- 这个节最重要的就是IDT, IDT的RVA可以通过可选头查到
- 看这个PE文件引用了几个外部的dll, n个dll就是 有(n+1)*20个字节大小
- IDT的每一项都是20个字节, 分成5个部分, 每一个部分都是4个字节, 第一个四个字节直接指向了INT, 最后一个四个字节直接指向了IAT。
- IDT的最后一项,也就是20个字节, 全部填0
- INT和IDT在文件中是一样的, 有几个dll, 就有几个项。
- INT和IDT的每一项都是8个字节,其中前四个字节指向hint, 后四个字节全部填0
- INT的第一项的四个字节的最高位如果是0, 代表用名字来引入函数, 如果是1, 代表用序 来引入函数
- IAT在内存中会被对应函数的地址取代, INT还是原来的
通过序 引入外部函数
首先明确一下PE文件是怎么引入外部的函数地
请看这张图
-
在文件中找到库的名字。装载相应的库
-
定位INT,
这时候可以看到是通过序 引入还是通过名字引入
如果是序 引入, 最高位是1, 十六进制表示是8, 这样就直接去库文件中找到相应的函数地址。
这里做了一个小实验, 本来文件是通过函数名引入的 但是如果我将高位修改为1, 这时候通过序 引入, 但是这个序 出错了。 所以 错如下
手动去找exitProcess的序 183, 十六进制就是
当然, 也可以用peview去找函数的序
那么如何在内存中去查看IAT中的内容呢p>
打造最小PE文件
修改最小对齐单位
可选文件头的目录项只需要引入函数节
节表也可以进行删除
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!