能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我已经知道了DLLMAIN会比TLS函数先执行。
现在的主要问题是,DLL里面注入DLL,如何获取LoadLibrary
希望兄弟们指点一下,3Q
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
DLL都是运行在exe的空间里的,向dll注入不就是向exe注入吗
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
呃,我的需求是:
把我自己的一个my.dll注入到 目标dest.dll 里面,
需要 LoadLibrary,怎么实现
|
能力值:
( LV9,RANK:380 )
|
-
-
5 楼
把dll注入到dll里面?你理解错了吧,如果你的理解是对的,那么你的需求无法解决。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我就是想往dest.dll里面注入代码,
而我的代码在my.dll里面,
所以我需要 LoadLibrary。。。
这个需求有问题吗
就算不用my.dll,
我注入到 dest.dll里面的代码,
也会存在API调用的问题,
我怎么获取API的地址
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
动态调用,再说了,这个函数在kernel32里边,那可能没有?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
代码注入到DLL后,如何在运行时,
动态获得kernel32.dll内的LoadLibrary函数地址
我加载EXE的话,操作系统使用的是 CreateProcess
可以通过压入的返回地址[esp]跳入 kernel32.dll
但PE加载DLL的时候堆栈上方是 ntdll.dll,不是 kernel32.dll
总之就是我怎么在DLL代码里面 注入动态获取API地址
非常感谢。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
|
能力值:
( LV13,RANK:240 )
|
-
-
10 楼
地址是不会变的。直接在自己的注入程序里面获取啊。
|
能力值:
( LV13,RANK:240 )
|
-
-
11 楼
上面的意思就是你在你的注入程序里面获取这个地址,这个地址可以用于被注入的进程,因为这个地址是一样的,不变的。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
不太明白。
你的意思是 LoadLibrary 的地址是永远固定的?
不论win2000 winXP win7 还是其它win系统,
每次启动后,它的地址都是一样的?
|
能力值:
( 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);
}
这个方法比较简明,推荐使用,函数直接返回加载的句柄
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
关于查找函数地址,一般在C++中GetProcAddress(hModule, "MyFunction");后就直接可以调用MyFunction函数。在C语言中必须自定义一个变量用于保存函数地址:
DWORD (*fp)(DWORD,DWORD);
*fp=GetProcAddress(hModule, "MyFunction");
然后调用MyFunction函数时直接通过(*fp)(DWORD,DWORD)调用就行了
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
可能我表达得有点不清楚。。。
我的需求是,采用PE静态文件注入的方式,往dest.dll里面 ,写入 MyCode
然后我如何在 MyCode里面得到 LoadLibrary 函数的地址
|
能力值:
( LV9,RANK:380 )
|
-
-
16 楼
说白了就是想感染dest.dll吧,然后再MyCode里面动态获取LoadLibrary + GetProcAddress组合来获取更多的函数地址吧。。
你语文老师真是失败~
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
是这个意思。。。
怎么实现,请赐教,非常感谢。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
感染dest.dll吧,然后再MyCode里面动态获取LoadLibrary + GetProcAddress组合来获取更多的函数地址。。。
我怎么获取LoadLibrary + GetProcAddress,望赐教。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
你在被注入的DLL的导入表里面添加上loadlibrary 和 getprocaddress,你的代码不就可以使用了吗
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
这个小菜我也说两句凑凑人气,虽然我不懂啥是PE静态注入,不过user32.dll和kernel32.dll这两个函数WIN2000,XP,WIN7这几个系统启动后应该都会加载,(我不知道LoadLibrary 是在哪个dll里。。。 ),而且加载的位置对正在运行的所有程序来讲地址都是相同的,所以不用管他每次启动后地址是不是一样,你只要在自己要进行注入操作的进程里找到这LoadLibrary 的地址,那么他的地址就等价于于每次启动都是固定的了
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
你感染pe文件,向pe文件里写个loadlibrary加载你的dll,在你的dllmain里面实现功能不好吗
|
能力值:
( 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.....求解
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
这个我觉得有可行性耶,楼主试试
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
dll本身就是attch到exe地址空间运行的,所以没有所谓的dll注入到dll
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
修改目标DLL的入口,完后用shellcode的思想得到kernel32基质,继续通过hash值找到函数,把自己的dll加载起来,干活,最后把入口给真正的入口就可以了,PE注入的功能代码论坛里很早就有了
|
|
|