html页面枚举 暴力,暴力枚举进程模块(示例代码)
同学问过我进程体中EPROCESS的三条链断了怎么枚举模块,这也是也腾讯面试题。我当时听到也是懵逼的。
后来在网上看到了一些内存暴力枚举的方法ZwQueryVirtualMemory。
函数原型是
NTSTATUS NtQueryVirtualMemory(HANDLE ProcessHandle, //目标进程句柄
PVOID BaseAddress, //查询的基址 MEMORY_INFORMATION_CLASS MemoryInformationClass, //枚举宏 PVOID MemoryInformation, //接收信息的结构体 SIZE_T MemoryInformationLength, //缓冲区大小 PSIZE_T ReturnLength); //返回实际长度
//枚举宏
typedef enum _MEMORY_INFORMATION_CLASS {
MemoryBasicInformation,
MemoryWorkingSetList,
MemorySectionName,
MemoryBasicVlmInformation
} MEMORY_INFORMATION_CLASS;
R0通过遍历SSDT获得函数地址。
我们要枚举进程模块信息, 需要用到两类内存信息MemoryBasicInformation和MemorySectionName,
MemoryBasicInformation的缓冲结构体
typedef struct_MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;//查询内存块所占的第一个页面基地址
PVOID AllocationBase; //内存块所占的第一块区域基地址,小于等于BaseAddress,
DWORD AllocationProtect; //区域被初次保留时赋予的保护属性
SIZE_T RegionSize; //从BaseAddress开始,具有相同属性的页面的大小,
DWORD State; //页面的状态,有三种可能值MEM_COMMIT、MEM_FREE和MEM_RESERVE
DWORD Protect; //页面的属性,其可能的取值与AllocationProtect相同
DWORD Type; //该内存块的类型,有三种可能值:MEM_IMAGE、MEM_MAPPED和MEM_PRIVATE
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
MemorySectionName的缓冲结构体为
//MemorySectionName
typedef struct_MEMORY_SECTION_NAME {
UNICODE_STRING Name;
WCHAR Buffer[260];
}MEMORY_SECTION_NAME,*PMEMORY_SECTION_NAME;
前者返回内存的基本信息, 比如: 内存区的基址,大小以及页面的各种属性等等, 而后者则返回内存段的名字,
也就是我们所要找的模块名.
利用前者我们可以过滤出类型为MEM_IMAGE的内存段并得到内存段的基址和属性, 利用后者我们可以得到模块名.
此时的模块名是NT Path需要转成Dos Path,代码如下
BOOLEAN NtPathToDosPathW(WCHAR* wzFullNtPath,WCHAR*wzFullDosPath);externNTSTATUS
NTAPI
ZwQueryDirectoryObject (
__in HANDLE DirectoryHandle,
__out_bcount_opt(Length) PVOID Buffer,
__in ULONG Length,
__in BOOLEAN ReturnSingleEntry,
__in BOOLEAN RestartScan,
__inout PULONG Context,
__out_opt PULONG ReturnLength
);
typedefstruct_OBJECT_DIRECTORY_INFORMATION
{
UNICODE_STRING Name;
UNICODE_STRING TypeName;
} OBJECT_DIRECTORY_INFORMATION,*POBJECT_DIRECTORY_INFORMATION;
ULONG
NtQueryDosDevice(WCHAR* wzDosDevice,WCHAR*wzNtDevice,
ULONG ucchMax);
BOOLEAN NtPathToDosPathW(WCHAR* wzFullNtPath,WCHAR*wzFullDosPath)
{
WCHAR wzDosDevice[4] = {0};
WCHAR wzNtDevice[64] = {0};
WCHAR*RetStr =NULL;
size_t NtDeviceLen= 0;short i = 0;if(!wzFullNtPath||!wzFullDosPath)
{returnFALSE;
}for(i=65;i<26+65;i++)
{
wzDosDevice[0] =i;
wzDosDevice[1] = L‘:‘;if(NtQueryDosDevice(wzDosDevice,wzNtDevice,64))
{if(wzNtDevice)
{
NtDeviceLen=wcslen(wzNtDevice);if(!_wcsnicmp(wzNtDevice,wzFullNtPath,NtDeviceLen))
{
wcscpy(wzFullDosPath,wzDosDevice);
wcscat(wzFullDosPath,wzFullNtPath+NtDeviceLen);returnTRUE;
}
}
}
}
}
ULONG
NtQueryDosDevice(WCHAR* wzDosDevice,WCHAR*wzNtDevice,
ULONG ucchMax)
{
NTSTATUS Status;
POBJECT_DIRECTORY_INFORMATION ObjectDirectoryInfor;
OBJECT_ATTRIBUTES oa;
UNICODE_STRING uniString;
HANDLE hDirectory;
HANDLE hDevice;
ULONG ulReturnLength;
ULONG ulNameLength;
ULONG ulLength;
ULONG Context;
BOOLEAN bRestartScan;
WCHAR* Ptr =NULL;
UCHAR szBuffer[512] = {0};
RtlInitUnicodeString (&uniString,L"\\??");
InitializeObjectAttributes(&oa,&uniString,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status= ZwOpenDirectoryObject(&hDirectory,DIRECTORY_QUERY,&oa);if(!NT_SUCCESS(Status))
{return 0;
}
ulLength= 0;if (wzDosDevice !=NULL)
{
RtlInitUnicodeString (&uniString,(PWSTR)wzDosDevice);
InitializeObjectAttributes(&oa,&uniString,OBJ_CASE_INSENSITIVE,hDirectory,NULL);
Status= ZwOpenSymbolicLinkObject(&hDevice,GENERIC_READ,&oa);if(!NT_SUCCESS (Status))
{
ZwClose(hDirectory);return 0;
}
uniString.Length= 0;
uniString.MaximumLength= (USHORT)ucchMax * sizeof(WCHAR);
uniString.Buffer=wzNtDevice;
ulReturnLength= 0;
Status= ZwQuerySymbolicLinkObject (hDevice,&uniString,&ulReturnLength);
ZwClose(hDevice);
ZwClose(hDirectory);if (!NT_SUCCESS (Status))
{return 0;
}
ulLength= uniString.Length / sizeof(WCHAR);if (ulLength
{
wzNtDevice[ulLength]=UNICODE_NULL;
ulLength++;
}else{return 0;
}
}else{
bRestartScan=TRUE;
Context= 0;
Ptr=wzNtDevice;
ObjectDirectoryInfor=(POBJECT_DIRECTORY_INFORMATION)szBuffer;while(TRUE)
{
Status= ZwQueryDirectoryObject(hDirectory,szBuffer,sizeof (szBuffer),TRUE,bRestartScan,&Context,&ulReturnLength);if(!NT_SUCCESS(Status))
{if (Status ==STATUS_NO_MORE_ENTRIES)
{*Ptr =UNICODE_NULL;
ulLength++;
Status=STATUS_SUCCESS;
}else{
ulLength= 0;
}break;
}if (!wcscmp (ObjectDirectoryInfor->TypeName.Buffer, L"SymbolicLink"))
{
ulNameLength= ObjectDirectoryInfor->Name.Length / sizeof(WCHAR);if (ulLength + ulNameLength + 1 >=ucchMax)
{
ulLength= 0;break;
}
memcpy(Ptr,ObjectDirectoryInfor->Name.Buffer,ObjectDirectoryInfor->Name.Length);
Ptr+=ulNameLength;
ulLength+=ulNameLength;*Ptr =UNICODE_NULL;
Ptr++;
ulLength++;
}
bRestartScan=FALSE;
}
ZwClose(hDirectory);
}returnulLength;
}
网上都有代码我就不贴了,发个帖记录一下学习
这是别人的代码链接
http://www.cnblogs.com/kedebug/archive/2010/12/22/2791753.html
html页面枚举 暴力,暴力枚举进程模块(示例代码)相关推荐
- hc sr04流程图_HC-SR04超声模块示例代码/原理图/说明书等全套资料
本设计分享的是HC-SR04超声模块实例代码/原理图/说明书等全套资料.HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm:该HC-SR04超声模块包括 ...
- html自动缩放不出现滚动条,HTML页面缩小后显示滚动条的示例代码
这里记录一下如何使得HTML页面缩小之后,底部出现滚动条,使得可以通过滚动滚动条来浏览由于界面缩小而被掩盖的地方. 说一下这样做的好处. 首先,一般界面缩小之后不出现滚动条,用户就不能访问被隐藏的地方 ...
- php怎么实现打印预览,JavaScript_js实现局部页面打印预览原理及示例代码,最近有朋友问js 如何打印预览 - phpStudy...
js实现局部页面打印预览原理及示例代码 最近有朋友问js 如何打印预览,今天就来讲解一下,首先了解一下打印原理,其实局部打印页面很简单.就是把你需要打印的部分做一个起始标记,至于标记如何写,随便你写什 ...
- html页面在微信分享php,详解html静态页面实现微信分享思路的示例代码分析
微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...
- python精灵模块示例代码
精灵 模块是一个基于pygame的游戏模块,可以让我们使用python时轻松实现动画效果和游戏,下面给出一些例子: 背景化身弹球.rar: https://url18.ctfile.com/f/771 ...
- html流星雨页面,纯CSS流星雨背景的示例代码
插件预览图 使用教程代码展示 vue页面使用 Style .space { width: 100%; height: 100vh; background: #121212; } .planet { w ...
- android+xposed+实例,Android Studio 上第一个 Xposed 模块(示例代码)
环境: 已root手机一枚 Android Studio一枚 官方文档参考 这里 . 准备工作 我们需要事先下载一个 Xposed installer 安装在手机上,用来管理所有的模块. 安装完成后打 ...
- 如何将html页面导出到excel,html页面表格导出到excel总结(示例代码)
html 表格导出道Excel 列标题1 列标题2 类标题3 列标题4 列标题5 aaa bbb ccc ddd eee AAA BBB CCC DDD EEE FFF GGG HHH III JJJ ...
- ZwQueryVirtualMemory暴力枚举进程模块
0x01 前言 同学问过我进程体中EPROCESS的三条链断了怎么枚举模块,这也是也腾讯面试题.我当时听到也是懵逼的. 后来在网上看到了一些内存暴力枚举的方法ZwQueryVirtualMemory. ...
- 2013蓝桥杯C++A:排它平方数(递归,枚举,暴力解法)
二.题目: 排它平方数 小明正看着 203879 这个数字发呆. 原来,203879 * 203879 = 41566646641 这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位 ...
最新文章
- 公司inur php id_,PHP——个人信息管理系统
- 如何知道是否开启opcode_你知道如何查询企业是否有ICP经营许可证吗?
- jq封装post请求数据_GitHub - xiaohange/JQHttpRequest: GET/POST / PUT / DELETE 网络请求的封装...
- 呕心沥血为小白总结13个学习网站-错过了你注定绕弯!
- 对渠道流量异常情况的分析
- Python | 程序从列表中删除范围内的所有元素
- linux服务器无法识别xml文件,linux上重启服务器提示找不到smartbi-config.xml文件
- DrawIndexedPrimitiveUP这个函数
- 徐州医科大学党委书记夏有兵一行莅临云创
- matlab生成低通滤波,用matlab设计低通滤波器
- 百度网盘视频加速播放
- 想搬去苏州生活了。。
- Unity Serialization 序列化
- 程序员如何改善精神内耗?
- 利用 eutils 实现自动下载序列文件(python实现)
- 《信息处理技术》知识点整理
- 把房子卖了,把工资发了
- 九龙证券|一夜暴跌36%,美股走势分化,标普指数创近2月最差周度表现
- unittest安装教程_unittest模块使用方法
- OCR二次开发宝典:飞桨联合多家企业和高校发布《OCR产业范例20讲》
热门文章
- Valve员工手册,一部震惊世界的“人生攻略”
- 监管科技崛起:从FinTech到RegTech
- Rust : Pointer......to be continued
- (转)去中心化:关于区块链的争论
- Julia:和Julia相关的经济学网站 和初学者网站
- 【车牌识别】基于matlab GUI字符匹配车牌识别(18省份)【含Matlab源码 1617期】
- 【TWVRP】基于matlab遗传算法求解送货且带时间窗的车辆路径规划问题【含Matlab源码 1074期】
- 【人脸表情识别】基于matlab GUI CNN人脸表情识别【含Matlab源码 787期】
- 【人脸表情识别】基于matlab PCA+SVM人脸表情识别评分系统【含Matlab源码 593期】
- 妲己机器人功能_来自机器人影响者的5个功能强大的Instagram教训