首页
社区
课程
招聘
[原创]驱动感染技术扫盲(C描述)
发表于: 2007-12-5 19:46 79319

[原创]驱动感染技术扫盲(C描述)

2007-12-5 19:46
79319
收藏
免费 7
支持
分享
最新回复 (100)
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
刚好看到类似的驱动文件.受益了
2007-12-15 15:25
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
KPELIB  这个结构体怎么来的  请大侠指点一二,呵呵
2007-12-18 14:52
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
28
收藏~~
~~
2007-12-18 18:50
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
自己定义一个就好了,咔咔
另外代码还要加些东西才能正常运行
2007-12-18 21:33
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
学习慢慢看!
2007-12-19 00:36
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
给点提示嘛 既然是扫盲贴,怎么不说多点撒

2007-12-19 08:24
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
呵呵,偶不是楼主啊

给下我的定义:
typedef struct _PE {
        HANDLE hFile;
        HANDLE hSection;
        IMAGE_DOS_HEADER * pDosHdr;
        IMAGE_NT_HEADERS32 * pNtHdr;
        IMAGE_SECTION_HEADER * pSectHdr;
        IMAGE_EXPORT_DIRECTORY * pExportEntry;
       
        PUCHAR pImgBase;
        ULONG ImgSize;
} PE, *PPE;

其中hSection用来存储ZwCreateSection产生的句柄.

另外,其实系统已经提供了一个MiFindExportedRoutineByName 给我们,可以参考它的源码.
不过据说这个函数有bug,会蓝,XP SP3会修补,Vista没有问题
2007-12-19 08:41
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
33
哈哈。LS的给的这个和原代码不匹配。你误解人家的意思了。人家不是不知道PE结构(PE结构在SDK头文件里就有)而是说楼主的代码里自己定义的这个_KPELIB 结构没有帖出来。需要自己去完善。

偶来个完整的。而且编译通过。

typedef struct _KPELIB {
	PIMAGE_DOS_HEADER         pDosHdr;
	PIMAGE_NT_HEADERS32       pNtHdr;
	PIMAGE_SECTION_HEADER     pSecHdr;
	PIMAGE_EXPORT_DIRECTORY   pExportEntry;
	PIMAGE_IMPORT_DESCRIPTOR  pImportEntry;
	PIMAGE_BASE_RELOCATION    pBaseReloc;
	BOOLEAN                   IsInitSuccessed;
	PUCHAR                    pMap;
	ULONG                     uMapSize; 
	HANDLE                    hFile;
} KPELIB, *PKPELIB;


2007-12-19 09:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
非常谢谢楼上2位的回复,偶也刚定义好这个KPELIB结构 惭愧ing

现在编译通过了,正在解决后面的问题,这个扫盲贴不简单啦
2007-12-19 15:29
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
呵呵,我自行定义的,不是根据它这个源码,咔咔,调用nt的时候记得把previousmode搞掉
2007-12-19 16:16
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
36
lz很厉害啊~
没有时间仔细看细节~
用汇编写个驱动感染的loader就行了~
主体还是C写的爽~
2007-12-20 03:08
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
37
VOID KWcsUpper(WCHAR *Str, ULONG ulSize)
{
        if (ulSize)
        {
                ulSize = ulSize / sizeof(WCHAR);

                while (ulSize)
                {
                        if (*Str >= L'a' && *Str <= L'z')
                        {
                                *Str -= 0x20;
                        }
                        Str++;
                        ulSize --;

                }
                return ;
        }
        //else
        {
                while (*Str)
                {
                        if (*Str >= L'a' && *Str <= L'z')
                        {
                                *Str -= 0x20;
                        }
                        Str++;
                }
                return ;
        }
}
2007-12-20 03:15
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
38
CHAR g_szFuncName[defApiNum][80] =
{
        "IoCreateFile",
        "ZwClose",
        "ExAllocatePoolWithTag",
        "ZwReadFile",
        "ZwWriteFile",
        "ZwSetInformationFile",
        "ZwQueryInformationFile",
        "ExFreePoolWithTag",
        "DbgPrint",
        "RtlInitUnicodeString",
        "PsCreateSystemThread",
        "KeDelayExecutionThread"
};
这样子比较好~~,不用xx掉premode
2007-12-20 03:18
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
39
WCHAR g_wszNtoskrnl[] = L"ntoskrnl.exe";这个太邪恶~,推荐方法就是直接搜索ntos比较好,一般在psploadedmodulelist的第一个就是ntosxxxx.exe的开始
2007-12-20 03:20
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
40
很容易搞好的说~~哈哈哈,如果用上我以前的一个东西就更稳定拉拉~

上传idb文件~
上传的附件:
2007-12-20 03:46
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
41
哇。感谢老V大牛的共享精神啊~~~
2007-12-20 07:36
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
[QUOTE=cvcvxk;393711]WCHAR g_wszNtoskrnl[] = L"ntoskrnl.exe";这个太邪恶~,推荐方法就是直接搜索ntos比较好,一般在psploadedmodulelist的第一个就是ntosxxxx.exe的开始[/QUOTE]

偶就是在DriverEntry里通过DriverObject直接获取,直接写文件名太明显了
2007-12-20 07:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
各位大大能不能再解释下啊,小菜偶还有不少不明白的地方:
1,g_pDriverObject 这个东东怎么没有初始化就拿来用阿PDRIVER_OBJECT DriverObject = KGetGlobalVarAddr(g_pDriverObject);
2,WCHAR g_wszNtoskrnl[] = L"ntoskrnl.exe";要是机器使用的内核不是这个呢?要不要作相应修改?
3,PROCESS_ERROR(pe->pExportEntry);这个是干什么的呢
4,最麻烦的ulBodySize = ulEndAddr - (ulDelta + (ULONG)g_wszNtoskrnl);结果怎么是个负值哦,0xffxxxxxx.其中ulDelta打印出来发现是0...

请各位大大抽空指点下,谢谢啦,偶太菜
2007-12-20 11:25
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
44
PROCESS_ERROR 是原作者自己定义的函数.
ntoskrnl.exe基本不变. Vista的不晓得了.[偶没装VISTA]
g_pDriverObject 是全局变量.
最后个自己慢慢调试,慢慢蓝
2007-12-20 13:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
[QUOTE=sudami;393840]PROCESS_ERROR 是原作者自己定义的函数.
ntoskrnl.exe基本不变. Vista的不晓得了.[偶没装VISTA]
g_pDriverObject 是全局变量.
最后个自己慢慢调试,慢慢蓝[/QUOTE]

感谢sudami大侠的回复
请教g_pDriverObject这个全局变量在哪里赋初值的呢?是DriverEntry的DriverObject吗?还是别的什么
2007-12-20 15:33
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
对滴
2007-12-20 17:19
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
47
搞好的可以用的C文件~~

ps:
编译忽略警报才可以,否则不会成功的说~
o(∩_∩)o...

只要再加上ScanFile就可以XX,YY了~

需要去掉WFP啊~~
上传的附件:
2007-12-20 19:08
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
48
vxk大叔里面的头文件都没给啊。

#include <zwfunc.h>

又一个自定义头,编译通不过。。。
2007-12-20 21:45
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
49
谁放一个编译好的bin 出来看看呢?
学习一下
2007-12-20 21:57
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
50
偶来个,不排除BSOD的可能性啊。
上传的附件:
2007-12-20 22:13
0
游客
登录 | 注册 方可回帖
返回
//