论坛中,远程线程注入的案例比较多,但是如何防止线程注入的帖子基本没有。想请问个大佬,如何才能防止线程注入。
从网上搜索后汇总的情况如下
思路一:当进程被远程线程注入时(或进程本身创建线程时),会发送DLL_THREAD_ATTACH消息到所有的关联DLL中。有个解决方案是,用一个dll专门判断线程创建源,如进程创建线程前,设置个变量A=1,当在创建线程时,dll的dllmain方法判断A==1判断为进程自己创建的线程。
代码案例如下:参考 https://blog.csdn.net/u011740322/article/details/10083563
[C++] 纯文本查看 复制代码 // 创建线程之前设置nFlag为1,表示需要创建一个合法的线程
// 只有合法线程才能正常创建
int nFlag = 0;
// 设置线程创建标识
VOID SetFlag ( int Flag )
{
nFlag = Flag;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
// 检测线程创建标识
if ( nFlag == 1)
{
// 如果线程创建标识为FALSE,就直接结束线程
TerminateThread (GetCurrentThread(),0 ) ;
}
else
{
// 每次创建合法线程后,将nFlag标识置为0
// 每次设置合法线程标识只能使用一次
SetFlag ( 0 ) ;
}
....
}
return TRUE;
}
有个问题我的wpf项目页面的隐形线程太多,如何才能在进程创建每个线程启动前都默认设置这个值呢
思路二:
追溯创建的线程是否来自于LoadLibraryA or LoadLibraryW
参考资料:https://www.52pojie.cn/forum.php ... F%B3%CC%D7%A2%C8%EB
主要问题,我的C#项目怎么才能让上述C++写的dll接收到 DLL_THREAD_ATTACH
|