资源简介
采用内核驱动侏注入方式,在程序启动的时候注入DLL。具体实现采用SSDTHOOk
NtCreateProcess NtCreateThread等函数实现,待改进点:SSDT中未导出函数的地址获得方式(或索引获得方式)
![](http://www.nz998.com/pic/36652.jpg)
代码片段和文件信息
#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温度控制系统介绍
相关资源
- 直流无刷电机方波驱动 stm32 例程代码
- elantech触控板驱动程序 v13.6.11 官方最
- 联想y470无线网卡驱动 for 32位64位
- 松下plc FP-XH的驱动
- IMX385驱动代码.zip
- 组态王驱动开发包3.0.0.7(中文)
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- CASS9.1最新S4数据及驱动+ET199数据及驱
- 带有死区延时的H桥直流电机驱动电路
- USB转串口驱动,FT232R驱动程序,最新
- 德卡D3读卡器测试程序驱动文件
- WinCE下CP210x的驱动程序
- ubuntu9.10 可加载内核模块和字符设备驱
- MCGS触摸屏西门子s7_1200驱动
- FPGA在步进电机驱动上的应用实例及代
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- RA8806液晶驱动程序
- 内核驱动进程保护演示程序
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- 组态王中S7-300TCP驱动
- STC12C5A60S2 CH4521 驱动数码管 显示
- STM32F103 CC2500完整驱动(模拟SPI)
- 430系列单片机USBFET下载驱动
- dell阵列卡驱动s100 s300 2008 R2.rar
- keil vcom windows 7 64bit 驱动
- windows ce 系统的GPIO驱动程序
- 2440 cs8900a 网卡驱动程序
- 通用注入工具无驱版(HOOK注入、远程
- USB 驱动 让电脑与arm进行通信
评论
共有 条评论