能力值:
( LV4,RANK:50 )
|
-
-
2 楼
翻贴出来的:分配空间-》写代码-》处理重定位-》结束
csdn有个类似的帖子:http://topic.csdn.net/t/20030413/14/1654624.html
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
谢谢楼上,那个帖子好象什么也没说,我怕动手写到最后却有什么遗漏,比如那些比较少见的节表属性的处理之类的。
|
能力值:
(RANK:330 )
|
-
-
4 楼
TLS1234
|
能力值:
(RANK:570 )
|
-
-
5 楼
作为镜像加载还不行的,缺少初始化一些东西。你把HMODULE传给GetProcAddress的时候会无法取得正确结果,除非你连GetProcAddress都重写了
|
能力值:
(RANK:330 )
|
-
-
6 楼
正解123456
|
能力值:
(RANK:1130 )
|
-
-
7 楼
他是为了隐藏,可以不考虑TLS,DLLMAIN之类的回调和GetProcAddress之类的无聊API
|
能力值:
( LV13,RANK:970 )
|
-
-
8 楼
入口处的代码还是要启动一下的,除非这个dll也专门针对这个Load进行了处理。
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
谢谢楼上几位
因为一些特殊的要求,所以要兼容大部分的系统DLL,本来用一种简单的方法已经实现的差不多,没想到在vista home basic居然出问题,vista ultimate却没问题。。。这年头操作系统真TM太多了。还在想其他办法,比如先用LoadLibraryEx 带 DONT_RESOLVE_DLL_REFERENCES实现,再自己进行初始化,如果再没办法只好自己实现LOADLIBRARY了,
TLS倒是要考虑进去的。还有加载完成后调用DLLMAIN。
TO:笨笨雄
还需要初始化啥东西?
****************************
我昨天在网上找了篇文章,说是把一个DLL模块进行隐藏的方法,先把内容复制到一块内存,再freelibrary掉,然后复制回来,这样就不会显示在模块列表中了,我的要求和这个也很类似,问题在于我的目标DLL模块是无法用freelibrary卸载的,即使用NtunmapviewofSection卸载掉,那内存也无法再使用。。。。估计在内核中有什么记号还在吧
|
能力值:
(RANK:570 )
|
-
-
10 楼
我就是不知道要初始化什么,也懒得看WRK,干脆自己实现了GetProcAddress了
单纯是DLL隐藏,把PEB里面的信息清除掉还不够么
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
呵呵,偶不是要隐藏DLL
|
能力值:
(RANK:330 )
|
-
-
12 楼
const char* DllName = "fuckme.dll";
void FuckMe()
{
void *PEB = NULL;
void *Ldr = NULL;
_LIST_ENTRY *Flink = NULL;
_LIST_ENTRY *p = NULL;
BYTE *BaseAddress = NULL;
BYTE *FullDllName = NULL;
__asm
{
mov eax,fs:[0x30]
mov PEB,eax
}
Ldr = *( ( void ** )( ( unsigned char * )PEB+0x0c ) );
Flink = (_LIST_ENTRY*)*( ( void ** )( ( unsigned char * )Ldr+ 0x0c ) );
p = Flink;
do
{
BaseAddress = *( ( BYTE ** )( ( unsigned char * )p+ 0x18 ) );
FullDllName = *( ( BYTE ** )( ( unsigned char * )p+ 0x28 ) );
LPSTR strFullDllName;
UnicodeToAnsi((LPCOLESTR)FullDllName,&strFullDllName);
if( strFullDllName )
{
if( strstr(strFullDllName,DllName) )
{
*(LPDWORD)((LPBYTE)p + 0x38) = 1;
}
}
CO_SAFE_DELETE(strFullDllName);
p = p->Flink;
}
while ( Flink != p );
}
FuckMe();
FreeLibrary(DllName);
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
你自己跟跟Loadlibrary就知道重写的难度了,如果单纯的想要从内存加载,PsSetLoadImageNotifyRoutine和MapViewOfSection都可以
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
KERNEL32!LoadLibrary
KERNEL32!LoadLibraryEx
KERNEL32!LdrLoadDll
NTDLL!LdrLoadDll
NTDLL!LdrpLoadDll
NTDLL!LdrpMapDll
NTDLL!NtMapViewOfSection
NTDLL!LdrpCreateDllSection
NTDLL!LdrpSetProtection
NTDLL!NtCreateSection
NTDLL!ZwQuerySection
NTDLL!ZwProtectVirtualMemory
RING0的还没有算...
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
VC基地里有自己加载DLL的代码去剽窃一下也是可以的嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
没多大用的,隐藏不了多少,你一样要调用createFile把文件打开,别人只要跟踪这个函数就能找到你要干什么
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
链接?哪有啊,我没找到
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
[QUOTE=;]...[/QUOTE]
没见有完美的peloader
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
我改过一个,其实不复杂,请参考darawk_code的代码
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
[QUOTE=;]...[/QUOTE]
泄露的win2ksrc里面不是有整个ntdll的源代码么,我rip了一个loader大概4k左右代码。。。
还有,上面说的TLS不用考虑,因为动态加载库的静态tls不会初始化,你用loadlinrary本身也是这么处理的,所以dll很少有使用静态tls。还有GetProcAddress可以运行的,只要你给他的HMODULE是加载dll的基址。要隐藏的话,抹掉peb的相关项,还要加载的时候自己分配内存,不要直接ZwCreateFile, ZwCreateSection, ZwMapViewOfSection。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
bo2k的代码里面好像也有一个,我上面说的darawk_code的代码也可能来源于它。
楼上所提到的问题也都可解决
|
|
|