首页
社区
课程
招聘
[原创]DLL劫持USER32
2009-1-14 19:27 26638

[原创]DLL劫持USER32

2009-1-14 19:27
26638
你首先要了解PE,看了神奇的马甲DLL后,发现XP下可以劫持USER32.dll,xx.exe.local(为0字节就行),xx.exe.mainfest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright ? 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity
        type="win32"
        name="DllHijackerTest"
        version="8.0.50608.0"
        processorArchitecture="amd64"
        publicKeyToken="1fc8b3b9a1e18e3b"
    />
    <file name="user32.dll"/>//关键一行
    <file name="msvcp80.dll"/>
    <file name="msvcm80.dll"/>
</assembly>
-------------------------------------------------------------------------------------------
hijackuser32 工程为导出所有user32。dll
流程:
1必须导出所有函数,因为realUser32。dll的importTable里的DLL又导入USER32.dll
的函数.
2,用CreateSection方法加载真实DLL.
3,在DLLMAIN里修复importTable,记录真实EXPORT函数地址.
4,调用realUser32(SECTION).DLLENTRYPOINT

效果:
在感染进程里LDR链表没这realUser32
WDBG
0:001> lm
start    end        module name
00400000 0042c000   DllHijackerTest   (deferred)            
00a10000 00a3a000   safemon    (deferred)            
10000000 1004e000   USER32     (deferred)  //VIRUS           
5d170000 5d20a000   comctl32_5d170000   (deferred)            
62c20000 62c29000   LPK        (deferred)            
73640000 7366e000   msctfime   (deferred)            
73fa0000 7400b000   USP10      (deferred)            
74680000 746cb000   MSCTF      (deferred)            
76300000 7631d000   IMM32      (deferred)            
76990000 76acd000   ole32      (deferred)            
76bc0000 76bcb000   PSAPI      (deferred)            
770f0000 7717b000   OLEAUT32   (deferred)            
77180000 77283000   COMCTL32   (deferred)            
77be0000 77c38000   msvcrt     (deferred)            
77d10000 77d9f000   USER32_77d10000   (deferred)   //           
77da0000 77e49000   ADVAPI32   (deferred)            
77e50000 77ee2000   RPCRT4     (deferred)            
77ef0000 77f38000   GDI32      (deferred)            
77f40000 77fb6000   SHLWAPI    (deferred)            
77fc0000 77fd1000   Secur32    (deferred)            
7c800000 7c91d000   kernel32   (deferred)            
7c920000 7c9b4000   ntdll      (pdb symbols)          f:\dbgsym\ntdll.pdb\36515FB5D04345E491F672FA2E2878C02\ntdll.pdb
7d590000 7dd83000   SHELL32    (deferred)        
     
PVOID MapDllImageBase( NT::UNICODE_STRING* fname )
{
        HANDLE hdll = NULL;
    HANDLE hSec = NULL;
    PVOID  dllbase = (PVOID)0;
       
        NT::OBJECT_ATTRIBUTES ob = {0};
        NT::LARGE_INTEGER off = {0};
        ULONG viewSize = 0;
        DWORD relen;
        ob.Attributes = OBJ_CASE_INSENSITIVE;
    ob.Length = sizeof(ob);
        ob.ObjectName = fname;
        NT::IO_STATUS_BLOCK iosb;
        //        NT::InitializeObjectAttributes( &ob, fname, OBJ_CASE_INSENSITIVE, 0, 0 );
        //        hdll = CreateFile( fname, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_SYNCHRONOUS_IO_NONALERT, NULL );
        NT::ZwOpenFile(&hdll,FILE_READ_DATA|FILE_EXECUTE|SYNCHRONIZE, &ob, &iosb,
                FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);
    ob.ObjectName = NULL;
        NT::ZwCreateSection( &hSec, SECTION_ALL_ACCESS, &ob, 0, PAGE_EXECUTE, SEC_IMAGE , hdll );
        NT::ZwQuerySection( hSec, NT::SectionBasicInformation, &SecBaseInfo, sizeof( SecBaseInfo ), &relen );
        NT::ZwQuerySection( hSec, NT::SectionImageInformation, &SecImageInfo, sizeof( SecImageInfo ), &relen );
    viewSize = SecBaseInfo.Size.QuadPart;
        NT::ZwMapViewOfSection( hSec, GetCurrentProcess(), &dllbase, 0, viewSize,  &off, &viewSize, NT::ViewShare, MEM_TOP_DOWN, PAGE_EXECUTE );
        //NT::ZwUnmapViewOfSection( GetCurrentProcess(), dllbase );
       
        //CloseHandle( hSec );
        CloseHandle( hdll );
        return dllbase;
       
};

dllmain()
{
               h =  CreateSection
               记录真实EXPORT的相应地址----------A
        FixImport( h );---------------------------B
                (A and B 不能倒位置,呵呵,自己调试就清楚了)
        __asm push 0
        __asm push 1
        __asm push h
        __asm mov eax,entry
        __asm call eax
};
我HOOK 并操作了 MESSAGEBOX,
附件:
DllHijackerTest
hijackuser32
ZyDllToC(自动生成部分代码)

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

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (24)
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
zhuwg 11 2009-1-14 21:04
2
0
帮你消灭0回复

        WCHAR image[256]= L"\\DosDevices\\c:\\windows\\system32\\user32.dll";
尽量别这样写 用\\SystemRoot\\比较好

偶发现您比较喜欢用undocumet nt里面的那种表示方式?
NT::ZwQuerySection

用CreateSection方法加载真实DLL
如果只加载一个dll,其实还可以更简单1点
自己分配一内存 展开dll的镜像
输入表 重定位处理完毕就好了。
可以参考偶那破文章。。

在r3下面做事情就不需要像r0那么费神了

manifest偶不熟悉。。。膜拜大牛
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2009-1-14 21:21
3
0
马甲DLL法其实还可以用manifest, config文件做,而且比local更难防御
雪    币: 224
活跃值: (15)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
SafeNdis 3 2009-1-14 21:24
4
0
提议的很好,呵呵,谢谢,我还有一驱动心贴,望指教.
雪    币: 709
活跃值: (2220)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 25 2009-1-14 21:34
5
0
不错,谢谢分享~~
雪    币: 308
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
痞子辉 1 2009-1-15 00:33
6
0
支持下楼主!!!!!!
雪    币: 204
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
edongxu 2009-1-15 23:52
7
0
膜拜,好东西,谢谢分享,研究一下。
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PEBOSS 2009-1-16 12:10
8
0
为什么 hijackuser32 在 VC++ 6.0 下面不能编译?

这个工程是修改一个程序的输入表吗?
雪    币: 224
活跃值: (15)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
SafeNdis 3 2009-1-16 15:17
9
0
VC INCLUDE 环境 要包括 DDK,
最好用2000的NTDDK.H
XP的有未定义的头文件错误.

或者你干脆把有用的ZW和结构留下,别的都不要了,就不用DDK了.
雪    币: 156
活跃值: (97)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
oopww 2009-4-7 18:01
10
0
delphi的就好了!
呵呵····
雪    币: 7
活跃值: (939)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2009-4-15 14:35
11
0
又是改输入表跳转。。
雪    币: 7115
活跃值: (644)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
玩命 31 2009-4-15 16:12
12
0
安逸的法子。。。
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljlLionel 2009-4-15 17:22
13
0
支持樓主,等待新帖
雪    币: 989
活跃值: (713)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
komawangs 2009-4-16 14:03
14
0
很好很强大!
雪    币: 131
活跃值: (181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wztuxw 2009-4-22 22:55
15
0
这个怎么做?指点一下?
雪    币: 7
活跃值: (939)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2009-4-23 10:00
16
0
移形换位。。。 比如你想调用user32.dll 那么你劫持user32.dll的输入表,然后jmp xxx 过去就可以了,就是带着面具强奸的意思!
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gustao 2009-5-12 14:45
17
0
这个不错,我已经用这个破了一个Asprotect的壳

希望有大侠深入研究之
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dotNetSafe 2009-7-13 17:29
18
0
ZY大牛的东东,当然要顶了!!!
雪    币: 709
活跃值: (2220)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 25 2009-7-13 18:45
19
0
ZY
ZY
哈哈
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kkblue 2009-7-13 19:53
20
0
真强大.膜拜下
雪    币: 672
活跃值: (3955)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kagayaki 2009-7-14 03:08
21
0
收藏!!!!
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuix 2009-11-28 01:59
22
0
谢谢大牛分享。最近正在研究这个
雪    币: 216
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
卧龙 2010-1-5 10:16
23
0
很不错的内容啊。哈哈。。学习学习。
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 2010-3-9 16:19
24
0
强大 学习下
雪    币: 543
活跃值: (161)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
lcz 2 2010-11-12 11:10
25
0
楼主你是我的优乐美
游客
登录 | 注册 方可回帖
返回