资源简介
采用内核驱动侏注入方式,在程序启动的时候注入DLL。具体实现采用SSDTHOOk
NtCreateProcess NtCreateThread等函数实现,待改进点:SSDT中未导出函数的地址获得方式(或索引获得方式)
代码片段和文件信息
#include “KeInject.h“
//全局变量
PDEVICE_EXTENSION gDevExt=NULL;
///此列表用于保存创建的进程句柄,在创建线程时会使用
KIRQL oldirql_g;
KSPIN_LOCK lock;
LIST_ENTRY list;
VOID InitList()
{
InitializeListHead(&list);
KeInitializeSpinLock(&lock);
}
int IsHandleExist(HANDLE hProcess)
{
int exist=0;
PHANDLENODE node;
HANDLE handle;
if(IsListEmpty(&list))
{
DbgPrint(“\n“);
return 0;
}
KeAcquireSpinLock(&lock&oldirql_g);
for( node=(PHANDLENODE)(list.Flink); node!=(PHANDLENODE)&list; node=(PHANDLENODE)(node->ListEntry.Flink) )
{
handle = node->handle;
if(hProcess==handle)
{
exist=1;
break;
}
}
KeReleaseSpinLock(&lockoldirql_g);
if(exist==1)
DbgPrint(“\n“hProcess);
else
DbgPrint(“\n“hProcess);
return exist;
}
void InsertHandle(HANDLE hProcess)
{
PHANDLENODE node;
node = (PHANDLENODE)ExAllocatePoolWithTag(NonPagedPoolsizeof(HANDLENODE) ‘HAND‘);
node->handle=hProcess;
KeAcquireSpinLock(&lock&oldirql_g);
InsertHeadList(&list&node->ListEntry);
KeReleaseSpinLock(&lockoldirql_g);
}
void RemoveHandle(HANDLE hProcess)
{
PHANDLENODE node;
HANDLE handle;
KeAcquireSpinLock(&lock&oldirql_g);
for( node=(PHANDLENODE)(list.Flink); node!=(PHANDLENODE)&list; node=(PHANDLENODE)(node->ListEntry.Flink) )
{
handle=node->handle;
if(hProcess==handle)
{
ExFreePool(
RemoveHeadList(node->ListEntry.blink)
);
break;
}
}
KeReleaseSpinLock(&lockoldirql_g);
}
void ClearHandle()
{
PHANDLENODE node;
KeAcquireSpinLock(&lock&oldirql_g);
while(!IsListEmpty(&list))
{
ExFreePool(
RemoveHeadList(&list)
);
}
KeReleaseSpinLock(&lockoldirql_g);
}
//获取操作系统版本
WIN_VER_DETAIL GetWindowsVersion()
{
UNICODE_STRING ustrFuncName = { 0 };
RTL_OSVERSIONINFOEXW osverinfo = { sizeof(osverinfo) };
PFN_RtlGetVersion pfnRtlGetVersion = NULL;
RtlInitUnicodeString(&ustrFuncName L“RtlGetVersion“);
pfnRtlGetVersion = (PFN_RtlGetVersion)MmGetSystemRoutineAddress(&ustrFuncName);
//判断XP前后版本,调用不同的函数获得版本号
if (pfnRtlGetVersion)
{
pfnRtlGetVersion((PRTL_OSVERSIONINFOW)&osverinfo);
}
else
{
PsGetVersion(&osverinfo.dwMajorVersion &osverinfo.dwMinorVersion &osverinfo.dwBuildNumber NULL);
}
//根据获得的版本号情况,返回结果
if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 0)
{
return WINDOWS_VERSION_2K;
}
else if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 1)
{
return WINDOWS_VERSION_XP;
}
else if (osverinfo.dwMajorVersion == 5 && osverinfo.dwMinorVersion == 2)
{
if (osverinfo.wServicePackMajor==0)
{
return WINDOWS_VERSION_2K3;
}
else
{
return WINDOWS_VERSION_2K3_SP1_SP2;
}
}
else if (osverinfo.dwMajorVersion == 6 && osverinfo.dwMinorVersion == 0)
{
return WINDOWS_VERSION_VISTA;
}
return WINDOWS_VERSION_NONE;
}
//得到DLL中的指定函数地址 相当于应用层的GetProcAddress函数
DWORD GetDllF
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1554 2014-08-19 14:25 KeinjectCtl\Debug\cl.command.1.tlog
文件 15216 2014-08-19 14:25 KeinjectCtl\Debug\CL.read.1.tlog
文件 1030 2014-08-19 14:25 KeinjectCtl\Debug\CL.write.1.tlog
文件 2505 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl.Build.CppClean.log
文件 406 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl.exe.em
文件 472 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl.exe.em
文件 381 2014-08-19 14:25 KeinjectCtl\Debug\KeinjectCtl.exe.intermediate.manifest
文件 76 2014-08-19 14:25 KeinjectCtl\Debug\KeinjectCtl.lastbuildstate
文件 2758 2014-08-19 14:25 KeinjectCtl\Debug\KeinjectCtl.log
文件 32768 2014-08-19 14:25 KeinjectCtl\Debug\KeinjectCtl.obj
文件 1245184 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl.pch
文件 0 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl.write.1.tlog
文件 212 2014-08-19 14:23 KeinjectCtl\Debug\KeinjectCtl_manifest.rc
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 2 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 1846 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 3490 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 1092 2014-08-19 14:25 KeinjectCtl\Debug\li
文件 436 2014-08-19 14:25 KeinjectCtl\Debug\mt.command.1.tlog
文件 390 2014-08-19 14:25 KeinjectCtl\Debug\mt.read.1.tlog
文件 390 2014-08-19 14:25 KeinjectCtl\Debug\mt.write.1.tlog
文件 624 2014-08-19 14:23 KeinjectCtl\Debug\rc.command.1.tlog
文件 362 2014-08-19 14:23 KeinjectCtl\Debug\rc.read.1.tlog
文件 370 2014-08-19 14:23 KeinjectCtl\Debug\rc.write.1.tlog
文件 11783 2014-08-19 14:23 KeinjectCtl\Debug\stdafx.obj
文件 379904 2014-08-19 14:25 KeinjectCtl\Debug\vc100.idb
............此处省略73个文件信息
- 上一篇:数字图像处理鲁棒水印
- 下一篇:stm32控制的PID温度控制系统介绍
相关资源
- asus b85plus e3 1231v3 rx470/570 clover config(
- 炜煌打印机USB驱动For Win7
- Arduino uno 控制42步进电机TB6560驱动模块
- USB线转RS232串口驱动
- 驱动用MiniFilter来隐藏指定类型的文件
- IMX385驱动
- 九阵官方加密狗驱动驱动后认狗
- TDI驱动源代码
- LA1016软件+驱动的使用说明.pdf
- 隐藏文件的驱动源码和控制台源码
- sht30驱动及PCB封装
- 科沃兹GPS驱动适用于VK162、VK172
- tiny6410 适用于win7 64bit的dnw 的USB驱动
- 9款触摸板驱动kext
- win8 USB Blaster 驱动 带数字签名 通杀
- 基于T6963C驱动的经典程序
- WinCE6.0华为3G模块MC509驱动拨号上网实
- 利用USB虚拟总线驱动模拟USB摄像头的
- M-150针打驱动程序
- 两相步进电机驱动程序及原理图
- Windows驱动签名工具 64Signer
- macos Sierra alc系列声卡驱动
- 51单片机的OV7670摄像头驱动程序
- VoodooPS2Controller黑苹果键盘鼠标触摸板
- 气压传感器BMP180驱动stm32f103
- iMX6 EIM总线驱动程序
- HX8369A驱动代码
- USB Blaster 64位驱动 不蓝屏
- uboot中usb驱动代码
- Win7进程注入绕UAC源码
评论
共有 条评论