#
include
<stdio.h>
void
UnInjectDLL
(
int
PID
)
{
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
PID
)
;
LPVOID pRetAddress
=
(
LPVOID
)
0x544B0000
;
HANDLE hThread
=
CreateRemoteThread
(
hProcess
,
NULL
,
0
,
(
LPTHREAD_START_ROUTINE
)
0x76869040
,
pRetAddress
,
0
,
NULL
)
;
WaitForSingleObject
(
hThread
,
2000
)
;
CloseHandle
(
hThread
)
;
CloseHandle
(
hProcess
)
;
void
inject1
(
int
PID
,
const
char
*
Path
)
{
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
PID
)
;
LPVOID pRetAddress
=
VirtualAllocEx
(
hProcess
,
NULL
,
strlen
(
Path
)
+
1
,
MEM_COMMIT
,
PAGE_READWRITE
)
;
WriteProcessMemory
(
hProcess
,
pRetAddress
,
Path
,
strlen
(
Path
)
+
1
,
NULL
)
;
HMODULE hModule
=
LoadLibrary
(
"KERNEL32.DLL"
)
;
LPTHREAD_START_ROUTINE lp_start_address
=
(
LPTHREAD_START_ROUTINE
)
GetProcAddress
(
hModule
,
"LoadLibraryA"
)
;
HANDLE hThread
=
CreateRemoteThread
(
hProcess
,
NULL
,
0
,
lp_start_address
,
pRetAddress
,
0
,
NULL
)
;
WaitForSingleObject
(
hThread
,
2000
)
;
CloseHandle
(
hThread
)
;
CloseHandle
(
hProcess
)
;
int
main
(
)
{
const
char
*
a
=
"G:\\C++ Study Project\\DllConnect\\Debug\\DLLStudy.dll"
;
inject
(
2052
,
a
)
;
return
0
;
#include<Windows.h>#include<stdio.h>void UnInjectDLL(int PID) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); //使用CE找到的想要卸载的DLL的地址 LPVOID pRetAddress = (LPVOID)0x544B0000; //HMODULE hModule = LoadLibrary("KERNEL32.DLL")
HANDLE hToken = NULL;
//打开当前进程的访问令牌
int hRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
if( hRet)
TOKEN_PRIVILEGES tp;
tp.Priv
这里的动态加载指的是:程序编译时不需要任何
dll
相应的lib进行链接,程序本身通过相关函数加载和
卸载
dll
,并使用其中的函数。
代码如下:
class PluginManager
public:
static bool loadPlugin(const QString& pluginPath, PluginInstanceInfo& pluginInfo);
static bool freePlugin(PluginInstanceInfo&
问题描述:C#调用
C++
的
dll
,传入一组数据,返回处理后的数据以及一些信息字段。但是,返回的内容是不定长的,也就是
dll
内部要进行动态内存申请。那么问题来了,C#怎么接收一个大小不确定的变量?使用完这些数据后,怎么在C#里面释放其内存?
前一个问题的危险是,该段内存的大小,调用方事先是未知的不能进行初始化,这可能会导致缓冲区溢出问题。目前的解决方法只能够是调用方预先分配一个足够大的内存
网上确实有关于
DLL
注入
的过程,但是很多写的都不全,或者内容有点老旧。
DLL
文件
注入
的原理是:接管被
注入
应用的控制权,并在应用程序运行的内存中开辟一条线程运行
DLL
文件中的入口函数的代码。
项目需求:向一个.txt文件
注入
dll
,然后会自动弹出一个窗口
工具:VS2019
2
DLL
动态链接库的编写
在VS2019中新建项目-选择【动态链接库(
DLL
)】
不要勾选:【将解决方案和项目放在同一目录中】
创建完项目后,会有四个文件
framework.h
pch. h
dll
main.