首页
社区
课程
招聘
[原创]某公司DLP产品通过驱动注入DLL分析
发表于: 2016-2-27 17:22 22563

[原创]某公司DLP产品通过驱动注入DLL分析

2016-2-27 17:22
22563
收藏
免费 6
支持
分享
最新回复 (61)
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
BOOLEAN InjectDll(HANDLE ProcessHandle, WCHAR *DllPath)
{
        BOOLEAN IsSuccess;
    DbgPrint("InjectDll\n");
        if (IsNotWow64Process(ProcessHandle))
        {
                IsSuccess = InjectProcess(ProcessHandle, DllPath);
              DbgPrint("InjectDll001\n");
     }
        else
        {
                IsSuccess = InjectWow64Process(ProcessHandle, DllPath);
                DbgPrint("InjectDll002\n");
     }
        return IsSuccess;

}

兄弟逻辑是不是反了

x64 系统 注入到 x86 进程 落在   DbgPrint("InjectDll002\n");

这里
2016-3-7 12:41
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
                ShellCode[0] = 0xB8; // MOV EAX, XXXXXXXX
                *(ULONG*)&ShellCode[1] = (ULONG)Buffer;
                ShellCode[5] = 0xB9; // MOV ECX, XXXXXXXX
                *(ULONG*)&ShellCode[6] = (ULONG)(Buffer + 565);
                *(USHORT*)&ShellCode[10] = 0xD1FF; // CALL ECX
                *(ULONG*)&ShellCode[12] = 0x4C69636D; // 特征码
                *(ULONG*)&ShellCode[16] = 0; // 上一处ShellCode位置
                *(ULONG*)&ShellCode[20] = (ULONG)g_pfnNtTestAlert32;
                *(USHORT*)&ShellCode[29] = 2 * wcslen(DllPath);                        // UNICODE_STRING ++0 Length
                *(USHORT*)&ShellCode[31] = *(USHORT*)&ShellCode[29] + 2;// UNICODE_STRING ++2 MaximumLength
                *(ULONG*)&ShellCode[33] = (ULONG)(Buffer + 37);
                wcscpy((WCHAR*)&ShellCode[37], DllPath);
                *(ULONG*)&ShellCode[557] = (ULONG)g_pfnNtProtectVirtualMemory32;
                *(ULONG*)&ShellCode[561] = (ULONG)g_pfnLdrLoadDll32;
                if (*(ULONG*)&ShellCode[20])
                {
                        DbgPrint("InjectDll0011\n");

无法到达 11 这里
2016-3-7 14:06
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
再次定位到  pfnNtTestAlert32 00000000  获取为0
2016-3-7 14:21
0
雪    币: 14
活跃值: (305)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
该驱动代码在Win7 x64环境分别启动32位记事本和64位记事本,功能测试通过的~
2016-3-7 15:26
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
DLL 路径长度有要求不

可以修改不
2016-3-7 15:35
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
win7 64 家庭版,再次含泪测试,那个API就是为0

兄弟发个编译好的,在那函数记得打印地址,看看我这行不行
2016-3-7 15:45
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
知道为什么了,我系统只有 zwtest 那函数

不存在 nt开头的,开了OD看了下,非常神奇

用 CFF 看又有

神奇
2016-3-7 15:49
0
雪    币: 14
活跃值: (305)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
NtTestAlert和ZwTestAlert就是一个函数,两个名字而已!
2016-3-7 17:23
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
上BIN和DLL,把路径告诉我,我迫不及待要测试了

还是0......
2016-3-7 17:33
0
雪    币: 14
活跃值: (305)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
将里边的dll放到C:\根目录,打开记事本程序看看dll加载了没有。
上传的附件:
2016-3-7 22:23
0
雪    币: 221
活跃值: (2306)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
36
win7 64位,加载没反应。。
2016-3-7 22:47
0
雪    币: 14
活跃值: (305)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
上传出错,请重新下载
2016-3-7 23:06
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
我下载的,是修正过没,一点反应也没

稳定性极好

因为没注入
2016-3-7 23:16
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
测试2次了,真没反应啊

notepad.exe

我特意修改了一个程序为这个,也是静悄悄,好像,莫斯科郊外的晚上
2016-3-7 23:24
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
OD看,确实注入了,我立马编译那代码替换看看
2016-3-7 23:28
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
确实注入了
2016-3-7 23:30
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
但是我编译的,就不行,怪事
2016-3-7 23:42
0
雪    币: 221
活跃值: (2306)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
43
用修正后的。已经加载了DLL

[hdlphook] DriverEntry!
[hdlphook] ntdll.dll ImageBase is 0x77B80000
[hdlphook] ZwReadVirtualMemory = 0xFFFFF80003EC1900
[hdlphook] ZwWriteVirtualMemory = 0xFFFFF80003EC1860
[hdlphook] ZwQueryVirtualMemory = 0xFFFFF80003EC1580
[hdlphook] ZwProtectVirtualMemory = 0xFFFFF80003EC1B20
2016-3-8 00:20
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
恩 加载了,兄弟发那份源码出来不,修正过的
2016-3-8 00:24
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
兄弟呢 求源码学习
2016-3-8 12:02
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
好像不能注入到服务进程比如svhost之类的
2016-3-9 09:57
0
雪    币: 2
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
Win7 X64下能正常注入. 但是在Win10 X64失败了.  原因未明. 我是新手.
2016-3-9 16:03
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
48
1. ZwTestAlert、ZwContinue都可以。
2. Notify里面不能ZwProtectMemory,ZwWriteMemory是因为会发生死锁,需开线程或WorkItem或KernelAPC做事

这种方式一般都是X86/X64全平台通用的,好些公司的产品都用了好久了,好多年前玩过,确实挺稳定。
2016-3-15 13:26
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
大神说说帖主BIN可以,但是代码编译就不行,是什么原因

贴主不知道去哪里了
2016-3-15 13:39
0
雪    币: 5
活跃值: (526)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
50
你检查一下代码就知道了,是代码有BUG。
在InitializeR3FunctionAddress函数里只对g_pfnNtTestAlert赋了值,没有对g_pfnNtTestAlert32赋值,所以它是零,赋一下值就可以了。
2016-4-15 17:57
0
游客
登录 | 注册 方可回帖
返回
//