R0에서 DLL을 R3 프로세스로 연결
#include <ntddk.h>
PVOID pfn_BaseDispatchApc = NULL;
PVOID pfn_LoadLibraryA = NULL;
PVOID pszText_Kernel32 = NULL;
NTSTATUS (NTAPI* pfn_NtQueueApcThread)(
__in HANDLE ThreadHandle,
__in PVOID ApcRoutine,
__in_opt PVOID ApcArgument1,
__in_opt PVOID ApcArgument2,
__in_opt PVOID ApcArgument3
);
VOID LoadImageNotifyRoutine (
IN PUNICODE_STRING FullImageName,
IN HANDLE ProcessId, // where image is mapped
IN PIMAGE_INFO ImageInfo
)
{
PWSTR ptr = FullImageName->Buffer + FullImageName->Length/sizeof(WCHAR)-4;
if( ptr > FullImageName->Buffer && _wcsicmp( ptr, L".exe" ) == 0 )
{
ptr -= 8;
if( ptr > FullImageName->Buffer && _wcsicmp( ptr, L"\
otepad.exe" ) == 0 );
{
pfn_NtQueueApcThread( ZwCurrentThread(),
pfn_BaseDispatchApc,
pfn_LoadLibraryA,
pszText_Kernel32,
NULL );
}
}
}
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
PsRemoveLoadImageNotifyRoutine( LoadImageNotifyRoutine );
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
//just for winxp
KdBreakPoint();
// kernel32!BaseDispatchApc//win7 ntdll!RtlDispatchAPC
(PVOID)pfn_BaseDispatchApc = (PVOID)0x7c82c0f6;
// kernel32!LoadLibraryA
(PVOID)pfn_LoadLibraryA = (PVOID)0x7c801d7b;
// Load DLL text.dll, system
// kernel32 text
(PVOID)pszText_Kernel32 = (PVOID)0x7c8001e9;
// nt!NtQueueApcThread
(PVOID)pfn_NtQueueApcThread = (PVOID)0x805d3756;
DriverObject->DriverUnload = DriverUnload;
return PsSetLoadImageNotifyRoutine( LoadImageNotifyRoutine );
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.