首页
社区
课程
招聘
向DLL注入一个DLL
发表于: 2012-8-16 12:33 10924

向DLL注入一个DLL

2012-8-16 12:33
10924
向DLL注入一个DLL时,需要用到 LoadLibrary,
如果DLL的IAT内没有这个函数,如何获取呢

如果是EXE可以通过 扫描 [esp],搜索kernel32.dll
但是DLL怎么办呢,谢谢赐教,3Q

另外想问一下,一个EXE内的TLS函数和DLLMAIN,哪个更先执行

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

收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我已经知道了DLLMAIN会比TLS函数先执行。

现在的主要问题是,DLL里面注入DLL,如何获取LoadLibrary
希望兄弟们指点一下,3Q
2012-8-18 23:35
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
DLL都是运行在exe的空间里的,向dll注入不就是向exe注入吗
2012-8-19 00:16
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呃,我的需求是:
把我自己的一个my.dll注入到 目标dest.dll 里面,
需要 LoadLibrary,怎么实现
2012-8-19 00:31
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
5
把dll注入到dll里面?你理解错了吧,如果你的理解是对的,那么你的需求无法解决。
2012-8-19 00:39
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我就是想往dest.dll里面注入代码,
而我的代码在my.dll里面,
所以我需要 LoadLibrary。。。
这个需求有问题吗

就算不用my.dll,
我注入到 dest.dll里面的代码,
也会存在API调用的问题,
我怎么获取API的地址
2012-8-19 01:09
0
雪    币: 188
活跃值: (351)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
动态调用,再说了,这个函数在kernel32里边,那可能没有?
2012-8-19 01:20
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
代码注入到DLL后,如何在运行时,
动态获得kernel32.dll内的LoadLibrary函数地址

我加载EXE的话,操作系统使用的是 CreateProcess
可以通过压入的返回地址[esp]跳入 kernel32.dll

但PE加载DLL的时候堆栈上方是 ntdll.dll,不是 kernel32.dll

总之就是我怎么在DLL代码里面 注入动态获取API地址
非常感谢。。。
2012-8-19 01:32
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
http://bbs.pediy.com/showthread.php?t=149326
直接用这个加载DLL。
2012-8-19 06:56
0
雪    币: 1372
活跃值: (5353)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
10
地址是不会变的。直接在自己的注入程序里面获取啊。
2012-8-19 09:30
0
雪    币: 1372
活跃值: (5353)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
11
上面的意思就是你在你的注入程序里面获取这个地址,这个地址可以用于被注入的进程,因为这个地址是一样的,不变的。
2012-8-19 09:41
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不太明白。
你的意思是 LoadLibrary 的地址是永远固定的?
不论win2000  winXP  win7 还是其它win系统,
每次启动后,它的地址都是一样的?
2012-8-19 11:34
0
雪    币: 185
活跃值: (70)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
windows系统为每个进程默认加载了user32.dll和kernel32.dll。如果是用DLL形式加载某DLL,可以在DllMain里加载,也可以建一个导出函数加载,比如:
DllMain方法:

HMODULE hMyDll;
BOOL APIENTRY DllMain(HANDLEhModule, DWORD dwReason, LPVOIDlpReserved)
{
    if(DLL_THREAD_ATTACH == dwReason)//DLL刚刚被映射到进程空间时
        return (hMyDll = LoadLibrary("mydll.dll"));//加载成功反回TRUE,或者返回FALSE
    return TRUE;//其他情况反回TRUE
}
但是这个方法有个缺点,就是程序中不能直接使用HMODULE句柄,如果要查找函数还得导出API才行。

函数方法:

HMODULE WINAPI LoadMyDll(LPCSTR lpModuleName)
{
    return LoadLibrary(lpModuleName);
}
这个方法比较简明,推荐使用,函数直接返回加载的句柄
2012-8-19 12:07
0
雪    币: 185
活跃值: (70)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
关于查找函数地址,一般在C++中GetProcAddress(hModule, "MyFunction");后就直接可以调用MyFunction函数。在C语言中必须自定义一个变量用于保存函数地址:
DWORD (*fp)(DWORD,DWORD);
*fp=GetProcAddress(hModule, "MyFunction");
然后调用MyFunction函数时直接通过(*fp)(DWORD,DWORD)调用就行了
2012-8-19 12:12
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
可能我表达得有点不清楚。。。
我的需求是,采用PE静态文件注入的方式,往dest.dll里面 ,写入 MyCode
然后我如何在 MyCode里面得到 LoadLibrary 函数的地址
2012-8-19 15:25
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
16
说白了就是想感染dest.dll吧,然后再MyCode里面动态获取LoadLibrary + GetProcAddress组合来获取更多的函数地址吧。。

你语文老师真是失败~
2012-8-19 15:43
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
是这个意思。。。
怎么实现,请赐教,非常感谢。。。
2012-8-19 18:27
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感染dest.dll吧,然后再MyCode里面动态获取LoadLibrary + GetProcAddress组合来获取更多的函数地址。。。
我怎么获取LoadLibrary + GetProcAddress,望赐教。。。
2012-8-19 19:45
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
你在被注入的DLL的导入表里面添加上loadlibrary 和 getprocaddress,你的代码不就可以使用了吗
2012-8-31 12:33
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这个小菜我也说两句凑凑人气,虽然我不懂啥是PE静态注入,不过user32.dll和kernel32.dll这两个函数WIN2000,XP,WIN7这几个系统启动后应该都会加载,(我不知道LoadLibrary 是在哪个dll里。。。),而且加载的位置对正在运行的所有程序来讲地址都是相同的,所以不用管他每次启动后地址是不是一样,你只要在自己要进行注入操作的进程里找到这LoadLibrary 的地址,那么他的地址就等价于于每次启动都是固定的了
2012-8-31 22:47
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
你感染pe文件,向pe文件里写个loadlibrary加载你的dll,在你的dllmain里面实现功能不好吗
2012-8-31 23:11
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
想找到kernel的基地址,你试试看在你的my.dll功能代码之前,加上如下的代码行不:
push esi
xor eax,eax
mov eax,fs:[eax+30h]    ;指向PEB的指针   
mov eax,[eax+0ch]    ;指向PEB_LDR_DATA的指针   
mov esi,[eax+0ch]    ;根据PEB_LDR_DATA得出InLoadOrderModuleList的Flink字段   
lodsd
mov eax, [eax]     ;指向下一个节点
mov eax,[eax+18h]    ;Kernel.dll的基地址   
pop esi
ret
不过我目前有点想不通,找到kernel的基地址后,要怎么调用他的api.....求解
2012-9-4 10:10
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
这个我觉得有可行性耶,楼主试试
2012-9-4 10:16
0
雪    币: 138
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
dll本身就是attch到exe地址空间运行的,所以没有所谓的dll注入到dll
2012-9-4 12:43
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
修改目标DLL的入口,完后用shellcode的思想得到kernel32基质,继续通过hash值找到函数,把自己的dll加载起来,干活,最后把入口给真正的入口就可以了,PE注入的功能代码论坛里很早就有了
2012-9-6 17:06
0
游客
登录 | 注册 方可回帖
返回
//