首页
社区
课程
招聘
[原创]IAT 重建工具 - IATRebulid
发表于: 2008-3-22 16:39 60094

[原创]IAT 重建工具 - IATRebulid

2008-3-22 16:39
60094

IAT 重建工具
最近,写了一个IAT重建工具,感觉还比较有实用性,为感谢看雪论坛及坛上各位前辈,大侠,兄弟们之前对我的无私帮助,将这个软件发放出来,献给大家,希望大家喜欢,同时希望得到高手的指点,让这个软件更加完善。

IATRebulid 使用说明
一、IATRebulid V1.01主要功能:
1. 对PE文件的引入表进行手工重建功能
2. 往PE文件中追加引入函数
3. 导出PE文件的引入表
4. 对PE文件增加新节
5. RVA 地址转换
6. 更改PE文件头的相关数据

二、编写原因
1. 在用ImportREC进行引入表修复时,经常出现ImportREC无法修补,甚至没有反应的现象,搞得很郁闷。
2. 在PE DIY时,用LordPE加入引入函数,每进行一次引入,都会增加一个新节,搞得很不爽。
基于以上原因,于是就了写这个软件。

三、软件界面


四、实例分析:
现以来自PYG的一个CM为例(见附件),来说明这个软件是如何重建引入表的:
1. 查壳
PEiD侦测出壳为:FSG 2.0 -> bart/xt

2. 脱壳
bp LoadLibraryA 下断,可以定位到下面:

004001C1    5E              POP ESI
004001C2    AD              LODS DWORD PTR DS:[ESI]
004001C3    97              XCHG EAX,EDI
004001C4    AD              LODS DWORD PTR DS:[ESI]
004001C5    50              PUSH EAX
004001C6    FF53 10         CALL DWORD PTR DS:[EBX+10]               ; kernel32.LoadLibraryA
004001C9    95              XCHG EAX,EBP
004001CA    8B07            MOV EAX,DWORD PTR DS:[EDI]
004001CC    40              INC EAX
004001CD  ^ 78 F3           JS SHORT CrackMe0.004001C2
004001CF    75 03           JNZ SHORT CrackMe0.004001D4
004001D1    FF63 0C         [COLOR="Red"]JMP DWORD PTR DS:[EBX+C][/COLOR]				;转入OEP
004001D4    50              PUSH EAX
004001D5    55              PUSH EBP
004001D6    FF53 14         CALL DWORD PTR DS:[EBX+14]               ; kernel32.GetProcAddress
004001D9    AB              STOS DWORD PTR ES:[EDI]
004001DA  ^ EB EE           JMP SHORT CrackMe0.004001CA
004689DC   ?  55            PUSH EBP
004689DD   ?  8BEC          MOV EBP,ESP
004689DF   .  83C4 F0       ADD ESP,-10
004689E2   .  B8 E4874600   MOV EAX,CrackMe0.004687E4
004689E7   .  E8 74D2F9FF   CALL CrackMe0.00405C60
004689EC   .  A1 90A94600   MOV EAX,DWORD PTR DS:[46A990]
004689F1   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
004689F3   .  E8 B4AAFEFF   CALL CrackMe0.004534AC
004689F8   .  A1 90A94600   MOV EAX,DWORD PTR DS:[46A990]
004689FD   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
004689FF   .  BA 3C8A4600   MOV EDX,CrackMe0.00468A3C
00468A04   .  E8 B3A6FEFF   CALL CrackMe0.004530BC
...
004001C6    FF53 10         CALL DWORD PTR DS:[EBX+10]               ; kernel32.LoadLibraryA
004001C9    95              XCHG EAX,EBP
004001CA    8B07            MOV EAX,DWORD PTR DS:[EDI]
004001CC    40              INC EAX
004001CD  ^ 78 F3           JS SHORT CrackMe0.004001C2
004001CF    75 03           JNZ SHORT CrackMe0.004001D4
004001D1    FF63 0C        [COLOR="red"] JMP DWORD PTR DS:[EBX+C][/COLOR]				;转入OEP
004001D4    50              PUSH EAX
004001D5    55              PUSH EBP
004001D6    FF53 14         CALL DWORD PTR DS:[EBX+14]               ; kernel32.GetProcAddress
004001D9    AB              STOS DWORD PTR ES:[EDI]
004001DA  ^ EB EE           JMP SHORT CrackMe0.004001CA
0046C12C  7C93188A  ntdll.RtlDeleteCriticalSection
0046C130  7C9210ED  ntdll.RtlLeaveCriticalSection
0046C134  7C921005  ntdll.RtlEnterCriticalSection
0046C138  7C809FA1  kernel32.InitializeCriticalSection
0046C13C  7C809B14  kernel32.VirtualFree
0046C140  7C809A81  kernel32.VirtualAlloc
...
0046C1B0  7C812CA9  kernel32.GetStdHandle
0046C1B4  7FFFFFFF
0046C1B8  77D3FA46  user32.GetKeyboardType
0046C1BC  77D3EC98  user32.LoadStringA
0046C1C0  77D5050B  user32.MessageBoxA
0046C1C4  77D3EC40  user32.CharNextA
...
0046C734  771950C0  comctl32.ImageList_GetImageCount
0046C738  77195084  comctl32.ImageList_Destroy
0046C73C  771992D5  comctl32.ImageList_Create

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (69)
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
第1个问题,偶尔碰到过,主要是在修复DLL时出现过。
第2个问题是有你说的现像,新建输入函数,一些工具会增加一个新节。不知此时,用ImportREC再重建一下,能不能将这些杂乱的输入表理顺?

先下载试用,有bug再反馈。
2008-3-22 17:14
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
期待吧 呵呵好工具期待完美
2008-3-22 18:21
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
谢谢老大,不知老大用的ImportREC是哪过版本的,我用ImportREC经常不顺手,由其在自动跟踪时,ImportREC就死了,这时除了强行关闭,没有其它的办法
2008-3-22 19:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
测试下看好不好使。
2008-3-23 18:05
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
看作者自己的描述,貌似比较复杂,能否做的更傻瓜化点?
我很笨的,学不来~~
2008-3-24 09:16
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
多谢指点

本来是可以做成自动搜索和分析IAT表, 但那样做的话就和ImportREC是一样的了,那还不如直接用ImportREC, 我这里是想完全通过手工的方式安排,定位IAT表.

如果不熟悉这个软件,刚开始肯定确得很嘛烦, 由于这个软件是我自已写,我自已用起来感觉还很顺手,文中提到的那个例子, 通过手工方式, 也就几分钟搞定了.

当然,这个例子用ImportREC修补IAT会更快,  我只是想以一种更大的自由度方式来修补IAT.

某些情况下,可能用ImortREC无法修补IAT,或修补不完整, 之前我都是先运行脱壳后的程序,出现异常后,再来对比加壳程序,找出调用的API函数, 就这样一个一个地手工修补, 这样搞,觉得太费事了.

不过,在以后版本中,我会考虑尽量简化操作的.
2008-3-24 12:41
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
像跨平台API应该工具自动改正,LZ工具把简单操作复杂化了。
2008-3-24 16:52
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
9
问题是,有时好像无法自动改正
2008-3-24 21:39
0
雪    币: 218
活跃值: (299)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
在我机上导出IAT不行
不能生成TXT文件

是不是我不会用
2008-3-24 21:57
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
11
谢谢反馈问题,确实存在这个问题,附件已修正
2008-3-24 22:16
0
雪    币: 218
活跃值: (299)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
导出IAT成功后,光标还是忙,动一下才变了,其实此时工作已完成,不忙了
2008-3-25 21:52
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
13
不好意思,导出工作完成后,没有及时恢复鼠标状态。

另外,我还发现有一个小问题:导出的IAT文件文件中数据地址是以RVA地址表示的,但在引入IAT文件时,要求以VA地址引入,这给实际操作带来稍有不便(要求手工转换一下)

这些问题,下版一并解决.

谢谢!
2008-3-25 23:16
0
雪    币: 218
活跃值: (299)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
ASPack 2.12 -> Alexey Solodovnikov [Overlay]的壳
用你的软件重建IAT后运行时怎么要winspool.dll文件
下载后 又报44813无法定位于msvfw32.dll
不知道怎么回事

软件下载地址http://www.yyebook.com/    友益**8.1.9
上传的附件:
2008-3-26 10:14
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
呵呵,简单地看了一下这个软件,应该很简单,直接ESP定律脱之,引入表没有破坏,所以本软件在这里没有用武之地.

但程序有文件自校验,若脱壳后直接运行,闪一下窗口就退出了

可以 bp CreateFileA 和 bp ReaFile 下断, 拦截到相关调用点,进一步跟踪应可去除自校验

--------------------------------------------------------------------------------------------------------------------------------

看了一下那个IAT文件, 有些地方不太对: 如:

[kernel32] 00643208
GetCurrentThreadId
[ntdll]00643208
RtlDeleteCriticalSection
RtlLeaveCriticalSection
RtlEnterCriticalSection
[kernel32]00643218
InitializeCriticalSection

这里将ntdll和kernel32安排在同一个地址: 00643208, 这肯定是不行的.

根据我的经验,ntdll下面的那3个函数应是Kernel32下的三个函数,可直接将Rtl前缀去掉,如下:
[kernel32] 00643208
GetCurrentThreadId
DeleteCriticalSection
LeaveCriticalSection
EnterCriticalSection
InitializeCriticalSection
这样,这些函数就全部位于 Kernel32.dll中了.

另外,文件中还有类似: ASCII "j$h" 之类的东东,如下:

FindFirstFileA
;ASCII "j$h"                <=== 注意
CreateDirectoryA

FindFirstFileA
;ASCII "j$h"                <=== 注意
FileTimeToLocalFileTime

这里好像是一个API函数地址,将它注释掉了, 是不对的,这样的话,下面的函数就会全部错位了. 我的做法是:如果不知道这个函数名称,就用上一个函数名称暂时取代它,如下所示:

FindFirstFileA
FindFirstFileA                <=== 用上一个函数暂时取代
CreateDirectoryA

FindFirstFileA
FindFirstFileA                <=== 用上一个函数暂时取代
FileTimeToLocalFileTime

如果运行出错,再进一步跟踪原因.

谢谢使用!
2008-3-26 13:13
0
雪    币: 218
活跃值: (299)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
005C1279   .  75 13         jnz     short 005C128E;  自关闭校验码处  nop后这个地方后软件能启动,
但ESP定律脱之会有问题的,菜单中“生成可执行文件”后生成的文件不是有效的EXE文件,上一版本我带壳爆了,有好多暗桩,这此想脱壳后试试,我用ImportREC2,一个有效的函数都找不到,所以想用你的软件试试,但没有成功,你的软件很好用,
2008-3-26 20:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
收藏先,学习了,谢谢!!
2008-3-27 15:08
0
雪    币: 13
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
iat recovery is critical..
2008-3-28 01:21
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
19
V1.02 版新增了一些实用功能:

1. 增加 API 数据解读功能(可以从OllyDbg中复制过来,直接解读出API函数名称).

2. 改变了数据处理方式,极大提高了导入和导出IAT表的速度.

3. 修正导出的IAT文件地址数据格式,使之与导入的IAT文件格式一致.

4. 增加了PE头部数据按字段查询功能.

欢迎继续使用!
2008-3-28 20:03
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
期待继续升级,睡不着帮你顶上去
2008-3-29 02:20
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
21
谢谢,看了你的头像,让我想入非非哦!
2008-3-29 11:22
0
雪    币: 261
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
22
感觉lz很强大啊~~集多个工具的常用功能于一身确实很好用
期待继续升级~~~~~
2008-3-30 13:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好工具, 对初学者来说, 通过手动, 更好的学习PE文件结构,期待楼主的更新~~~
2008-4-15 15:11
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
谢谢,也不记得下过没有,再下一个试试
2008-5-7 14:26
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
o(∩_∩)o...   估计以后会有用的  收藏下啊 ~~
2008-5-23 20:15
0
游客
登录 | 注册 方可回帖
返回
//