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

预备知识

本实验要求实验者具备如下的相关知识。
1.加密外壳中,破坏原程序的输入表是很关键的一步。在脱壳中,需要脱壳者对于pe格式中的输入表概念非常清楚。常见输入表的结构是为了表示从系统或外界调用DLL中的某些函数设计的。使用这些函数会涉及到函数名,函数所在的地址,这些分别用INT,IAT来表示。
INT:全称import name table输入名称表。简单来说,INT表存放了若干指针,通过这些指针,你可以找到所调用的函数的名字。
IAT:全称import address table输入地址表。简单来说,IAT表同样存放了若干指针,通过这些指针,你可以找到所调用函数的内存加载地址,也就是函数的入口地址。
windows弹窗程序编码说明:
程序用到的函数有两个:
MessageBoxA,在user32.dll中:

int WINAPI MessageBox(
    _In_opt_  HWND hWnd,
    _In_opt_  LPCTSTR lpText,
    _In_opt_  LPCTSTR lpCaption,
    _In_      UINT uType
);

ExitProcess在kernel32.dll中:

VOID WINAPI ExitProcess(
    _In_  UINT uExitCode
);

实验目的

通过该实验熟悉windowspe文件中导入表的结构和加载过程。通过手动完成导入表修复,理解导入表在pe文件中的作用。

实验环境

在这里插入图片描述
测试环境:windows xp sp3

实验步骤一

实验提供了一个不能正常运行的程序,如果在正常运行的情况下,程序的功能是弹出一个messagebox,然后正常退出。要做的,是通过排查错误,找到问题所在,修改程序,使其正常运行。
为此,本实验大致需要执行以下三个步骤:
1.大致了解程序的执行过程,通过od,配合stud_pe找到问题所在。
2.修改pe文件头中关于导入表的信息。
3.修改涉及到INT与IAT表的段中的信息。
任务描述:运行程序,用od调试,使用stud_pe查看,了解整个程序的流程,找出问题所在。
1.测试程序:
在这里插入图片描述
从图中可以看到可以显示控制台,但是程序没有正常运行,系统提示报错。
2.使用OD加载程序,查看程序执行流程,分析出错原因。
在这里插入图片描述
3.汇编代码中有push,有call,有jmp到最终地址,可以知道这里面涉及了函数调用,因为最终的函数调用都是用jmp这条指令来执行的,所以查看一下jmp到了那里。
选中jmp函数,右键[数据窗口中跟踪],[内存地址]。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值