首页
社区
课程
招聘
求助,关于改造DLL的输入表
发表于: 2006-11-27 23:11 7695

求助,关于改造DLL的输入表

2006-11-27 23:11
7695
今天测试,做了个小实验
首先,从系统目录下,copy User32.dll , Kernel32.dll ,ntdll.dll 到程序目录里
并改名:
User32.dll 改为 myUser.dll
Kernel32.dll改为myKernel.dll
ntdll.dll 改为myNtdll.dll

然后改exe文件的输入表,在IAT中把User32.dll和Kernel32.dll 这两个dll名改为修改后的名称 myUser.dll myKernel.dll

到此之后,Exe运行通过

再继续
myUser.dll中的输入表 ntdll.dll 改为 myNtdll.dll
myKernel.dll 中的输入表 ntdll.dll 改为 myNtdll.dll

运行exe,正常,但用OD调试,发现,没有调用 myNtdll.dll 还是调用ntdll.dll这个涵数库...

请问,这种情况有办法解决吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (19)
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
准备 path dll? 期待下文
2006-11-27 23:17
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
这就不 明白了

难道DLL中调用其他DLL不需要通过输入表?

在OD的内存窗口没有看到MYNTDLL?
2006-11-27 23:21
0
雪    币: 575
活跃值: (1157)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
不懂了~~~期待牛人~~~
2006-11-27 23:24
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在OD中,没有看到myNtDll

当调用ntdll.dll中的涵数是显示是这样的

0028100F    77 6B           ja      short <&myn.RtlUnicodeStringToAn>
00281011    15 F577FB5D     adc     eax, 5DFB77F5
00281016    F777 08         div     dword ptr [edi+8]

<&myn.RtlUnicodeStringToAn>
这个涵数,实际上是转向ntdll.RtUnicodeStringToAn
2006-11-27 23:25
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
我W2K SP 4
用记事本改了之后直接出错运行不起来
不知道是不是我不会改了。。我把名字改成MYKER.DLL和MYNT.DLL
2006-11-27 23:47
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你改成MYKER.DLL和MYNT.DLL时
是不是忘了NULL结尾?
2006-11-27 23:49
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
关于改DLL的输入表,不知道有哪位牛人研究过,呵呵
2006-11-27 23:50
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
睡觉去了,明天继续 :)
2006-11-27 23:51
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
10
我用PE TOOLS改的,刚试过把KERNEL32。DLL换成31,,,还在注册表KNOWDLL那里添加了一个项,都没成功,没搞懂是为什么
2006-11-27 23:57
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我用的是OD改的...

只改了IAT中的 Dll名称
2006-11-28 08:46
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
12
晕哦,OD载入的时候,IAT已经填充完毕了。所以DLL名字变了,还是指向原来的地址
2006-11-28 12:54
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
嗯,你的情况和我一样...
2006-11-28 14:58
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
如果这样改DLL的IAT不行的话,看样子只能写个勾子程序,进行动态改了
2006-11-28 14:59
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
15
你误会我的意思了

系统加载PE文件的时候,会把输入表中的API NAME通过查找对应DLL的输出表换成API ADDRESS。

当TEB和PEB初始化完毕时,通过DBGBREAKPOINT这个NATIVE API把控制权给R3调试器(就是系统断点)。

所以如果你用R3调试器,能改IAT的时候,改DLL名字已经没有意义。程序是通过API ADDRESS直接访问链接库。

如果你希望进行API重定向,你应该做的是修改API ADDRESS。论坛翻译区有篇文章就是专门讨论API重定向技术的,建议你看一看,有详细的描述和实现代码
2006-11-28 16:48
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 笨笨雄 发布
你误会我的意思了

系统加载PE文件的时候,会把输入表中的API NAME通过查找对应DLL的输出表换成API ADDRESS。

当TEB和PEB初始化完毕时,通过DBGBREAKPOINT这个NATIVE API把控制权给R3调试器(就是系统断点)。
........


系统加载PE文件的时候,会把输入表中的API NAME通过查找对应DLL的输出表换成API ADDRESS。
-------这个对应的dll就是IAT中对应的dll名称

我现在所做的,就是把这个名字改为我自已copy的dll,从理论上说,后面的导入表中的涵数转换成地址,都是围绕着我copy的dll进行的,但系统所却还是围绕ntdll.dll进行,我想可能是在PE文件格式中,有某个关健字段,没有理解
2006-11-28 17:14
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
17
建议你用R0调试器看看,跟踪CREATEPROCESS函数的整个过程,然后就有答案了。
2006-11-28 17:27
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
已为是绑定输入出了问题,后把绑定输入的DLL名改为我所copy的dll,导制加载失败...后干脆把绑定输入去掉,结果还是加载失败,这东西,弄起来还真是麻烦
我看还是动态用勾子改,比较方便
2006-11-28 22:33
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
19
HOOK SSDT就方便了。。。转入R0玩吧。。
2006-11-28 23:27
0
雪    币: 575
活跃值: (1157)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
酷酷  你HOOK方式成功没?
2006-12-27 16:04
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册