91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 22KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-11
  • 語言: 其他
  • 標簽: 驅動,C++??

資源簡介

用了幾天時間開發的一個源代碼函數庫, 函數庫提供了一種在驅動里執行用戶層代碼的途徑, 具體實現了調用LoadLibrary來在某個現有的進程中加載一個DLL,調用WinExec來啟動一個進程。 測試能在winXP 32, WIN7 32位 和WIN7 64位等系統中運行。 在DriverEntry中調用 cbk_init初始化。 在卸載函數中調用 cbk_deinit清除。 在某個進程上下文執行環境調用cbk_execute。 如果要在某個現有進程中加載DLL,調用 cbkInsertLoadLibraryA/W 如果要在某個現有進程調用WinExec來啟動另外一個進程,調用 cbkInsertWinExec 函數庫有為木馬開發者提供一點點后門之嫌疑,慎用。 對應的博客文章 http://blog.csdn.net/fanxiushu/article/details/38141219

資源截圖

代碼片段和文件信息

///?By?Fanxiushu?2014-06-25
//http://thisissecurity.net/2014/04/08/how-to-run-userland-code-from-the-kernel-on-windows/
#include?“callback.h“


/////////////////////////////////////在用戶應用程序里執行
struct?SHELLCODE_PARAMS
{
PVOID?pfunc;
PVOID?param;
BOOLEAN?bWinExec;
};

static?ULONG?ShellCode_Start(PVOID?data?ULONG?data_len)
{
SHELLCODE_PARAMS*?params?=?(SHELLCODE_PARAMS*)data;

if?(params->bWinExec){?//?WinExec
///
((ULONG(_stdcall*)(PVOID?int))(params->pfunc))(params->param?1?);
}
else{
///
((ULONG(_stdcall*)(PVOID))(params->pfunc))(params->param);
}

////?這個返回值等于?KeUserModeCallback?返回值
return?STATUS_SUCCESS;
}
static?VOID?ShellCode_End(){}


//////////////////////////////////////////////////////////

//分配內存KeUserModeCallback?第一個參數是?ULONG,?所以?64位系統的分配策略從基址開始尋找?4G范圍內的空閑空間
static?NTSTATUS?getProcessMemory(HANDLE?proc_handlePVOID?baseAddr?PVOID*?ppMem?SIZE_T*?pSize)
{
NTSTATUS?status?=?STATUS_UNSUCCESSFUL;
#ifdef?_WIN64
const?ULONG?COUNT?=?1000;?const?ULONG?SepSize?=?1024?*?1024?*?3?/?2;?const?ULONG_PTR?base?=?1024?*?1024?*?50;
ULONG?i;
for?(i?=?0;?i? ULONG_PTR?pMem?=?(ULONG_PTR)baseAddr?+?base?+?i*SepSize;?
SIZE_T?size?=?*pSize;?
status?=?ZwAllocateVirtualMemory(proc_handle?(PVOID*)&pMem?0?&size?MEM_COMMIT?|?MEM_RESERVE??PAGE_EXECUTE_READWRITE);
if?(NT_SUCCESS(status)){
*pSize?=?size;
*ppMem?=?(PVOID)pMem;
break;?
}
}
#else
status?=?ZwAllocateVirtualMemory(proc_handle?ppMem?0?pSize?MEM_COMMIT?|?MEM_RESERVE?|?MEM_TOP_DOWN?PAGE_EXECUTE_READWRITE);
#endif
return?status;
}
////?KeUserModeCallback?一定要在當前進程的當前用戶線程環境下調用才成功
static?NTSTATUS?CallKeUserModeCallback(HANDLE?proc_handle?PVOID?KernelCallbackTable
PVOID?func_addr?PVOID?lpParam?ULONG?ParamSize?BOOLEAN?bWinExec?)
{
NTSTATUS?status?=?STATUS_SUCCESS;
//
PVOID?pMem?=?NULL;
SIZE_T?size?=?ParamSize;
size?=?(size?/?PAGE_SIZE?+?1)*PAGE_SIZE?+?PAGE_SIZE;?///計算占用進程的空間

status?=?getProcessMemory(proc_handle?KernelCallbackTable?&pMem?&size);
if?(!NT_SUCCESS(status)){
DPT(“ZwAllocateVirtualMemory?Err=0x%X\n“?status);
return?status;
}??????????????????????????????????

DPT(“pMem?Addr=%p;?KernelCallbackTable=%p\n“?pMem?KernelCallbackTable);

__try{
////
ULONG?TableIndex?=?(((ULONG_PTR)pMem?-?(ULONG_PTR)KernelCallbackTable)?/?sizeof(ULONG_PTR));??//獲取索引
PVOID?ShellCodeAddr?=?(PVOID)((ULONG_PTR)pMem?+?sizeof(ULONG_PTR));
ULONG?ShellCodeSize?=?(ULONG_PTR)ShellCode_End?-?(ULONG_PTR)ShellCode_Start;
PVOID?ParamAddr?=?(PVOID)((ULONG_PTR)ShellCodeAddr?+?ShellCodeSize);

*(ULONG_PTR*)pMem?=?(ULONG_PTR)ShellCodeAddr;??///?把開頭地址內容寫成下ShellCode執行的真正地址?KernelCallbackTable[TableIndex]?=?ShellCodeAddr;?
RtlCopyMemory(ShellCodeAddr?ShellCode_Start?ShellCodeSize);
RtlCopyMemory(ParamAddr?lpParam?ParamSize);

SHELLCODE_PARAMS?sp;?RtlZeroMemory(&sp?sizeof(SHELLCODE_PARAMS));
sp.pfunc?=?func_addr;
sp.param?=?ParamAddr;

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????530??2014-07-26?20:11??說明.txt

?????文件??????15883??2014-07-26?18:01??callback.cpp

?????文件???????3712??2014-07-01?11:11??callback.h

?????文件???????4232??2014-07-07?15:50??common.cpp

?????文件???????3053??2014-07-15?15:53??common.h

?????文件??????55858??2014-06-25?14:50??pedef.h

-----------?---------??----------?-----??----

????????????????83268????????????????????6


評論

共有 條評論