dll侧加载_绕过LoadLibrary 加载DLL

#include

typedef struct _UNICODE_STRING { // UNICODE_STRING structure

USHORT Length;

USHORT MaximumLength;

PWSTR Buffer;

} UNICODE_STRING;

typedef UNICODE_STRING *PUNICODE_STRING;

typedef NTSTATUS (WINAPI *fLdrLoadDll) //LdrLoadDll function prototype

(

IN PWCHAR PathToFile OPTIONAL,

IN ULONG Flags OPTIONAL,

IN PUNICODE_STRING ModuleFileName,

OUT PHANDLE ModuleHandle

);

typedef VOID (WINAPI *fRtlInitUnicodeString) //RtlInitUnicodeString function prototype

(

PUNICODE_STRING DestinationString,

PCWSTR SourceString

);

HMODULE hntdll;

fLdrLoadDll _LdrLoadDll;

fRtlInitUnicodeString _RtlInitUnicodeString;

HMODULE LoadDll( LPCSTR lpFileName) -

{

if (hntdll == NULL) { hntdll = GetModuleHandleA("ntdll.dll"); }

if (_LdrLoadDll == NULL) { _LdrLoadDll = (fLdrLoadDll) GetProcAddress ( hntdll, "LdrLoadDll"); }

if (_RtlInitUnicodeString == NULL)

{ _RtlInitUnicodeString = (fRtlInitUnicodeString) GetProcAddress ( hntdll, "RtlInitUnicodeString"); }

int StrLen = lstrlenA(lpFileName);

BSTR WideStr = SysAllocStringLen(NULL, StrLen);

MultiByteToWideChar(CP_ACP, 0, lpFileName, StrLen, WideStr, StrLen);

UNICODE_STRING usDllName;

_RtlInitUnicodeString(&usDllName, WideStr);

SysFreeString(WideStr);

HANDLE DllHandle;

_LdrLoadDll(0, 0, &usDllName, &DllHandle);

return (HMODULE)DllHandle;

}

typedef void (* _u)();

int main()

{

HMODULE hMydll = LoadDll("C:\\ww.dll");

_u ss = (_u)GetProcAddress(hMydll,"tt");

ss();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值