C# 如何防止远程线程注入
论坛中,远程线程注入的案例比较多,但是如何防止线程注入的帖子基本没有。想请问个大佬,如何才能防止线程注入。从网上搜索后汇总的情况如下
思路一:当进程被远程线程注入时(或进程本身创建线程时),会发送DLL_THREAD_ATTACH消息到所有的关联DLL中。有个解决方案是,用一个dll专门判断线程创建源,如进程创建线程前,设置个变量A=1,当在创建线程时,dll的dllmain方法判断A==1判断为进程自己创建的线程。
代码案例如下:参考 https://blog.csdn.net/u011740322/article/details/10083563
// 创建线程之前设置nFlag为1,表示需要创建一个合法的线程
// 只有合法线程才能正常创建
int nFlag = 0;
// 设置线程创建标识
VOIDSetFlag ( int Flag )
{
nFlag = Flag;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORDul_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项目页面的隐形线程太多,如何才能在进程创建每个线程启动前都默认设置这个值呢
思路二:
追溯创建的线程是否来自于LoadLibraryAor LoadLibraryW
参考资料:https://www.52pojie.cn/forum.php?mod=viewthread&tid=260361&highlight=%D4%B6%B3%CC%CF%DF%B3%CC%D7%A2%C8%EB
主要问题,我的C#项目怎么才能让上述C++写的dll接收到 DLL_THREAD_ATTACH
用了第二种方法,终止线程导致软件卡死了 怎么办
TerminateThread(OpenThread(THREAD_ALL_ACCESS, true, te32->th32ThreadID), 0);
页:
[1]