脱壳系列(三) - 输入表

前言:

输入表又称导入地址表(Import Address Table),简称 IAT

API 函数被程序调用但执行代码又不在程序中,而是位于一个或者多个 DLL 中

当 PE 文件被装入内存的时候,Windows 装载器才将 DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成,其中导入地址表就指示函数实际地址

程序:

运行

点击“确定”

点击“关闭”

点击“确定”,关闭程序

逆向:

用 OD 载入程序

载入后按 Alt+M,显示内存窗口

双击“PE 文件头”这行

往下拉

基址为 400000,基址是可以被人为修改的

这个是输入表的地址,相对于基址的,即为 402050

按 Alt+C 回到 CPU 窗口

按 Ctrl+G 跟随表达式

输入 402050,点击“OK”

这里不能直接进行分析的,需要用到插件 Analyze This

选择

第三个 IMAGE_IMPORT_DESCRIPTOR 中全是 0,是结束的标准

这两个 IMAGE_IMPORT_DESCRIPTOR 分别与 KERNEL32.dll、USER32.dll 相关联

跟随第一个 IMAGE_IMPORT_DESCRIPTOR 的第一行 2098

来到 USER32.dll 处

继续往下跟随

跟随 402122

这里都是 API 函数名

IMAGE_IMPORT_DESCRIPTOR 的第五行为指向输入表(IAT)的偏移地址

跟随 200C

这里的第二列是函数的地址

例如:77D507EA 是 MessageBoxA 函数所在的地址

验证一下

程序刚开始运行的时候调用了 MessageBoxA 函数,这里的 4011EA 就是 MessageBoxA 函数

按回车

这里将 jmp 到 77D507EA 执行 MessageBoxA 函数,这个地址是属于动态链接库的

从而验证了 77D507EA 是 MessageBoxA 函数所在的地址

转载于:https://www.cnblogs.com/sch01ar/p/9898851.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值