解除远程dll,屏蔽GP的方法
2007-08-08 15:55
330 查看
以前写的方法,为了解决:解除流氓软件inject到其他进程中的dll,导致目标进程(Explorer)崩溃的问题.
其实就是修改了SEH filter的处理函数,让他什么也不做,到达异常情况不报告~
如果不明白SEH问题,请参阅任何一本内核编程的书籍(ring3下fs指向TEB,具体描述在ldt中)
DWORD WINAPI InjectForFreeDll(IN LPINJECT_DATA lpData)
{
HMODULE hDestDll = NULL;
DWORD bResult = 1;
pfn_LoadLibrary LoadLibrary = NULL;
pfn_FreeLibrary FreeLibrary = NULL;
pfn_Sleep Sleep = NULL;
LPTOP_LEVEL_EXCEPTION_FILTER pOldfilter = NULL;
pfn_SetUnhandledExceptionFilter SetUnhandledExceptionFilter = NULL;
do
{
LoadLibrary = lpData->LoadLibrary;
FreeLibrary = lpData->FreeLibrary;
SetUnhandledExceptionFilter = lpData->SetUnhandledExceptionFilter;
Sleep = lpData->Sleep;
if (!(LoadLibrary && FreeLibrary && Sleep && SetUnhandledExceptionFilter))
break;
//push offset InjectUnhandledExceptionFilter;
//push fs:[0]
//mov fs:[0], esp
//add esp, 4
pOldfilter = SetUnhandledExceptionFilter(InjectUnhandledExceptionFilter);
HMODULE hDestDll = LoadLibrary(lpData->szDllPath);
if (hDestDll == NULL)
break;
do
{
if (!FreeLibrary(hDestDll))
{
if (GetLastError() == ERROR_MOD_NOT_FOUND)
{
bResult = 0;
}
break;
}
}while(1);
//2秒钟内的GP都给屏蔽掉
Sleep(2000);
//pop fs:[0]
SetUnhandledExceptionFilter(pOldfilter);
}while(0);
return bResult;
}
//啥也不处理,要的就是这种效果
LONG WINAPI InjectUnhandledExceptionFilter(IN struct _EXCEPTION_POINTERS* ExceptionInfo)
{
return -1;
}
其实就是修改了SEH filter的处理函数,让他什么也不做,到达异常情况不报告~
如果不明白SEH问题,请参阅任何一本内核编程的书籍(ring3下fs指向TEB,具体描述在ldt中)
DWORD WINAPI InjectForFreeDll(IN LPINJECT_DATA lpData)
{
HMODULE hDestDll = NULL;
DWORD bResult = 1;
pfn_LoadLibrary LoadLibrary = NULL;
pfn_FreeLibrary FreeLibrary = NULL;
pfn_Sleep Sleep = NULL;
LPTOP_LEVEL_EXCEPTION_FILTER pOldfilter = NULL;
pfn_SetUnhandledExceptionFilter SetUnhandledExceptionFilter = NULL;
do
{
LoadLibrary = lpData->LoadLibrary;
FreeLibrary = lpData->FreeLibrary;
SetUnhandledExceptionFilter = lpData->SetUnhandledExceptionFilter;
Sleep = lpData->Sleep;
if (!(LoadLibrary && FreeLibrary && Sleep && SetUnhandledExceptionFilter))
break;
//push offset InjectUnhandledExceptionFilter;
//push fs:[0]
//mov fs:[0], esp
//add esp, 4
pOldfilter = SetUnhandledExceptionFilter(InjectUnhandledExceptionFilter);
HMODULE hDestDll = LoadLibrary(lpData->szDllPath);
if (hDestDll == NULL)
break;
do
{
if (!FreeLibrary(hDestDll))
{
if (GetLastError() == ERROR_MOD_NOT_FOUND)
{
bResult = 0;
}
break;
}
}while(1);
//2秒钟内的GP都给屏蔽掉
Sleep(2000);
//pop fs:[0]
SetUnhandledExceptionFilter(pOldfilter);
}while(0);
return bResult;
}
//啥也不处理,要的就是这种效果
LONG WINAPI InjectUnhandledExceptionFilter(IN struct _EXCEPTION_POINTERS* ExceptionInfo)
{
return -1;
}
相关文章推荐
- 利用ASP远程注册DLL的方法
- 利用ASP远程注册DLL的方法
- ring3层远程注入DLL方法
- 远程终端开发mstscax.dll的调用方法
- 利用ASP远程注册DLL的方法
- 绑定和解除绑定远程服务并调用远程服务的方法
- 谷歌(Chrome)浏览器中快速解除网页屏蔽鼠标右键、复制的方法/代码
- Dll远程注入解除
- (转)利用ASP远程注册DLL的方法
- 利用ASP远程注册DLL的方法
- 利用ASP远程注册DLL的方法
- 解除网页屏蔽的另一种方法
- 关于在英创em9161板上使用ADO.net连接远程数据库提示 “无法找到 PInvoke dll"dbnetlib.dll"”问题解决方法
- 解决由于RDPDD.dll failed to load错误事件而导致无法连接远程桌面的方法
- 解除网页屏蔽的另一种方法
- Linux远程连接Windows10出现"连接被对端重置"错误 解决方法
- linux系统下的virtualbox在ssh中配置microsoft RDP(VRDE)远程桌面功能方法
- 远程连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析
- DLL中窗体Form问题思考及解决方法
- Java RMI 框架(远程方法调用)