首页
社区
课程
招聘
[旧帖] [求助]DLL劫持内幕 0.00雪花
发表于: 2011-6-30 08:46 2181

[旧帖] [求助]DLL劫持内幕 0.00雪花

2011-6-30 08:46
2181
本人只知道当进程加载DLL后,会将DLL映射入进程空间,然后调用DLL中的函数;
我想问一下:DLL劫持,是将EXE运行时所必须加载的*.DLL替换了?(那么程序如果调用这个*.Dll岂不不能正常运行了?),还是在把这个*.Dll作了修改,让它调用*.dll里的函数后再指向恶意代码?(那么修改后的DLL意思只是在*.DLL的基础上做的修改?)

菜鸟求大侠解释:

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

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 413
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
帮你顶上,求真相~~~~~~~~~
2011-6-30 08:47
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
替换掉原DLL,把原DLL保存成未知DLL。除了自己需要实现的功能外把别的函数调用都转向未知DLL
2011-6-30 09:29
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
意思是把原DLL替换成恶意DLL,让进城先加载恶意DLL,然后再在恶意DLL里LoadLibrary原DLL?
2011-6-30 09:33
0
雪    币: 588
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
A.exe引用了B.dll,b.dll里面有函数才c(),d(),e(),f()....
现在有人想闹事,就把B.dll 改名成C.dll
然后自己写了个b.dll,里面也写了函数c(),d(),e(),f(),不过这个家伙很懒,他在自己的b.dll的函数才c()里面调用了c.dll里面的c()函数,...

然后...然后A.exe运行的时候,加载了以为是正确的b.dll,b.dll结果是个黑货,他加载了以前的b.dll(现在叫C.dll),A.exe也调用了b.dll_c(),。。。。。竟然没出错
2011-6-30 09:42
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
编写者怎么知道A.exe调用了B.dllz中的哪些函数呢?
2011-6-30 09:48
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
如果是直接引用的,用工具可以看的。如果是间接的通过LoadLibrary/GetProcAddress的,比较麻烦。
2011-6-30 09:51
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那就在 C.dll 中,实现所有 B.dll 应该有的导出函数。
2011-6-30 10:07
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
但是我很难知道那个原DLL中到底都有哪些导出函数啊?我也不知道EXE到底调用了哪些导出函数啊?
2011-6-30 11:10
0
雪    币: 588
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你需要学习PE文档结构,学习导入表,导出表,以及动态加载。
2011-7-5 09:03
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
你的DLL要满足下面2个条件中的1个。
1. 知道A.EXE使用了B.DLL的哪些函数,在你的C.DLL中只实现这些函数,这个工作量比较小,但是需要知道EXE使用了哪些函数,正如我上面说的,有可能很容易,也有可能比较麻烦。
2. 不管A.EXE的使用情况,把B.DLL导出的函数全部都实现一遍,这个工作量比较大。但有个好处就是不需要知道A.EXE的工作情况了。
2011-7-5 10:13
0
雪    币: 1895
活跃值: (1622)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
学习学习一下。。。
2011-7-5 11:03
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
aheadlib 貌似叫这个名字吧,自己搜搜
2011-7-5 11:08
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
所谓DLL劫持就是把真正的DLL文件改名或移动到别处.然后用冒名的DLL代替.具体实现方法就我知道的有两种.
1:利用系统加载DLL文件时寻找DLL文件的先后次序为:先程序目录,然后系统目录的特点,可以把一个跟系统DLL同名的DLL文件放在程序目录,这样系统在加载程序时,本来是要加载一个系统DLL的,却先在当前目录找到跟那个系统DLL同名的我们自己的DLL.从而达到劫持的目的.
2:将真正的DLL文件改名或移动到别处.然后把冒名的DLL复制过来.然后先卸载DLL,再加载DLL.
第一种方法简单,第二种方法稍微复杂一点,但使用起来比较灵活.冒名的DLL一般需要做到以下两点:
1:实现自己的添加功能.
2:导出原DLL的功能.
2011-7-5 11:22
0
雪    币: 81
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主看看windows核心编程里 DLL高级技术里的函数转发器·你就会明白的··
2011-7-5 14:41
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看懂了一点,继续学习.
2011-7-6 13:13
0
游客
登录 | 注册 方可回帖
返回
//