能力值:
( LV2,RANK:10 )
|
-
-
26 楼
我是说12楼那个
|
能力值:
( LV13,RANK:290 )
|
-
-
27 楼
我在想,驱动是通过判断进程eprocess和路径来实现的,
如果吧杀进程的路径改了,驱动也会判断失效的。
只要我自己的程序在退出的时候搞点东西,这样就没什么问题了。
|
能力值:
( LV13,RANK:290 )
|
-
-
28 楼
12楼那个是可以关,
你是通过关主线程来实现的。
我没有hook TerminateThread,还得再改改。。
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
关于结束进程的种种 请看这里 应该是最全的了 - -
http://bbs.pediy.com/forumdisplay.php?f=76&prefixid=phpforce_54
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
那都是多少年的老黄历了。
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
可笑。。 http://bbs.pediy.com/showthread.php?t=50780&prefixid=phpforce_54
看1楼 OpenThread ---> TerminateThread 难道你用的方法是新黄历的?
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
我没说是新黄历啊,我只是说你的那些也是老的而已,这个帖子里,当然是能干掉楼主的保护就行,如果楼主的保护老黄历搞不了,自然能有新的
再说,14楼那个你的黄历里没有吧,因为是针对楼主的写法的缺陷来打的,这就叫随机应变,千变万化,飞花摘叶,亦可杀人。
楼主新版这么一改倒也挺搞笑的,随便什么文件打不开就保护了,我机器上IE什么的全被保护了~
|
能力值:
( LV10,RANK:170 )
|
-
-
33 楼
SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)ExitProcess,GetModuleHandle(L"KERNEL32"),YouThreadId);
getchar();
////////////////////////
SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)ExitProcess,GetModuleHandle(L"KERNEL32"),YouThreadId);
PostMessage(HWND_BROADCAST,RegisterWindowMessage(L"XXXXXXXXXXXX"),0,0);
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
你们开始玩复古了?
|
能力值:
( LV13,RANK:260 )
|
-
-
35 楼
枚举xx 表 直接结束...
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
有意思么……我记得MJ几百年前的那个DEMO就没人能结束掉
|
能力值:
( LV13,RANK:290 )
|
-
-
37 楼
进程防杀我没搞过,它是不是很老的东西,跟我无关。对我来说,没搞过的东西就是新东西。
会的鸟赶紧飞开就是了。
更新了程序,增加了对terminatethread的hook ,并修复了一些漏洞。
现在不管oooshit.exe,还是oooshit2.exe都杀不了了。
顺便说1下,
oooshit.exe是通过枚举进程信息,然后用terminatethread来杀主线程;
而oooshit2.exe就有点的猥琐了,我估计kman看了下我的驱动,才这样搞的。
在驱动里,我是把内核路径转换为dos路径进行比较,转的过程中会打开需要保护的进程文件。
而oooshit2.exe就是先把要保护的进程文件打开了,然后我在驱动中打开文件时就会报错,所以无法将内核路径转换为dos路径,就无法比较了。
呵呵,kman的思路很好,非常感谢。
我现在的比较函数如下,kman继续搞搞看。
BOOL IsNeedProtectEx( IN PEPROCESS pEProcess )
{
BOOL bRet = FALSE;
UNICODE_STRING uniDosPath;
PUNICODE_STRING pImageFileName = NULL;
if( wcslen( g_wszDestPath ) > 0 && GetProcessImagePath( pEProcess, &pImageFileName ) )
{
if( ConvertKernelPathToDosPath( pImageFileName, &uniDosPath ) ) // 比较dos路径
{
if( _wcsicmp( uniDosPath.Buffer, g_wszDestPath ) == 0 )
{
bRet = TRUE;
DbgOutput( "\r\nIn IsNeedProtectEx(), Process{%wZ} is being protected.", pImageFileName );
}
}
else // 无法得到dos路径,则比较内核路径
{
WCHAR szKrnlPath[ MAX_PATH + 20 ] = { 0 };
if( ConvertDosPathToKrnlPath( g_wszDestPath, szKrnlPath ) )
{
if( _wcsicmp( pImageFileName->Buffer, szKrnlPath ) == 0 )
{
bRet = TRUE;
DbgOutput( "\r\nIn IsNeedProtectEx(), Process{%wZ} is being protected.", pImageFileName );
}
}
}
ExFreePool( pImageFileName );
}
return bRet;
}
|
能力值:
( LV12,RANK:760 )
|
-
-
38 楼
保护个process有这么复杂么?
对于高版本的Windows直接
PsAcquireProcessExitSynchronization(Process)
然后就各种打不开了,结束不掉了~
|
能力值:
( LV13,RANK:290 )
|
-
-
39 楼
这里只是在xp下,
|
能力值:
( LV8,RANK:120 )
|
-
-
40 楼
我喜欢 guxinyi 支持 guxinyi
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
我不搞了,他们都笑话我玩复古。
|
能力值:
( LV13,RANK:290 )
|
-
-
42 楼
淡定,
等我把win7的搞出来你再搞,
|
能力值:
( LV2,RANK:10 )
|
-
-
43 楼
个人觉得研究这种东西意思不大
|
能力值:
( LV12,RANK:760 )
|
-
-
44 楼
XP也一样把rundown 加一下,瞬间各种不能结束~
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
XP也一样把rundown 加一下,瞬间各种不能结束~
老v貌似啥都知道xxx
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
这种东西 值得研究,研究 研究 研究着,各种 纰漏 各种 新招就 浮生水面了,研究XP的 稍微有点 ……
|
能力值:
( LV3,RANK:20 )
|
-
-
47 楼
TerminateProcess pid + 1 +2 +3 可有过滤?
|
能力值:
( LV13,RANK:290 )
|
-
-
48 楼
我在xp下试了一下,加了ExAcquireRundownProtection后,杀进程后其进程信息还在,但是却把程序界面关掉了。无意义。
{
PEPROCESS pProcess = NULL;
HANDLE ProcessHandle = NULL;
CLIENT_ID ClientId;
OBJECT_ATTRIBUTES ObjectAttributes;
ClientId.UniqueProcess = (HANDLE)1540;
ClientId.UniqueThread = NULL;
InitializeObjectAttributes( &ObjectAttributes, NULL, 0, NULL, NULL );
ntStatus = ZwOpenProcess( &ProcessHandle, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId );
if( NT_SUCCESS( ntStatus ) )
{
ntStatus = ObReferenceObjectByHandle( ProcessHandle,
PROCESS_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)&pProcess,
NULL );
if( NT_SUCCESS( ntStatus ) )
{
PEX_RUNDOWN_REF pRef = (PEX_RUNDOWN_REF)( (PBYTE)pProcess + 0x080 ); // pProcess->RundownProtect
if( ExAcquireRundownProtection( pRef ) )
DbgOutput( "\r\nExAcquireRundownProtection() success." );
else
DbgBreakPoint();
ObDereferenceObject( pProcess );
}
else
DbgBreakPoint();
ZwClose( ProcessHandle );
}
else
DbgBreakPoint();
}
|
能力值:
( LV13,RANK:290 )
|
-
-
49 楼
“保护个process有这么复杂么?
对于高版本的Windows直接
PsAcquireProcessExitSynchronization(Process)
然后就各种打不开了,结束不掉了~
”
win7下也跟xp下一样,
{
PEPROCESS pProcess = NULL;
HANDLE ProcessHandle = NULL;
CLIENT_ID ClientId;
OBJECT_ATTRIBUTES ObjectAttributes;
ClientId.UniqueProcess = (HANDLE)2580;
ClientId.UniqueThread = NULL;
InitializeObjectAttributes( &ObjectAttributes, NULL, 0, NULL, NULL );
ntStatus = ZwOpenProcess( &ProcessHandle, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId );
if( NT_SUCCESS( ntStatus ) )
{
ntStatus = ObReferenceObjectByHandle( ProcessHandle,
PROCESS_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)&pProcess,
NULL );
if( NT_SUCCESS( ntStatus ) )
{
ntStatus = PsAcquireProcessExitSynchronization( pProcess );
if( NT_SUCCESS( ntStatus ) )
DbgOutput( "\r\nPsAcquireProcessExitSynchronization() success." );
else
DbgBreakPoint();
ObDereferenceObject( pProcess );
}
else
DbgBreakPoint();
ZwClose( ProcessHandle );
}
else
DbgBreakPoint();
}
|
能力值:
( LV3,RANK:30 )
|
-
-
50 楼
楼主,我和你有源啊。
速速看看源码。
|
|
|