windows inners
文章平均质量分 61
研究学习windows内部运作原理机制
pureman_mega
这个作者很懒,什么都没留下…
展开
-
进程间通信之alpc
常见的进程间通信有管道,共享内存等。下面演示一种交少见的机制,alpc (advanced local procedure call)。文件CPP-ALPC-Basic-Client.cpp。下面出现的代码都来自参考链接中,非本人编写。文件CommandALPC.cpp。原创 2024-01-05 17:18:00 · 720 阅读 · 0 评论 -
通过windows cng api 实现rsa非对称加密
相对于aes等对称加密算法,rsa加密算法不可逆性更强。非对称加密在通常情况下,使用公钥对数据进行加密之后,如果没有私钥,基本是不可能实现解密的。在一些勒索程序中,非对称加密会经常出现;通过运行结果可以看出,调用系统cng api 每次生成的密钥对都不一样,这就很ok。(下文通过cng api演示rsa加密,不做原理性介绍)原创 2023-12-23 14:22:10 · 578 阅读 · 0 评论 -
在windows11上彻底关闭系统更新
步骤 1,定位到系统更新的关键程序文件,如下图中绿框中的4个文件,通常在c:\windows\system32目录下面,wuauclt.exe,wuaueng.dll,wuapihost.exe,wuapi.dll。系统更新是由具体的程序来完成的,可以通过修改(重命名或删除)该程序的文件,使得系统无法启动更新这个过程;步骤 2 ,以文件wuauclt.exe为例,选中该文件并右键,查看属性;步骤3,对wuauclt.exe进行重命名,会有弹框提示,如下图。如果上面都成功执行,7的确定会变亮,并点击确定。原创 2023-12-12 22:30:12 · 720 阅读 · 1 评论 -
Windows Management Instrumentation (WMI) 的使用---一些系统接口的替代者
之前在一些样本里面看到了类似于sql的字符串,一直不太清楚那些是做什么的。哪些语句是wql(大概就是windows系统自己的查询语句),通过执行这些特定的查询语句,可以获取或修改许多系统相关的信息。比如说查询系统中当前运行的进程,系统中服务信息等;之前这些操作一般通过系统底层的api(CreateService,OpenProcess等)来获取。用来做一些运行环境检查(虚拟机,杀毒软件等)。通过上面的截图可以看到,查询一个类(class)的信息,会有多个字段返回,就像sql里面的表(table)。原创 2023-12-04 14:56:34 · 592 阅读 · 0 评论 -
windows 导入表/导出表 hook
【代码】windows iat hook。原创 2023-06-22 19:44:10 · 424 阅读 · 0 评论 -
ACE-SSC-DRV64.SYS 文件分析
2,设备对象的通信操作,对应驱动里面irp_mj_device_control处理函数。驱动接收到数据之后,根据里面的索引执行对应的函数,没有使用通常的控制码来区分子功能。读取进程的内存时,使用PsAcquireProcessExitSynchronization来“锁住”进程,避免在读取操作期间,进程退出导致异常。1,设备对象的打开操作,对应驱动里面irp_mj_create处理函数中,会对进程名进行过滤;经分析,发现主要功能是进程的内存读取,为应用层提供相关的接口。而不是直接遍历进程。原创 2023-01-14 13:27:07 · 3509 阅读 · 0 评论 -
通过进程id获取用户名
可以看到,User name这一栏里面,有NT AUTHORITY\SYSTEM,NT AUTHORITY\LOCAL SERVICE,HKS\1909等。不同的用户名拥有不同的权限。下面的代码获取的用户名与ProcessHacker的结果有一点不同。在一个样本中看到的:通过进程id获取对应的用户名,来确定需要注入的目标进程。实际结果中SYSTEM对应的是HKS$(HKS是设备名称,后面跟着'$‘,来表示SYSTEM);其他的LOCAL SERVICE,1909是一样的。原创 2022-12-24 19:19:00 · 917 阅读 · 3 评论 -
终章-天花板
距离我最开始接触Equation Group的样本已经有3,4年了吧,分析这些样本在很大程度上促进了我对windows系统的了解;虽然我还是无法完成类似的作品,但是现在至少可以‘欣赏’一下。原创 2022-08-04 17:35:10 · 286 阅读 · 0 评论 -
windows驱动保活的思路/apc demo
windows 驱动保活原创 2022-07-11 10:18:20 · 304 阅读 · 0 评论 -
基于tdi实现http的get和post请求
基于tdi实现http的get/post请求翻译 2022-06-27 16:27:03 · 259 阅读 · 0 评论 -
域名拦截/嗅探
wfp拦截域名/ip原创 2022-06-08 09:23:34 · 5238 阅读 · 0 评论 -
kernel mitigations
*原文链接:Kernel Mitigations - CNO Development Labs (cnotools.studio)*关于windows kernel mitigationsIn this section, we shall take a brief look at some of the Windows kernel mitigations that might hinder or completely block our exploits. Additional details .转载 2022-03-09 11:03:16 · 543 阅读 · 0 评论 -
zamana 反恶意软件核心模块分析--amsdk.sys
zamana AntiMalware 是windows平台上的一款反恶意软件(轻量级),其核心模块amsdk.sys实现了内核层的功能;amsdk.sys没有加壳/混淆,而且还有很多调试信息,这有利用我们理解其开发流程和细节。(分析环境:win 11 64,zamana AntiMalware 免费版)以下从其六个主要的功能模块展开分析:1,authentication manager (进程认证管理)2,mini filter (文件过滤功能)3,self guard (自我保护)原创 2022-01-13 16:46:44 · 468 阅读 · 0 评论 -
一个简单的windows filesystem mini filter 驱动例子
代码网上都有,就讲一下解决安装问题:1,mini filter 的安装,一开始还是项普通的 legacy driver一样,通过命令函 "sc create servicenam binPath type=kernel"发现一直报错:找不到文件;然后调整"sc create servicename binPath type=filesys";驱动可以起来,然后FltRegisterFilter失败,报错找不到对象(0xc0000034).原来mini filter driver 安装需要通过inf 文件原创 2022-01-10 18:17:32 · 1313 阅读 · 0 评论 -
在应用层调试驱动程序 vgk.sys
***以下记录如何在应用层调试驱动程序vgk.sys,以及调试过程中获得的一些数据。1,如何让vgk.sys 在应用层跑起来?vgk.sys 是某游戏反作弊程序的一部分,是一个驱动文件;本文调试的vgk.sys 版本是1.0.0.3,64位。正常情况下,驱动程序需要在ring0环境中运行。但是vgk.sys 经过混淆虚拟化处理了,windbg双机调试/交互会很慢。之前在其他论坛上有人提起:可以在ring3调试驱动文件。于是,我就试了试。首先,看一下驱动程序和普通程序文件之间的相同点与不同点(大.原创 2021-11-18 16:09:13 · 2094 阅读 · 0 评论 -
cve-2019-8372 介绍///使用 KernelMode apc
简介 通过该利用漏洞驱动程序,可以实现任意地址读写。详情:http://www.jackson-t.ca/lg-driver-lpe.html原创 2021-09-11 21:57:15 · 185 阅读 · 0 评论 -
windows 驱动中使用ksecdd.sys 支持的加密操作
参考:关于 cng 介绍 ,链接:About CNG - Win32 apps | Microsoft Docs使用 cng 创建hash 例子,链接:Creating a Hash with CNG - Win32 apps | Microsoft Docs上面是介绍如何在应用层使用加密操作,实际上在驱动中和应用层的接口是通用的。下面介绍如何修改一下,方便在驱动编程中使用其提供的接口。1,首先,各类函数声明,变量的定义等在bcrypt.h 头文件中,所以应该要"#include<bc原创 2021-08-22 20:51:02 · 1145 阅读 · 0 评论 -
通过 irp 请求包删除文件
测试环境:win7 32测试功能:通过构造irp 请求包,直接发给DeviceObject 调用对应DriverObject中的MajorFunction 来删除文件参考:强制删除文件(1)——直接发IRP到文件系统_zz_strive_2012的专栏-CSDN博客来源:从文件 MD5:dace344b6a923a756143a76c9cd12ebc 中扣出来的。NTSTATUS DeleteCompletionRoutine(PDEVICE_OBJECT DeviceObject, P.原创 2021-03-30 17:02:32 · 406 阅读 · 0 评论 -
windows 驱动开发基础(三) 注册表回调
参考工程路径:C:\WinDDK\7600.16385.1\src\general\registry\regfltr关于 Transaction (事务),Enlistment(登记)对象的介绍https://docs.microsoft.com/zh-cn/windows-hardware/drivers/kernel/handling-rollback-operations1.注册表回调使用 // // Register the callback //函数原型...原创 2021-02-19 15:51:36 · 995 阅读 · 0 评论 -
windows 驱动开发基础(二)事件通知---关于irp处理,DPC,链表等
代码来源及参考:wdk 7,路径:C:\WinDDK\7600.16385.1\src\general\event 这个例子演示了两种关于当硬件事件发生时,驱动如何通知应用程序的方法。一种是基于event的,一种是基于IRP。但是样例驱动程序实际上没有与任何硬件通信,所以就通过 timer DPC 来模拟硬件事件。应用程序告诉驱动是通过设置event 信号还是完成 pending IRP 来通知自己,并给出一个相对的超时时限。两种方法的处理流程:1,基于event的方法 应用程序通过...原创 2021-02-14 15:17:15 · 848 阅读 · 0 评论 -
windows驱动开发基础(一)用户层与驱动层通信------ioctl
代码片段来自wdk7,工程路径C:\WinDDK\7600.16385.1\src\general\ioctl\wdm,该工程描述了IOCTLs (METHOD_IN_DIRECT, METHOD_OUT_DIRECT, METHOD_NEITHER, and METHOD_BUFFERED)的使用方法。以下截取关键部分,详情请参考wdk.4种ioctl 的特点method_buffered:输入和输出缓冲区一样,并且是由I/O manager 申请的,也就是说不是直接接触用户层传入的缓冲区。.原创 2021-02-04 17:14:06 · 1494 阅读 · 0 评论 -
windows work item 学习
系统环境:win7 32参考:逆向工程实战 3.3.2 work item文章内容:1,work item 的使用2,系统是如何管理work item 的3,如何遍历系统中所有的 work item1,work item 的使用work item 类似于系统线程,只是没有创建实际的对象(但实际上work item 还是在线程的环境下执行,只不过用的是已经存在的线程池里面的线程)。相关结构体:系统中使用work item 来干事的地方还不少,大概有10...原创 2021-01-14 11:21:54 · 1172 阅读 · 0 评论 -
推荐 windows x64 exploitation ctf 题目 难度系数:medium
材料链接:https://github.com/j00ru/ctf-tasks/tree/master/Dragon%20CTF%202019/Main%20event/BabyKernel前后花了2天左右,弄出了完整的解答思路,还是比较有意思的。原创 2020-12-31 10:39:22 · 194 阅读 · 0 评论 -
通过插apc 执行cmd
样本文件MD5: 42f43edc9937e4aa5f985773f5ea9daa以下内容取自样本中关于执行cmd 命令的片断,32位系统。大致流程:1传入的参数解析,进行一些判断,是否插入到默认进程等。第一个参数用来保留cmd 结果,第二个cmd 命令 字符串,第三个 bool 型,表示是否保留cmd 结果2通过ZwQuerySystemInformation 遍历进程,如果传入的参数中没有指定ProcessID,则将apc 插到默认的 winlogon.exe中执行;否则,插入到指定..原创 2020-11-01 15:33:36 · 685 阅读 · 0 评论 -
fanny equation 2---ms09-025漏洞利用实现
(代码逻辑是从fanny.dll中扣出来的,可以在内核执行代码,没有实现完整的利用链,下面的代码只实现到在r0输出信息,没有修改NtShutdownSystem及后续流程)。代码环境:vc 6.0, 32位系统环境:vista sp2用法:直接运行编译好的exe结果图:#include<stdio.h>#include<windows.h>#define WindowName L"h"#define ClassName L"STATIC"#de..原创 2020-08-20 16:59:32 · 348 阅读 · 0 评论 -
通过ZwSetSystemInformation在驱动中加载驱动
环境:win7 32 ,材料: ntoskrnl.exe , spldr.sys spsys.sys看到一个文件叫spldr.sys,loader for security processor,一个加载器。于是就进去看看如何实现的。在spldr.sys 里面看到字符串SystemRoot\system32\drivers\spsys.sys ,应该就是要加载这个驱动了。再看字符串的引用位置,发现调用ZwSetSystemInformation,应该就是通过这个函数来加载驱动的。下面是调用情况:.原创 2020-07-04 12:28:53 · 931 阅读 · 0 评论 -
两个关于Windows 简短内核函数的还原
拿到一份PE文件,从何处开始下手呢?当文件不是很大时,从头到尾式的分析方法勉强可以承受不会消耗太多时间,但是当文件大小是上百kb或者更大时,我们就要调整一下策略了。分析恶意文件的目的就是要弄清它要干什么,怎么干的,利用了那些系统的机制或缺陷漏洞;比较熟悉时还可以想想处理办法,自己试着还原部分重要的工作。原创 2017-12-18 10:46:36 · 309 阅读 · 0 评论 -
KeInsertQueueDpc简析
本来想把这个函数完整的还原出来,后来写着写着就发现头大,老是转不过弯来。它的反编译代码也不是很长,但是经过编译器处理后感觉还原起来很吃力。特别是一些调转,要将整个流程弄清楚才好写出来,还要注意变量的使用。因为完整的代码写不下出了,这里就对照反编译的代码分析(有兴趣的可以试一试,写完最好能分享一下:)): 原型:BOOLEAN KeInsertQueueDpc( IN PRKDPC Dpc,IN P原创 2017-12-19 14:46:17 · 1568 阅读 · 0 评论 -
KeWaitForSingleObject简析
这个函数在进行同步操作时经常会用到,它内部的工作流程是什么样的呢?让我来试着分析分析吧. (以反编译的汇编代码片段为材料)NTSTATUS KeWaitForSingleObject( IN PVOID Object,//分发器对象(dispatcher object),像(event,mutex,semaphore,thread or timer) IN KWAIT_REASON原创 2017-12-29 13:17:06 · 5465 阅读 · 0 评论 -
Dispatcher Objects:event,mutex,semaphore,timer
相信学过操作系统,大家对同步机制一定不会陌生。通过事件,互斥体,信号量,计时器等的使用来实现对某个对象的同步操作不会很难。回想当初自己学习操作系统的时候就有点疑惑:使用这些类型的变量为什么就可以完成同步操作呢?限于当时接触的范围,任我怎么想也是想不出个所以然的。这些对象的”源头“都在内核下,在用户模式下是不能窥探到他们的真面目的。 通过强大的内核调试器WinDbg来挖掘信息,先来看看结构组成:原创 2017-12-30 14:50:24 · 277 阅读 · 0 评论 -
ObReferenceObjectByPointer
ObReferenceObjectByPointerWithTag()例程介绍参考ddk文档。这个函数和ObReferenceObjectByHandleWithTag()最后要完成的任务是一样的—“ReferenceObejct”,只不过方法不一样。通过指针引用对象相对通过句柄来说,逻辑要简单得多,可以将二者结合起来看,上一个写的不清楚的地方在这里可能有答案。 lkd> dt nt!_object原创 2018-01-06 22:04:59 · 667 阅读 · 0 评论 -
undocumented function--还原的IoCreateDriver()
通过WinDbg得到的反汇编代码来重写的IoCreateDriver(),完成之后对它的大概流程有了基本的了解。这个函数的目的是 依据提供的两个参数,一个是名称,一个是驱动初始化例程,来创建一个轻量级的驱动程序—功能不完善;初始化例程是完成相关任务。写完之后感觉有什么不对,有些地方将函数往字符串的地址拷,有的地方调用字符串。有的地方没看明白,仅供参考:(。NTSTATTUS IoCreateDriv原创 2018-03-23 20:45:52 · 1470 阅读 · 0 评论 -
IoEnumerateDeviceObjectList函数的还原
函数接口解释参考ddk文档(win 7 32),用来遍历某个驱动对象的设备对象。c代码+WinDbg得到的反汇编代码NTSTATUS IoEnumerateDeviceObjectList(IN PDRIVER_OBJECT DriverObject, //ebp+8 IN PDEVICE_OBJECT *DeviceOb...原创 2018-06-07 22:09:30 · 462 阅读 · 0 评论 -
PsCreateSystemThread()函数的还原
主要是对传入的参数进行检查,再调用PspCreateThread()typedef struct _client_id{ PVOID UniqueProcess; PVOID UniqueThread;}CLIENT_ID,* PCLIENT_ID;typedef struct _unknown{ UNONG num1; ULONG num2; ...原创 2018-06-09 22:00:42 · 1088 阅读 · 0 评论 -
在ntdll.dll中找到NtCreateProcess(***)
const WCHAR SourceString[]=L"\\SystemRoot\\system32\\ntdll.dll";char aNtCreateProcess[]="NtCreateProcess";void op_ntdll(){ NTSTATUS status=STATUS_SUCCESS; IMAGE_NT_HEADERS32 ...原创 2019-03-17 21:09:37 · 827 阅读 · 0 评论 -
windows 对象管理学习小结
/*win7 32windows 对象管理相关部分学习小结,可以结合winobj,windbg等工具来查看及验证相关数据*/#include "ntddk.h"//extern ObTypeIndexTable;#define NUMBER_HASH_BUCKETS 37#define OBJECT_TO_OBJECT_HEADER(O) CONTAINING_RECORD((O...原创 2019-07-29 22:52:03 · 336 阅读 · 0 评论 -
遍历协议链表ndisProtocolList
遇到一个样本“搞”网络协议TCPIP的一些处理函数,刚开始半天对着汇编看半天感觉数据结构对不上,就拿起ida打开ndis.sys看了下NdisRegisterProtocol的内部实现。发现确实不一样,我想应该是该样本针对的系统不一样,于是就写了个demo./*只在win7 32 sp1 上测试有效,其他系统版本可能因为内部数据结构差异,存在问题.具体的系统版本数据结构详细,可以参看Nd...原创 2019-07-23 09:54:26 · 230 阅读 · 0 评论 -
WinDbg命令dt的使用
(不是很全面。可以参考WinDbg的帮助文档。操作系统 win7 32) dt命令主要用来查看相关的变量,结构体等的信息,它配合一些参数使用可以 获取想要的信息。 使用dt命令查看结构体:lkd> dt nt!_list_entry +0x000 Flink : Ptr32 _LIST_ENTRY +0x004 Blink :原创 2017-12-24 12:03:43 · 5183 阅读 · 0 评论