前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手工修复PE导入表

手工修复PE导入表

作者头像
yichen
发布2020-01-02 18:00:46
1.8K0
发布2020-01-02 18:00:46
举报

PE结构分析之手工修复导入表

打开文件,发现打不开

用 winhex 打开,看一下代码节,在2000处与2008处调用了函数

用 Stud_PE 打开

在区段选项中的 .rdata 处右键,选择转到区段初始

可以看到导入表全是0,就是这里的原因使得无法正常打开,要想打开,我们需要修复导入表

我们可以看一下RVA <=> RAW,2000对应的文件地址为600

在 winhex 中找到导入表的位置,看到有messagebox、user32.dll、exitprocess、kernel32.dll 等信息

前置知识:

INT能够表示出函数名是什么,IAT能够表示出这个函数的入口地址在哪里。

可是系统不知道那个结构是INT,IAT。这时候就用IID来描述。通过IID可以找到INT,IAT,以及调用的dll名称。

Pe文件加载的时候,先通过IID里面指向的INT表获取出该函数名,在dll中查找出来该函数的入口地址,然后填入IID里面指向的IAT表

019D是 messageboxA 的索引号,后面是他的字符串描述。两者合起来构成 IMAGE_IMPORT_BY_NAME 结构

可以看到 messagebox 位置是205C(RVA)

在 IAT 表600(RAW)位置填上205C,IAT 表中每4个字节表示函数名的 RVA。以4个0表示该 IAT 的结束

整理出各个函数及 DLL 的 RVA

这样把 IAT 表修复完成

下面需要完成 INT 表的建立。INT 表应该在 IID 之后,所以先确定 IID 的位置。IID 一共有3个,每个 IID 0x14 长度,3个加起来应该有 0x3c 长度

INT 表示函数调用结束使用4个0作为标志。因为指向的都是同一个地址,所以每个 INT 的值和对应的 IAT 的值是一样的,下面把 INT 表修复完成

下面来完成 IID,先来完成第一个关于 messagebox 的 IID。第一个4字节,是关于调用的 messagebox 函数的 INT 地址,查看得到 messagebox 在 INT 表中的位置:204C。后面两个4字节全填0。第四个4字节是 user32.dll 的RVA,查看得到:206A,最后一个4字节是 messagebox 的 IAT 地址:2000

完成所有修复后结果:

已经可以打开了:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档