首页
社区
课程
招聘
[求助]想自己实现一个Loadlibrary,请教
发表于: 2008-10-25 23:09 20334

[求助]想自己实现一个Loadlibrary,请教

2008-10-25 23:09
20334

【求助】想自己实现一个Loadlibrary,请教

流程如下:

先把文件按节表映射入内存,处理重定位,Loadlibrary导入表中的DLL并完成IAT。

是不是这样就可以了??


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

收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
翻贴出来的:分配空间-》写代码-》处理重定位-》结束
csdn有个类似的帖子:http://topic.csdn.net/t/20030413/14/1654624.html
2008-10-25 23:46
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上,那个帖子好象什么也没说,我怕动手写到最后却有什么遗漏,比如那些比较少见的节表属性的处理之类的。
2008-10-25 23:59
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
TLS1234
2008-10-26 03:24
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
5
作为镜像加载还不行的,缺少初始化一些东西。你把HMODULE传给GetProcAddress的时候会无法取得正确结果,除非你连GetProcAddress都重写了
2008-10-26 03:33
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
6
正解123456
2008-10-26 03:35
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
7
他是为了隐藏,可以不考虑TLS,DLLMAIN之类的回调和GetProcAddress之类的无聊API
2008-10-26 10:18
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
8
入口处的代码还是要启动一下的,除非这个dll也专门针对这个Load进行了处理。
2008-10-26 11:26
0
雪    币: 189
活跃值: (56)
能力值: ( 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卸载掉,那内存也无法再使用。。。。估计在内核中有什么记号还在吧
2008-10-26 12:10
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
10
我就是不知道要初始化什么,也懒得看WRK,干脆自己实现了GetProcAddress了
单纯是DLL隐藏,把PEB里面的信息清除掉还不够么
2008-10-26 17:24
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
呵呵,偶不是要隐藏DLL
2008-10-26 21:01
0
雪    币: 1946
活跃值: (248)
能力值: (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);
2008-10-26 21:14
0
雪    币: 340
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你自己跟跟Loadlibrary就知道重写的难度了,如果单纯的想要从内存加载,PsSetLoadImageNotifyRoutine和MapViewOfSection都可以
2008-10-26 23:14
0
雪    币: 44
活跃值: (15)
能力值: ( 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的还没有算...
2008-10-27 02:45
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
VC基地里有自己加载DLL的代码去剽窃一下也是可以的嘛
2008-10-27 12:14
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
没多大用的,隐藏不了多少,你一样要调用createFile把文件打开,别人只要跟踪这个函数就能找到你要干什么
2008-10-27 19:13
0
雪    币: 3
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
链接?哪有啊,我没找到
2008-10-27 19:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
[QUOTE=;]...[/QUOTE]
没见有完美的peloader
2008-10-27 21:45
0
雪    币: 202
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我改过一个,其实不复杂,请参考darawk_code的代码
2008-10-28 00:43
0
雪    币: 217
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
[QUOTE=;]...[/QUOTE]
泄露的win2ksrc里面不是有整个ntdll的源代码么,我rip了一个loader大概4k左右代码。。。

还有,上面说的TLS不用考虑,因为动态加载库的静态tls不会初始化,你用loadlinrary本身也是这么处理的,所以dll很少有使用静态tls。还有GetProcAddress可以运行的,只要你给他的HMODULE是加载dll的基址。要隐藏的话,抹掉peb的相关项,还要加载的时候自己分配内存,不要直接ZwCreateFile, ZwCreateSection, ZwMapViewOfSection。。。
2008-10-29 14:27
0
雪    币: 202
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
bo2k的代码里面好像也有一个,我上面说的darawk_code的代码也可能来源于它。
楼上所提到的问题也都可解决
2008-10-29 21:17
0
游客
登录 | 注册 方可回帖
返回
//