脱壳高级篇之认识Import表

史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录 历史:壳是最早出现的专用加密软件技术!作用:可以是开发者未来保护自己的代码不被借鉴、破解、逆向;也可用来病毒、木马、蠕虫隐藏恶意代码,不被杀毒如软件查杀!预习:vmp纯虚拟机壳,目前公认认为公认最强。温馨提示:脱壳上瘾,可不要随意传播哦! 阅读详情
、认识Import表

著者: [yAtEs] [Jamesluton@hotmail.com] 
译者:hying[CCG] 
标题:PE输入表说明 
例子: 
下载 
    有很多介绍PE文件的文章,但是我打算写一篇关于输入表的文章,因为它对于破解很有用。 
    我想解释它的最好的方法是举一个例子,你可以跟着我逐步深入,一步一步的思考,最后你将完全明白,我选择了一个我刚下载下来的小程序,它是用TASM编译的,有一个比较小的输入表,所以我想它应该是个不错的范例。 
    好了,让我们开始吧。首先我们得找到输入表,它的地址放在PE文件头偏移80处,所以我们用16进制编辑器打开我们的EXE文件,我们先得找到PE文件头的起始点,这很简单,因为它总是以PE,0,0开始,我们可以在偏移100处找到它。在一般的WIN32程序中文件头偏移被放在文件0X3C处,在那我们通常可看到00 01 00 00,由于数据存储时是低位在前,高位在后的,所以翻转过来实际就是00000100,就象前面我们说的。接下来我们就可以在PE文件中找到我们的输入表,100+80=180在偏移180处我们看到0030 0000,翻转一下,它其实应该是00003000,这说明输入表在内存3000处,我们必须把它转换成文件偏移。 
    一般来说,输入表总是在某个段的起始处,我们可以用PE编辑器来查看虚拟偏移,寻找3000并由此发现原始偏移。很简单的。打开我们看到: 
-CODE  00001000 00001000 00000200 00000600 
-DATA  00001000 00002000 00000200 00000800 
.idata 00001000 00003000 00000200 00000A00 
.reloc 00001000 00004000 00000200 00000C00 
    找一下,我们就发现.idata段的虚拟偏移是3000,原始偏移是A00,3000-A00=2600,我们要记住2600,以便以后转换其它的偏移。如果你没找到输入表的虚拟偏移,那么就找一下最接近的段。 
    来到偏移A00处,我们就看到被称为IMAGE_IMPORT_DESCRIPTORs(IID)的东东,它用5个字段表示每一个被调用DLL的信息,最后以Null结束。 
************************************************************************** 
(IID) IMAGE_IMPORT_DESCRIPTOR的结构包含如下5个字段: 
OriginalFirstThunk, TimeDateStamp, ForwarderChain, Name, FirstThunk 

OriginalFirstThunk 
该字段是指向一32位以00结束的RVA偏移地址串,此地址串中每个地址描述一个输入函数,它在输入表中的顺序是不变的。 

TimeDateStamp 
一个32位的时间标志,有特殊的用处。 

ForwarderChain 
输入函数列表的32位索引。 

Name 
DLL文件名(一个以00结束的ASCII字符串)的32位RVA地址。 

FirstThunk 
该字段是指向一32位以00结束的RVA偏移地址串,此地址串中每个地址描述一个输入函数,它在输入表中的顺序是可变的。 
************************************************************************** 

好了,你有没有理解?让我们看看我们有多少IID,它们从偏移A00处开始 
3C30 0000 / 0000 0000 / 0000 0000 / 8C30 0000 / 6430 0000 
{OrignalFirstThunk} {TimeDateStamp} {ForwardChain} {Name} {First Thunk} 
5C30 0000 / 0000 0000 / 0000 0000 / 9930 0000 / 8430 0000 
{OrignalFirstThunk} {TimeDateStamp} {ForwardChain} {Name} {First Thunk} 
0000 0000 / 0000 0000 / 0000 0000 / 0000 0000 / 0000 0000 

    每三分之一是个分界,我们知道每个IID包含了一个DLL的调用信息,现在我们有2个IID,所以我们估计这个程序调用了2个DLL。甚至我可以打赌,你能推测出我们将能找到什么。 
    每个IID的第四个字段表示的是名字,通过它我们可以知道被调用的函数名。第一个IID的名字字段是8C30 0000,翻转过来也就是地址0000308C,将它减去2600可以得到原始偏移,308C-2600=A8C,来到文件偏移A8C处,我们看到了什么?啊哈!原来调用的是KERNEL32.dll。 
    好了,接下来我们就要去找出KERNEL32.dll中被调用的函数。回到第一个IID。 
    FirstThunk字段包含了被调用的函数名的标志,OriginalFirstThunk仅仅是FirstThunk的备份,甚至有的程序根本没有,所以我们通常看FirstThunk,它在程序运行时被初始化。 
    KERNEL32.dll的FirstThunk字段值是6430 0000,翻转过来也就是地址00003064,减去2600得A64,在偏移A64处就是我们的IMAGE_THUNK_DATA,它存储的是一串地址,以一串00结束。如下:    
A430 0000/B230 0000/C030 0000/CE30 0000/DE30 0000/EA30 0000/F630 0000/0000 0000 
    通常在一个完整的程序里都将有这些。我们现在有了7个函数调用,让我们来看其中的两个: 
DE30 0000翻转后是30DE,减去2600后等于ADE,看在偏移ADE处的字符串是ReadFile, 
EA30 0000翻转后是30EA,减去2600后等于AEA,看在偏移AEA处的字符串是WriteFile, 
    你可能注意到了,在函数名前还有2个这字节的00,它是被作为一个提示。 
    很简单吧,你可以自己来试一下。回到A00,看第二个DLL的调用 
5C30 0000 / 0000 0000 / 0000 0000 / 9930 0000 / 8430 0000 
{OrignalFirstThunk} {TimeDateStamp} {ForwardChain} {Name} {First Thunk} 
    先找它的DLL文件名。9930翻转为3099-2600 =A99,在偏移A99处找到USER32.dll。再看FirstThunk字段值:8430翻转为3084-2600=A84,偏移A84处保存的地址为08310000,翻转后3108-2600=B08,偏移B08处字符串为MessageBoxA。明白了吧,接下来你就可以把这些用在你自己的EXE文件上了。 
    摘要: 
    在PE文件头+80偏移处存放着输入表的地址,输入表包含了DLL被调用的每个函数的函数名和FirstThunk,通常还有Forward Chain和TimeStamp。 
    当运行程序时系统调用GetProcAddress,将函数名作为参数,换取真正的函数入口地址,并在内存中写入输入表。当你对一个程序脱壳时你可能注意到你有了一个已经初始化的FirstThunk。例如,在我的WIN98上,函数GetProcAddress的入口地址是AE6DF7BF,在98上,所有的KERNEL32.dll函数调用地址看上去地址都象:xxxxF7BF,如果你在输入表中看到这些,你可以利用orignal thunk重建它,或者重建这个PE程序。 
    好了,我已经告诉你它们是如何工作的,我不是专家,如果你发现什么错误,请告诉我。 

by  [yAtEs]  
从破解到防护:如何用Scylla修复被脱壳程序的导入表(IAT修复指南) 本文深入解析了如何使用Scylla工具修复脱壳程序的导入表(IAT),涵盖PE文件结构、Scylla工作原理及实战操作指南。通过详细步骤和常见问题解决方案,帮助逆向工程从业者有效应对IAT修复挑战,提升程序脱壳后的运行稳定性。 阅读详情

相关推荐

恶意代码脱壳实战:从UPX自动化到FSG手动脱壳技术详解

在软件安全领域,加壳技术常被用于保护代码知识产权,但也被恶意软件广泛用于逃避检测。其核心原理是通过加密、压缩或混淆原始可执行代码,在运行时动态还原,从而增加静态分析的难度。掌握脱壳技术对于恶意代码分析、漏洞研究和软件逆向工程具有重要价值,是安全分析师和逆向工程师的必备技能。本文聚焦于两种经典压缩壳的实战脱壳过程:利用UPX工具实现自动化脱壳,展示了工具化分析的高效性;针对FSG壳则深入讲解了手动脱壳的核心方法,包括通过调试器跟踪执行流程、运用ESP定律定位原始入口点(OEP)、以及关键的内存转储与导入表修复

weixin_34377919的博客 409

编程开发-编程工具-importrec输入表重建工具 v1.7.zip

编程开发-编程工具-importrec输入表重建工具 v1.7.zip

手把手教你用Scylla修复Mp3Resizer.exe的IAT表(附脱壳完整流程)

本文详细解析了使用Scylla工具修复Mp3Resizer.exe的IAT表全流程,涵盖脱壳、定位OEP、IAT修复等关键步骤。针对Scylla无法识别的库文件提供了有效解决方案,帮助逆向工程爱好者掌握软件安全分析的核心技术。

weixin_30316097的博客 425

ImportRECImportREC

ImportRECImportRECImportRECImportRECImportRECImportREC

逆向工程实战指南:从程序脱壳到IAT修复的完整解析

本文详细解析了逆向工程中的程序脱壳与IAT修复技术,涵盖从基础概念到实战技巧的完整流程。通过介绍压缩壳与加密壳的区别、OEP定位方法、脱壳工具链使用以及IAT修复策略,帮助读者掌握逆向工程的核心技能,特别适用于软件保护技术领域的研究与实践。

weixin_29327977的博客 200

18款脱壳工具实战指南:逆向工程与软件安全分析必备

在软件安全与逆向工程领域,加壳技术是常见的代码保护手段,它通过压缩、加密或混淆原始二进制代码,增加静态分析的难度。其核心原理是在程序运行时动态解密并加载原始代码到内存中,从而隐藏真实逻辑。掌握脱壳技术对于恶意软件分析、漏洞研究、软件兼容性调试等场景具有重要价值。通过动态调试、内存转储与导入表修复等关键技术,可以有效还原程序原貌。本文基于实战经验,系统梳理了以x64dbg、Scylla为代表的动态脱壳工具链,以及Exeinfo PE、UPX等静态与专用工具,构建了一套覆盖不同壳类型与场景的脱壳工具箱,帮助安全

weixin_34248023的博客 508

ImportREC输入表重建工具

Import REConstructor可以从杂乱的IAT中重建一个新的Import表(例如加壳软件等),它可以重建Import表的描述符、IAT和所有的ASCII函数名。用它配合手动脱壳,可以脱UPX、CDilla1、PECompact、PKLite32、Shrinker、ASPack, ASProtect等壳。 在运行Import REConstructor之前,必须满足如下条件: 目标文件己

wang010366的专栏 3142

CTF逆向入门:从UPX脱壳到IDA静态分析的完整实战指南

在软件安全与逆向工程领域,可执行文件加壳是一种常见的安全保护技术,它通过对原始代码进行压缩或加密来增加分析难度。其核心原理是在原始程序外包裹一层额外的代码(壳),在运行时负责解密或解压原始程序到内存中执行。掌握脱壳技术对于恶意软件分析、漏洞研究和CTF竞赛具有重要价值,尤其是在软件安全评估和知识产权保护等应用场景中。本文以经典的UPX压缩壳为例,结合CFF Explorer和IDA Pro等工具,详细演示了从壳类型识别、手动脱壳到静态分析的全流程。通过具体案例,深入讲解了入口点定位、内存转储和导入表修复等关

weixin_33713503的博客 299

34. 脱壳篇-FSG压缩壳、ImportREC修复IAT输入表的使用,令一种寻找OEP方式

直接将exe拖至FSG进行压缩壳 OD打开 第一次选择,然后重新加载(Ctrl+F2) 这次选择这样 结果 分析后 dump出来,注意:重建输入表不勾选,否则软件崩溃不可用行 寻找,我们要引入一个非常优秀的输入表(IAT)修复工具,ImportREC 输入OEP 输入 这两个位置不对,我们输入地址在OD里查询看一下,记得加基...

墨痕诉清风的博客 2741

从‘simple unpack’到实战:手把手教你用UPX工具给恶意样本脱壳(附病毒分析避坑指南)

本文详细介绍了UPX脱壳技术在恶意样本分析中的实战应用,从CTF竞赛到真实环境的安全规范、脱壳技巧及恶意代码定位策略。通过分享高级脱壳技巧和自动化分析脚本,帮助安全研究人员高效处理加壳样本,提升恶意软件分析能力。

weixin_30607029的博客 816

ImportRECv1.7 IAT修复工具1.7版

比较新版的ImportREC ,用过的人都知道,修复PE文件和IAT表的重要工具

用importREC修复Import表

1、用ollydbg找到正确的OEP(脱壳和修复导入表都要用到)2、脱壳在当前进程,如脱壳出来的程序不能运行,提示无法定位程序输入点,需要使用importREC修复导入表。3、打开importREC,选正ollydbg正在调试的进程,填入正确的OEP,点ITA AutoSearch,如oep正确将得到正确提示,点GetImport,得到正确的导入表。点Fix Dump,选择脱壳出来的保存文件,Do

islq's space 9282

ImportREC 1.7汉化版

ImportREC 1.7汉化版用于对一般带壳的软件进行脱壳

CTF逆向工程:脱壳与SMC技术实战解析

逆向工程中的脱壳与自修改代码(SMC)技术是软件安全领域的核心课题。脱壳技术主要解决商业保护壳的多层加密问题,通过动态调试和内存转储获取原始代码;SMC技术则涉及运行时代码修改,需要特殊分析方法。这两种技术在CTF竞赛、恶意软件分析和商业软件保护中具有重要应用价值。以NSSCTF实战为例,掌握x64dbg、IDA Pro等工具链的深度使用,配合自动化脚本处理NetReactor、爱加密等商业壳,能有效提升逆向效率。当前虚拟化保护、硬件辅助安全等新型防御技术的出现,使得逆向工程面临更复杂的挑战。

weixin_33933118的博客 343

importREC V1.6F 汉化版

importREC V1.6F 汉化版 aaaaaaaaaasssssssss

ImportREC 输入表修复工具

非常好用的输入表修复工具,反汇编常用工具,完美。

上一篇: 浅谈程序脱壳后的优化
下一篇: SSDT Hook的妙用-对抗ring0 inline hook
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值