自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苞米地里捉小鸡的博客

这是个程序弱鸡的博客,说的都是屁话

  • 博客(158)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring Boot启动web项目Whitelabel Error Page问题

解决办法:如果代码能跑起来,且出现空白页问题,那么不太可能是程序的问题。很大可能是你的webController类放错地方了如上所示,Controller类所在的包需要与Application在同一级。我的项目中DemoApplication所在的位置为:package com.example.demo。所以也就是说Controller类所在的包需要为package com.example.demo.controller。结果:...

2021-08-10 17:23:49 383

原创 IDEA运行SpringBoot无效的源发行版16

#问题IDEA运行SpringBoot报错无效的源发行版16#解决主要原因是IDEA没有下载JDK16,同理报同样错误只需切换相应的JDK版本即可。第一步:打开Project Structure第二步:下载对应的JDK第三步:切换过去结果:...

2021-08-10 15:59:20 1601

转载 java学习路线图(2018年最新版)

最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想学,但又很迷茫,不知从何下手。我就以过来人的经历,写在这篇博客里,不一定都对,但都是我根据自己的经历总结出来的,供你们的参考。Java Back-endJava 基础Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装、继承、多态。此外还有泛型、反射的特性,很多框架的技术都依赖它,

2021-06-14 23:03:36 231

原创 驱动文件管理之文件对象和磁盘对象

1.首先获取磁盘文件对象status = ObReferenceObjectByHandle(hRootFile, FILE_READ_ACCESS, *IoFileObjectType, KernelMode, &pRootFileObject, NULL);2.获取磁盘设备对象// 获取磁盘根目录设备对象 RootDeviceObject = pRootFileObject->Vpb->DeviceObject; RootRealDevice = pRootFi...

2020-10-20 19:42:00 318

原创 DLL挟持

背景如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行,这就是所谓的DLL劫持。由于DLL劫持技术简单有效,故被病毒木马广泛应用。接下来,将介绍DLL劫持技术实现过程DLL劫持技术的原理是当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任

2020-10-14 15:46:11 390

原创 劫持ZwQuerySystemInformation进行进程隐藏

背景进程隐藏,顾名思义就是运行注入程序之后,可以在任务管理器中让可见的目标进程消失。当然,进程隐藏的方法有很多,例如 DLL 劫持、DLL注入、代码注入、进程内存替换、HOOK API 等等。我们本文要介绍的就是 HOOK API 函数 ZwQuerySystemInformation 实现的隐藏指定进程。主要思路是通过Hook API技术抓ZwQuerySystemInformation函数,对它获取的进程列表信息进行修改,把有我们要隐藏的进程信息从中去掉,那么 ZwQuerySystemIn

2020-10-14 11:39:33 866

原创 傀儡进程

背景傀儡进程本质上是借用正常的软件进程或是系统进程的外壳来执行非正常的恶意操作。函数介绍1.GetThreadContext获取指定线程的上下文2.SetThreadContext设置指定线程的上下文3.ResumeThread减少线程的暂停计数。当暂停计数递减到零时,恢复线程的执行实现原理(1)第一步利用CreateProcess创建进程并且使用CREATE_SUSPENDED标志挂起主线程bRet = ::CreateProcess(pszFilePat

2020-10-13 22:35:40 600

原创 使用NtQueryInformationProcess伪装进程

背景所谓的进程伪装,指的修改任意一个指定进程的信息,是它的信息在系统中的显示是另一个进程的信息,这样看来,指定的进程就像是被伪装的进程一样,因为进程信息相同,但实际上,它还是原来的进程,做着原来的进程操作。实现原理具体实现原理如下:(1)首先通过OpenProcess函数获取指定PID进程的句柄(2)然后,通过GetProcAddress获取位于ntdll.dll动态链接库中的NtQueryInformationProcess这个未导出的API该函数返回一个NTSTATUS状态码

2020-10-13 21:15:56 1146 1

原创 远线程注入

远线程注入是指一个进程在另一个进程中创建线程的技术,是一种病毒木马所青睐的注入技术,同时也是一种很巧妙、很经典的DLL注入技术。远线程注入主要有以下几个步骤1.OpenProcess函数打开现有的本地线程对象函数声明HANDLE WINAPI OpenProcess(_In_ DWORD dwDesiredAccess,_In_ BOOL bInheritHandle,_In_ DWORD dwProcessId);2.VirtualAllocEx函数向我们要指定的进.

2020-09-26 20:19:16 493

原创 全局钩子DLL注入

全局钩子注入介绍背景Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。Windows操作系统提供的钩子机制就是用来截获和监视这些系统中的消息。按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的;而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。接下来,本文将介绍利用全局钩子来进行DLL注入。主要步骤1.在DLL中设置钩子回调函数、设置全局钩子和卸载

2020-09-25 10:37:57 1784 2

原创 HWND、HANDLE、HMODULE、HINSTANCE的区别

到底有什么区别?HWND是线程相关的,你可以通过HWND找到该窗口所属进程和线程。比如FindWindow时候返回的窗口对象句柄,从WND也可以看出来是window窗口的缩写HWND h_wnd = ::FindWindow(_T("MainForm"), NULL);Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄。 HANDLE hMutex = ::CreateMutexW(NULL, TRUE, application);//创建一个互斥量对象系统对内

2020-09-24 11:37:24 1568

原创 MiniFilter文件过滤驱动编译时遇到inf文件报错

用MiniFilter写文件过滤驱动的时候,编译过程遇到inf文件中报错。Invalid Class value “TODO_Change_Class_appropriately” exceeds max length of 31Invalid ClassGuid “{TODO_Change_ClassGuid_appropriately}”,expecting{xxxxxxxx…}就如下图这样如何解决?打开inf文件。将上面两个Class和ClassGuid的注释取消。将.

2020-09-22 16:10:51 679

原创 基于PsSetLoadImageNotifyRoutine实现监控模块加载并卸载已加载模块(卸载DLL、EXE和sys等加载)

背景对于内核层实现监控模块的加载,包括加载DLL模块、内核模块等。你也许会想到 HOOK 各种内核函数来实现。确定,在内核层中的 HOOK 已经给人留下太多深刻的印象了,有 SSDT HOOK、Inline HOOK、IRP HOOK、过滤驱动等等。但是,Windows 其实给我们提供现成的内核函数接口,方便我们在内核下监控用户层上模块加载的情况,即 PsSetLoadImageNotifyRoutine 内核函数,可以设置一个回调函数,来监控监控模块加载。现在,本文就使用 PsSetLoadI

2020-09-21 11:40:55 3365

原创 基于PsSetCreateProcessNotifyRoutineEx实现监控进程创建并阻止创建(禁用QQ 360等exe可执行文件)

对于内核层实现监控进程的创建或者退出,你可能第一时间会想到 HOOK 内核函数 ZwOpenProcess、ZwTerminateProcess 等。确定,在内核层中的 HOOK 已经给人留下太多深刻的印象了,有 SSDT HOOK、Inline HOOK、IRP HOOK、过滤驱动等等。但是,Windows 其实给我们提供现成的内核函数接口,方便我们在内核下监控用户层上进程的创建和退出的情况。即 PsSetCreateProcessNotifyRoutineEx 内核函数,可以设置一个回调函数,来监控

2020-09-20 17:00:18 2578 1

原创 SSDT HOOK技术(2)——获取SSDT表地址以及从中获取指定SSDT函数的地址

32 位系统和 64 位上,获取 SSDT 表的方式并不相同,获取 SSDT 表中的函数地址也不相同。由于32位系统中SSDT是可以通过Ntoskrnl.exe导出的,所以可以直接获取SSDT地址。然而在64位系统上,SSDT不能导出,需要通过特征码寻找到KeServiceDescriptorTable的地址1.32位获取SSDT的地址在 32 位系统中,SSDT 表是内核 Ntoskrnl.exe 导出的一张表,导出符号为 KeServiceDescriptorTable,该表含有一个指针指向

2020-08-19 17:19:44 1120 3

原创 SSDT HOOK技术(1)——获得SSDT函数索引号

1.SSDT是什么?SSDT全程是System Services Discriptor Table 翻译过来就是系统服务描述符表,那么系统服务描述符是什么呢?根据官方的解释ssdt表就是把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。那么我们可以理解为SSDT就是一个很庞大的数组,它被用来保存windows系统服务地址。比如我们在R3层调用了CreateFile这个A

2020-08-19 16:13:06 740

原创 WPP预处理器和跟踪消息标头tmh文件

WPP预处理器WPP又称为WIndows软件跟踪预处理器,它可以跟踪软件组件跟踪提供程序可以是以下项之一: 内核模式驱动程序。 用户模式驱动程序、应用程序或动态链接库(DLL)。 将 WPP 软件跟踪添加到 Windows 驱动程序必须对每个跟踪提供程序(如驱动程序或用户模式应用)进行唯一定义。为此,可以添加WPP_控件_guid宏,用于定义控件 GUID、标识符和跟踪标志。这样就可以确定并控制要跟踪的时间和内容。虽然每个驱动程序通常都有一个单独的控件 GUID,...

2020-06-16 10:56:19 2007

原创 内核驱动程序的同步处理、线程保护

在支持多线程的操作系统下,有些函数会出现不可重入的现象。所谓“可重入”,是指函数的执行结果不和执行顺序有关。反之则称这个函数是“不可重入”的。经常出行不可重入现象的情况是因为代码和全局变量有关,多个线程“同时”运行时,可能会导致汇编指令交错在一起。所以最终的全局变量的值是可能不一样的。1.中断请求级Windows将中断请求划分为软件中断和硬件中断,并将这些中断都映射成不同级别的中断请求级(IRQL).同步处理机制很大程度上依赖于中断请求级驱动程序使用内核函数KeRaiseIrql将IRQL提

2020-06-15 14:54:58 348

翻译 驱动编程之常用IRP

2020-06-12 19:00:17 154

原创 驱动程序DDK返回值类型NTSTATUS常见含义

STATUS_SUCCESS 函数执行成功 STATUS_UNSUCCESSFUL 函数执行不成功 STATUS_NOT_IMPLEMENTED 函数未被实现 STATUS_INVALID_INFO_CLASS 输入参数是无效的类型 STATUS_INFO_LENGTH_MISMATCH 输入参数长度不匹配 STATUS_ACCESS_VIOLATION 不允许访问 STATUS_IN_PAGE_ERROR 发生页故障 STATUS_IN

2020-06-12 11:24:39 1698 2

原创 Windows驱动设备对象中的Flags

Flgas:此域是一个32位的无符号整型。每一个位有具体的含义,其主要位如表所示其中比较重要的是读写操作有BUFFER和DIRECT方式,根据自己需要二选一。

2020-06-11 15:07:37 337

原创 寒江独钓NDIS驱动学习总结

第一部分:NDIS协议驱动协议驱动框架上层与应用层交互,下层与小端口驱动绑定(可能有中间层),主要功能是处理应用层请求发包和接收以太网包的作用。1.协议驱动DriverEntry编写步骤:(1)定义需要用到的变量(2)生成控制设备:针对不同操作系统调用IoCreateDeviceSecure或IoCreateDevice函数;生成该设备的符号链接:为了应用层调用该设备对象备用,通过IoCreateSymbolicLink这个API调用;设置控制设备对象的Flags:主要是设置其为直接

2020-06-11 08:44:34 1148

原创 NDIS小端口驱动ndisEdge学习四——使用ndisprot发送/接收包

使用ndisprot发送包1.小端口驱动的发包接口2.发送控制块TCB3.遍历包组并填写TCB4.写请求的构建与发送使用ndisprot接收包1.提交数据包的内核API2.从接收控制块(RCB)提交包3.对ndisprot读请求的完成函数4.读请求的发送5.用于读包的WDF工作任务6.ndisedge读工作任务的生成与入列其他的特征回调函数的实现1.InitializeHandler2.HaltHandler3.SendPackketsHandl.

2020-06-10 17:06:52 341

原创 NDIS小端口驱动ndisEdge学习三——打开ndisprot设备

第一部分ndisedge是一个WDF型的驱动,为了追赶时尚的最前沿技术,我们应该采用WDF下的新做法打开设备对象一般的IO目标只能打开本驱动生成的设备,这种IO目标被称为本地IO目标,如果要打开其他驱动生成的设备,必须使用远程IO目标远程IO目标使用WDF的内核API函数WdfIoTargetCreate来生成这个函数原型如下:NTSTATUS WdfIoTargetCreate( WDFDEVICE Device, PWDF_OBJECT_ATTRI

2020-06-10 16:58:19 613

原创 NDIS小端口驱动ndisEdge学习二——小端口驱动的初始化

目录1 首先进入DriverEntry检查版本号(可选)2 WDF_NO_EVENT_CALLBACK初始化驱动标志3设置WdfDriverInitNoDispatchOverride表示框架不能拦截IO直接发给驱动的Irps4创建WDFDriver对象5初始化一个包装句柄(WrapperHandler)6填写小端口特征7注册小端口其中因为要保护全局变量所以需要有一个锁另外需要有一个链表储存需要的信息所以要初始化它们8小端口驱动的Adapter结...

2020-06-10 14:45:48 900

原创 NDIS小端口驱动NDISEdge学习一——小端口驱动的应用和概述

小端口驱动流程1.填写小端口特征,这些特征其实就是一系列回调函数2.小端口驱动的注册3.小端口驱动的初始化4.填写请求设置、查询和发送、接收包等回调函数

2020-06-10 11:02:09 490

原创 NDIS协议驱动学习四——绑定的解绑

1解除绑定使用的API当网卡拔出时,协议驱动会解除与这块网卡的绑定解除绑定调用的内核API是NdisCloseAdatper

2020-06-10 10:18:57 176

原创 NDIS协议驱动学习三——协议与网卡的绑定

协议与网卡的绑定协议与网卡之间的绑定和之前章节中设备对象之间的绑定不同一般来说协议和网卡的绑定不是一对一的,而是一对多的,同一个协议是会在同一台主机的所有网卡生效。当然一张网卡也可以绑定不同的多个协议,但是实际上这是没有任何意义的,因为一般来说一个数据包只会被一个协议处理。这一节我们的主要学习对象是以下两个回调函数protocolChar.BindAdapterHandler = NdisProtBindAdapter;protocolChar.UnbindAdapterHandler

2020-06-09 17:23:30 869

原创 NDIS协议驱动学习二——协议驱动DriverEntry

1生成控制设备1.1DriverEntry函数原型NTSTATUSDriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath );/*Routine Description: Called on loading. We create a device object to handle user-mode requests on, and regi...

2020-06-09 13:30:02 579 1

原创 NDIS协议驱动学习一——协议驱动架构

以下是《寒江独钓》NDIS相关章节的学习笔记一、协议驱动架构1.以太网包和协议驱动1.1以太网包结构左边是低地址,右边是高地址传输层发送TCP/UDP包然后在网络层再加上IP信息封装成IP包,协议又把IP包封装成以太网包发送出去,这些操作都是协议驱动做到的。但是协议驱动难以干预其他应用程序接受或者发送包,所以一般不用于防火墙。1.2NDIS网络驱动NDIS是NetWorkDriver Interface Specification(网卡驱动接口标准)的简写,从名字上可以...

2020-06-09 10:48:34 946

原创 驱动程序或注册表永久关闭Microsoft Edge

最近在参与公司一个PDF后缀名保护的驱动项目,这个驱动在win7上能稳定的保护.pdf后缀文件使用我们自己设定的PDF阅读器,而不会被其他PDF阅读器肆意篡改关联。但是有意思的是,在win10上这个驱动并不能起到保护作用,其原因是win10系统自带了MicrosoftEdge这个“流氓软件”,之所以叫它“流氓软件”主要有两个原因。其一:功能鸡肋,该软件能打开.html、.pdf等后缀格式文件,但是打开网页的话,被Chrome各方面碾压,而且国内估计有90%的用户都不会使用Edge浏览网页。其二.

2020-06-02 09:47:55 3201 1

原创 windows驱动编程中的入口函数DriverEntry

1 入口函数的定义NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)这个函数的返回值是一个NTSTATUS类型,这个返回值的宏定义在ntstatus.h这个头文件中2参数PDRIVER_OBJECT它代表的是windows中的一个指向驱动对象的指针,前面的P就是Pointer的意思,这个驱动对象对应的就是我们要操作的.sys驱动这个驱动对象是Wi.

2020-05-28 09:54:43 1181

原创 windows驱动编程中的DO_DIRECT_IO和DO_BUFFERED_IO标志位

在学习《寒江独钓》这本书第3章的时候,书上说虚拟绑定设备需要拷贝真实设备对象的标志位,所以什么是标志位PDEVICE_OBJECT pDo;pDo->Flags;DO_DIRECT_IO和DO_BUFFERED_IO是什么标志位?在MSDN对DEVICE_OBJECT的介绍中有下面一段话:MSDN-DEVICE_OBJECTDO_BUFFERED_IO or DO_DIRECT_IOSpecifies the type of buffering that is used b

2020-05-27 16:56:32 1169

原创 内核编程常用API函数

编写内核程序的时候,尽量使用内核API,虽然类似于wcscpy、memcpy等函数也可以用,但这些函数没有长度的检查,很容易发生溢出错误,应该避免使用。主要的函数前缀有:Rtl-, Io-, Ke-, Zw-, Nt-, Ps-等。有以下几类:Ex系列--分配内存,获取互斥体等:ExAllocatePool,分配内存ExFreePool,释放内存ExAcquireFastMutex获取一个快速互斥体ExReleaseFastMutex释放一个快速互斥体ExRai...

2020-05-26 10:53:43 627

原创 寒江独钓第3章——串口过滤

一、过滤的概念:  过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真是驱动程序,就加入了新的功能。1.1 设备绑定的内核API  进行过滤的最主要的方法是对一个设备对象(Device Object)进行绑定。通过编程可以生成一个虚拟设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备。  在WDK中,有多个内核API能实现绑定的功能。以下三个绑定API是

2020-05-25 16:22:39 319

原创 使用openSSL和开源httplib库搭建本地https代理服务器及https客户端

第一部分原理及环境搭建参考httplib库原理httplib搭建简单服务器与浏览器交互httplib GitHub1.0certmgr证书管理工具该项目本部分需要实现本地客户端与远端服务器进行通信(例如国外网站),那么如果直接进行Socket连接将会非常慢或者撞墙,那么这个时候考虑使用本地客户端先与本地代理服务器进行通信,然后本地客户端每次访问一次URL地址,都需要将证书添加到受信任的根证书颁发机构,不然证书以及私钥对不上服务器将不允许访问。查看证书可以通过cmd命令行certm..

2020-05-21 10:42:38 4655 1

原创 利用OpenSSL生成证书时出现问题(已解决)

创建Server证书请求出现错误2604:error:08064066:object identifier routines:OBJ_create:oid exists:crypto\objects\obj_dat.c:698: error in req创建Client证书请求出现错误16524:error:08064066:object identifier routines:OBJ_create:oid exists:crypto\objects\obj_dat.c:698:error in

2020-05-15 15:24:44 3354 2

原创 应用层R3程序以及内核R0程序实现获取时间功能

1.R3应用层windows下有专门的API获取系统时间以及本地时间通过调用GetLocalTime以及GetSystemTime函数原型:void GetSystemTime( LPSYSTEMTIME lpSystemTime);void GetLocalTime( LPSYSTEMTIME lpSystemTime);https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-g

2020-05-13 19:04:40 562

原创 HANDLE HINSTANCE HWND等句柄的区别

HINSTANCE是应用程序实例句柄,HWND是窗口对象句柄,HANDLE是任意对象的句柄,CWnd是MFC中的窗口类。MSDN里面对于HINSTANCE的解释是"handletoaninstance"就是说是一个instance的句柄。而对instance的解释是"Anobjectforwhichmemoryisallocatedorwhichispersistent."占有内存的一个对象。对于HWND的解释是“Handletoawindow.”而对windo...

2020-05-13 16:25:29 336

原创 重写windows系统HASH算法

1.首先Win+R输入Regedit打开注册表编辑器2.假设我们要看pdf格式的后缀应用程序的注册表路径就是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdfUserChoice下的Hash是win10特有的校验值,防止第三方修改的微软秘密算法,win10经常弹出的默认程序出错就是这里的Hash出了问题。3.我们通过逆向方法直接从汇编语言逆向出了微软的HASH算法,但是是从二

2020-05-13 15:28:44 795 1

windows内核开发.pdf

windows内核驱动开发,原书的环境是Visual Studio 2005+Windows Vista,所以在编译的时候需要设置相应的SDK

2020-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除