内核
kernweak
日子越来越有判头了
展开
-
ShellServiceObjectDelayLoad注册表键值作用
ShellServiceObjectDelayLoadShellServiceObjectDelayLoad是一个未公布的注册表项,可以将组件关联到这个键,这样一来,系统启动时间EXPLORER将自动加载目标组件.这就是某些病毒将自己注射到EXPLORER的办法.我们经常会遇到这样的事情,IeXPLORER的首页设置为BLANK,注册表RUN键的值也为空,但就是每隔一会儿有莫名其妙的网页自动...原创 2020-04-02 23:37:12 · 614 阅读 · 0 评论 -
《反勒索软件开发笔记》(三)导入表处理
DLL导出表处理防止别人猜到函数功能,所以要对导出表函数名进行处理,一般就是使用宏定义代替函数名,然后后面使用宏定义代替原有函数名,如下:// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLTEST_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含...原创 2020-02-12 19:23:51 · 257 阅读 · 1 评论 -
《Windows内核原理与实现笔记》(五)Windows微内核中进程和线程的数据结构KTHREAD,KPROCESS
Windows中进程和线程的数据结构Windows内核中的执行体层负责各种与管理和策略相关的功能,而内核层(或微内核)实现了操作系统的核心机制。进程和线程在这两层上都有对应的数据结构。内核层的进程和线程对象首先看(微)内核层的数据结构,这是进程和线程最为基本的数据结构,分别名为KPROCESS和KTHREAD。KPROCESS的定义(见base\ntos\inc\ke.h)t...原创 2020-01-09 17:54:04 · 1443 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(四)Windows进程线程概念
进程概念进程是各种资源的容器,它定义了一个地址空间作为基本的执行环境;而线程是一个指令执行序列,它可以直接访问所属进程中的资源。每个进程都至少有一个线程,而每个线程在任一时刻都一定属于某一特定的进程。多进程模型把时间细分,然后在某个适当的时间粒度上轮流执行这些任务,让每个任务都有机会被执行到。只要在人所能感知的时间粒度上(差不多是100~200ms)每个任务都有机会做一点事情,用户就会...原创 2020-01-09 15:13:52 · 347 阅读 · 0 评论 -
《反勒索软件开发笔记》(二)服务程序排错技巧
服务程序排错技巧调试信息输出 如OutputDebugString通常在开发或者测试使用。行时日志考虑单日志或者多日志文件异常捕获try expect内嵌汇编,栈内存被覆盖会没用异常捕获minidump如SetUnhandledExceptionFilter异常捕获,(运行时库?)奔溃不会捕获,用minidump传给服务器。因为服务管理器定时查服务管理...原创 2019-12-25 22:01:41 · 162 阅读 · 0 评论 -
《反勒索软件开发笔记》(一)vs常见问题与使用技巧,服务程序标准框架
下断点时候当前代码下断代码不匹配在工具->选项->调试->常规去掉要求源文件与原始版本完全匹配在重新编译时候重新生成表一些错,比如无法贷款数据库等先清理解决方案,在重新生成,如果还不行,就关闭项目,删除项目的.ncb文件,然后重新生成。杂项注意相对路径,另外做产品一般使用Unicode,不要用多字节,代码生成一步用MT或MTd。优化产品级的项目尽量避免...原创 2019-12-25 20:58:21 · 267 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(二)注册表和配置管理器,事件追踪,安全性管理
注册表和配置管理器Windows系统很多组件都是可以配置的,内核组建通常支持一些参数,甚至有些完全依赖于系统配置信息。例如I/O管理器和即插即用管理器在初始化阶段根据系统设置来例句和加载设备驱动程序。Windows操作系统提供了一个称为“注册表”的中心存储设施来作为系统的配置和管理中心。应用程序和捏合通过访问注册表来读写设置Windows同时提供API供访问注册表,API接到注册表访问请求,转...原创 2019-12-23 21:01:26 · 1333 阅读 · 0 评论 -
ObReferenceObjectByHandle() 源代码分析
首先代码有两篇文章阅读后就懂得差不多了https://blog.csdn.net/qq_21000273/article/details/53966150https://bbs.pediy.com/thread-181544.htm下面是加了注释的代码,wrk中的NTSTATUSObReferenceObjectByHandle ( __in HANDLE Handle...原创 2019-12-20 16:22:19 · 446 阅读 · 0 评论 -
监控进程创建,全部阻止的demo(使用MiniFilter)
使用wdk7600例子passthrough改写,监控IRPIRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION在Data->Iopb->Parameters.AcquireForSectionSynchronization.PageProtection == PAGE_EXECUTE(等于这个就是创建进程)在x64可以用这个监控进程 ,不会触发pa...原创 2019-06-04 18:22:04 · 2265 阅读 · 0 评论 -
Minifilter笔记
Minfilter与legacy filter区别比sfilter加载顺序更易控制.altitude被绑定到合适的位置。Minfilter在注册表服务项中有一项Altitude值此值越高位置越靠前 (待考证每一个minifilter驱动必须有一个叫做altitude的唯一标识符.一个minifilter驱动的altitude定义了它加载时在I/O栈中相对其他minifilter驱动...原创 2019-06-05 00:03:21 · 2989 阅读 · 0 评论 -
VT笔记(1)
概念硬件虚拟化技术,隐藏计算机资源物理性的一面,比如能把单个或多个物理资源,转化为一个或多个逻辑资源。intel vt-x/或者amdv8(SVM)VT是一个驱动(.sys),由操作系统加载后,运行在每个cpu上,推翻原来的操作系统,然后os和app-r0和r3变成GUEST,建立特权层(host,vmm,hypervisor,root,-1),然后监控GUEST执行。这样就可以简...原创 2019-06-24 01:23:22 · 2990 阅读 · 0 评论 -
Linux内核内存分配
函数有kmallocget_free_page()__get_free_pages()__get_free_page()vmallockmem_cachekmem_cache_alloclinux内存分为3中,DMA(可以直接访问),normal memory,high memory一般内存中,前16M是DMA内存,一般提供给ISA设备。high memory用在32位系...原创 2019-06-10 14:07:52 · 682 阅读 · 0 评论 -
Linux驱动模块编写
Linux驱动直接写函数,init,exit不需要想windows指定函数名,但是需要注册函数。用module_init#include <linux/kernel.h>#include <linux/module.h>MODULE_LICENSE ("GPL");//开源协议GPL 或者MIT BSDMODULE_AUTHOR ("TOM");//作者MOD...原创 2019-06-10 12:40:49 · 816 阅读 · 0 评论 -
HIPS(Sfilter)
文件过滤那么就是相关分发函数的处理FilterCreate(创建)FilterRead(一般不拦截,加解密处理)FilterWrite(修改,加解密处理)FilterSetInfo(删,重命名,IRP_MJ_SET_INFORMATION)Filterclose(一般不拦截,写关闭拦截)FIlterClean(写关闭)代码片段 DriverObject->...原创 2019-06-04 02:38:21 · 353 阅读 · 0 评论 -
再次理解IRP
我们处理IRP分两种情况,一种继续下发,一种结束,继续下发分两种,不管下发结果,一种是需要知道IRP执行结果,结束也分两种,成功和失败结果结束过滤驱动与IRP处理方式IoCopyXXXX+完成例程(把IRP当前栈拷贝下去,为IRP设置一个完成例程,等待事件,当IRP下发之后,下层完成之后调用完成例程,发出信号通知完成例程,设置信号为有信号,所以上层就知道情况了) ioSkip+Iocal...原创 2019-06-03 15:13:28 · 295 阅读 · 0 评论 -
Linux内核多线程与中断处理
Linux创建线程使用kernel_thread(),kthread_run()#include <linux/kthread.h>#include <linux/module.h>#ifndef SLEEP_MILLI_SEC#define SLEEP_MILLI_SEC(nMilliSec) \do { \ long timeout = (nMill...原创 2019-06-10 15:07:19 · 1440 阅读 · 0 评论 -
卷影拷贝服务
SfIsShadowCopyVolume( )函数的主要功能是:涉及到 卷影拷贝服务的。卷影拷贝服务(Volume Shadow Copy Service,VSS)是一种备份和恢复的技术。它是一种基于时间点来备份文件拷贝的技术。通过使用卷影拷贝服务,我们可以在特定卷上建立数据拷贝时间点,并在将来的某一时刻把数据恢复到任何一个你曾创建的时间点的状态。最常见的请求一般是恢复人为原因造成的数据丢失...转载 2019-06-03 14:19:12 · 2416 阅读 · 0 评论 -
Sfilter过滤
文件监控技术分为hook,过滤,回调。文件监控系统就是绑定和过滤,进程的各种操作被封装成一个IRP,再发给驱动的设备对象,驱动的设备对象通过各种分发函数处理操作,过滤就是在设备对象上面再绑定一个新的设备对象,先经过我们的设备对象。在去原来的设备对象。分层驱动框架与过滤irp从上往下经过不同设备栈,先经过文件过滤驱动设备(由文件过滤驱动创建),文件卷设备(盘符C盘D盘这些),磁盘设备...原创 2019-06-03 03:26:58 · 877 阅读 · 0 评论 -
弹窗思路
比如有个未知进程A,运行起来被驱动拦截到,收集进程信息,把数据放到OprList里,同时也放到WaitList里,这两个表一一对应,OperList节点会发到应用层供其弹窗,驱动层等待用户层返回到数据,WaitList存放应用层操作的结果阻塞在。应用层会开启一个弹窗线程异步读OperList中的数据,然后DeviceIoControl通知驱动,然后驱动在WaitList找到节点进行应用层的...原创 2019-05-30 03:13:25 · 438 阅读 · 0 评论 -
DLL注入相关
DLL是通过问卷映射实现,只占一个内存空间,每个DLL收到一份映像,DLL被加载之后系统页面文件明显变大,内存使用明显变大。DLL引用分显示隐式如果有lib+dll+头文件则:建工程的时候选择导出符号#pragma comment(lib, “libname.lib”)#include “libname.h”func();只有DLL文件 LoadLibrary Ge...原创 2019-06-02 03:41:22 · 592 阅读 · 0 评论 -
设备名与链接名互相转化思路
符号链接转设备名可以调用ZwOpenSymbolicLinkObject,ZwQuerySymbolicLinkObject直接查询到设备名反过来是调用第一种方法,把每个盘符A到Z的符号链接对应的设备名求出来,然后一一比对。一种实现DWORDWINAPIMyQueryDosDeviceW( LPCWSTR ...原创 2019-05-29 18:44:10 · 268 阅读 · 0 评论 -
ShadowSSDT hook
ShadowSSDT保存在win32k.sys中,未导出,不是常驻内存。采用硬编码,查到某些加载了shadowSSDT进程,所以找一个CSRSS进程,然后KeStackAttachProcess到一个有GUI线程的进程中,csrss.exe就刚好有。这个进程特征是句柄表中Portobject(type21)句柄是\\Windows\\ApiPort的PID就是就是。然后考虑下标:下标只能硬...原创 2019-06-01 20:35:13 · 409 阅读 · 0 评论 -
学习他人代码风格笔记
PAGED_CODE()简而言之,Windows并没有将运行在Ring 0的代码全部视为内核,而是区分为Kernel和Executive,Executive可以理解为“管理层”的意思,解释为“执行体”不合理。其中,Kernel是狭义的内核,里面的代码包括用到的数据,都是常驻在物理内存中的,不支持分页机制。而除此之外的代码和数据,是支持分页机制的,并且可以被交换到pagefile中...原创 2019-06-06 02:13:55 · 168 阅读 · 0 评论 -
#pragma alloc_text 与 ALLOC_PRAGMA
为了编译时控制分页有时,驱动程序的某些部分必须驻留内存而另一些可以被分页,这就需要一种能控制代码和数据是否分页的方法。通过指导编译器的段分配可以实现这个目的。在运行时,装入器通过检查驱动程序中的段名, 把段放到你指定的内存池中。此外在运行时调用内存管理器的例程也能实现这个目的。Win32 执行文件,包括内核模式驱动程序,在内部都是由一个或多个段组合而成。段可以包含代码或数据,通常还会有诸...转载 2019-06-05 16:28:38 · 422 阅读 · 0 评论 -
注册表回调笔记
NTSTATUS CmRegisterCallbackEx( PEX_CALLBACK_FUNCTION Function,//回调函数 PCUNICODE_STRING Altitude,//高度 PVOID Driver, PVOID Context, PLARGE_INTEGER C...原创 2019-06-05 03:06:21 · 776 阅读 · 0 评论 -
Linux学习
中断机制中断向量(256)异常:cpu内部出现中断IF维持不变,不关,异常分为故障和陷阱故障(Fault):缺页,越界,等CPU出现的,非故意为之。陷阱(TRAP):调试指令int3,等,故意为之中断IF标志位清0,关中断非屏蔽:计算机硬件出现异常屏蔽中断0-31向量对应异常和非屏蔽32-47,向量分配给屏蔽中断48-255向量标识软中断,参考资...原创 2019-06-11 23:37:24 · 259 阅读 · 0 评论 -
ark笔记
ark相关技术是关于进程检测,杀进程,线程检测,杀线程,怎么检测模块,隐藏dll等。还有驱动模块怎么检测,怎么卸载别人的驱动。SSDT,shadowSSDT,FSD相关。进程进程枚举R3枚举进程CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)/Process32First/Process32Next,建一个快照,然后去遍历ZwQueryS...原创 2019-07-03 01:36:47 · 4114 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(一)Windows系统结构和基本概念
Windows内核结构上图是windows内核的组成结构如图Windows内核分三层,与硬件直接打交道的是硬件抽象层HAL,这一层把所有与硬件相关代码逻辑隔离到一个专门模块中,从而是上层尽可能独立于硬件平台。HAL是一个独立动态链接库,windows带了多个如Hal.dll,halacpi.dl等,这是根据高级配置和电源接口高级可编程中断控制器之类的区别,只有一个会被选中选中之后拷贝改...原创 2019-09-26 09:35:31 · 3767 阅读 · 1 评论 -
windbg下载指定符号
参考链接https://bbs.pediy.com/thread-151058.htmhttps://bbs.pediy.com/thread-151075.htm原创 2019-09-09 18:04:06 · 809 阅读 · 0 评论 -
编译及动态调试WRK
刚开始用的vs各种不正确,最后使用先安装windows server 2003,然后在里面编译wrk,成功。将WRK源码拷贝到windows虚拟机中,方法很多,我这边是通过【文件夹共享】的方式把源码放到C盘根目录【C:\】在虚拟机中,将【C:\WRK-v1.2\toos\x86】的路径加到Path系统环境变量中。打开CMD命令行窗口模式,cd C:\WRK-v1.2\base\ntos...原创 2019-09-09 17:59:17 · 513 阅读 · 0 评论 -
关于不弹错误对话框
前面被问到主防如果拒绝了如何不弹系统的错误对话框。当时想的是hook弹窗,找到顶层窗口不弹之类的方法,现在看到下面这个比如UnhandledExceptionFilter()将检查注册表HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug下的表项,中Auto表项代表是否弹出错误对话框,值位1表示不弹出错误对话框直接结束程序,其余值均会...原创 2019-08-21 09:45:10 · 285 阅读 · 0 评论 -
文件读取在驱动中经过的一些函数
原文链接http://www.m5home.com/bbs/thread-5302-4-1.html文件在读入到内存之前,终归是要经过IRP_MJ_READ的,当打开需要的文件时候,会有IRP_MJ_CREATE,你双击的时候,也是先产生IRP_MJ_CREATE再产生IRP_MJ_WRITE的。会有一个IRP_MJ_READ发送给NTFS驱动。以下的流程是:NTFS!NtfsFsdR...转载 2019-08-09 13:45:27 · 400 阅读 · 0 评论 -
WFP注意事项
在wfp开发是遇到FwpmEngineOpen0无法解析;NET_BUFFER_LIST未定义在链接器->输入 的附加依赖项中加入如下lib,自己项目需要什么就加什么$(DDK_LIB_PATH)\NTOSKrnl.lib;$(DDK_LIB_PATH)\FwpKClnt.lib;$(DDK_LIB_PATH)\NetIO.lib;$(DDK_LIB_PATH)\NDIS.lib...原创 2019-07-23 00:10:11 · 640 阅读 · 0 评论 -
ZwCreateFile报错0xC0000043,STATUS_SHARING_VIOLATION
在进行驱动开发时,调用ZwCreateFile报错0xC0000043,STATUS_SHARING_VIOLATION,经过搜索得知参数ShareAccess,指定“共享所有”的正确方法是FILE_SHARE_VALID_FLAGS,而不是0 。下面是帮助网页https://community.osr.com/discussion/288138关键回答//// MessageId:...原创 2019-07-21 19:36:19 · 2647 阅读 · 0 评论 -
自己的HIPS开发记录
记录下自己开发出现的bug以及原因,完成后提醒自己,不要再这么21.FltSendMessage的inputbuffer传错大小,本来应该穿自己分装的结构体大小,结果写错成了想传的结构体指针大小,所以造成蓝屏。提示bad_pool_header2.在下发规则时候,IsPatternMatch(const PWCHAR pExpression, const PWCHAR pName, BOO...原创 2019-07-18 23:31:25 · 490 阅读 · 0 评论 -
x64回调监控注册表
x86下可以使用hook技术,x64下使用回调监控。主要函数CmRegisterCallback(RegistryCallback, NULL, &CmHandle);原型NTSTATUS CmRegisterCallback( PEX_CALLBACK_FUNCTION Function, PVOID Context, PLARG...原创 2019-07-18 21:05:21 · 821 阅读 · 0 评论 -
A盾学习笔记(2)反inlinehook
下面学习下反inlinehook在工程的AntilineHook.c里总体思路就是找到jmp指令,判断是不是被inlinehook的跳转,然后自己重载了内核之后,把原来被感染inlinehook跳过去执行的函数的地址位置,再hook成我们重载正常的的函数地址,实现反inlinehook,我还以为要把污染的hook拷贝成正常code。VOID AntiInlineHook(WCHAR ...原创 2019-07-06 03:18:25 · 480 阅读 · 0 评论 -
A盾学习笔记(1)
功能模块枚举Hook()PE与内核重载内核模块(驱动)内核信息(线程,DPC定时器,系统回调)过滤驱动DISPATCH例程系统进程系统服务网络连接(TCP/UDP端口与IP)删文件(强删文件思路,正在运行中的程序,sectionObject里面的值清0,构造个IRP下发,独占的就去全局句柄表拷贝句柄,然后关掉,对于硬链接(不夸磁盘盘符的,通过引用计数,软连接...原创 2019-07-06 02:42:06 · 467 阅读 · 0 评论 -
通过GetProcessNameByProcessId得到进程路径
写主防时,为了拿到进程路径,所以查询发现一种发现一种方式是通过PID,调用PsLookupProcessByProcessId(ProcessId, &ProcessObj)拿到进程的EPROCESS,然后PsGetProcessImageFileName(ProcessObj)拿到进程进程路径。现在看下PsLookupProcessByProcessId资料kd> u P...原创 2019-07-19 20:28:07 · 3980 阅读 · 0 评论 -
NDIS驱动
NDIS驱动分为3层协议层驱动绑定再所有网卡上,所以能截获接收到的包,但无法截获发送的包中间层驱动(P部分)绑定在了所有小端口驱动上(M部分)也被所有的协议驱动绑定,收发都能拦截。所有中间层小端口部分负责处理发送的包,协议部分负责处理接受的包小端口驱动网卡驱动NDIS驱动开始NdisMInitializeWrapper初始化NDIS句柄,NdisIMRegist...原创 2019-07-05 04:26:10 · 5396 阅读 · 1 评论