• 大小: 711KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: 驱动  内核,  注入  

资源简介

采用内核驱动侏注入方式,在程序启动的时候注入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.embed.manifest

     文件        472  2014-08-19 14:23  KeinjectCtl\Debug\KeinjectCtl.exe.embed.manifest.res

     文件        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\link-cvtres.read.1.tlog

     文件          2  2014-08-19 14:25  KeinjectCtl\Debug\link-cvtres.write.1.tlog

     文件          2  2014-08-19 14:25  KeinjectCtl\Debug\link.3948-cvtres.read.1.tlog

     文件          2  2014-08-19 14:25  KeinjectCtl\Debug\link.3948-cvtres.write.1.tlog

     文件          2  2014-08-19 14:25  KeinjectCtl\Debug\link.3948.read.1.tlog

     文件          2  2014-08-19 14:25  KeinjectCtl\Debug\link.3948.write.1.tlog

     文件       1846  2014-08-19 14:25  KeinjectCtl\Debug\link.command.1.tlog

     文件       3490  2014-08-19 14:25  KeinjectCtl\Debug\link.read.1.tlog

     文件       1092  2014-08-19 14:25  KeinjectCtl\Debug\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论