![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
windows
kernweak
日子越来越有判头了
展开
-
主机安全笔记
主机安全笔记,仅供自己平时复习。原创 2021-08-19 00:21:29 · 271 阅读 · 0 评论 -
《反勒索软件开发笔记》(三)导入表处理
DLL导出表处理防止别人猜到函数功能,所以要对导出表函数名进行处理,一般就是使用宏定义代替函数名,然后后面使用宏定义代替原有函数名,如下:// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLTEST_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含...原创 2020-02-12 19:23:51 · 246 阅读 · 1 评论 -
《Windows内核原理与实现笔记》(五)Windows微内核中进程和线程的数据结构KTHREAD,KPROCESS
Windows中进程和线程的数据结构Windows内核中的执行体层负责各种与管理和策略相关的功能,而内核层(或微内核)实现了操作系统的核心机制。进程和线程在这两层上都有对应的数据结构。内核层的进程和线程对象首先看(微)内核层的数据结构,这是进程和线程最为基本的数据结构,分别名为KPROCESS和KTHREAD。KPROCESS的定义(见base\ntos\inc\ke.h)t...原创 2020-01-09 17:54:04 · 1384 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(四)Windows进程线程概念
进程概念进程是各种资源的容器,它定义了一个地址空间作为基本的执行环境;而线程是一个指令执行序列,它可以直接访问所属进程中的资源。每个进程都至少有一个线程,而每个线程在任一时刻都一定属于某一特定的进程。多进程模型把时间细分,然后在某个适当的时间粒度上轮流执行这些任务,让每个任务都有机会被执行到。只要在人所能感知的时间粒度上(差不多是100~200ms)每个任务都有机会做一点事情,用户就会...原创 2020-01-09 15:13:52 · 331 阅读 · 0 评论 -
intel汇编几种跳转的区别
几种跳转指令和对应的机器码0xE8CALL后面的四个字节是地址0xE9JMP后面的四个字节是偏移0xEBJMP后面的二个字节是偏移0xFF15CALL后面的四个字节是存放地址的地址0xFF25JMP后面的四个字节是存放地址的地址比如想实现循环跳转当前指令,就可以是eb fe,或者e8 fb ff ff f...原创 2020-01-03 16:48:18 · 2626 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(三)Windows引导过程
内核加载在Intel x86系统上,Windows操作系统获得控制首先从硬盘的主引导记录(MBR,MasterBoot Record)开始,Windows Setup程序在安装Windows时填充MBR(其他的磁盘管理程序也可能填充MBR)。MBR包含代码和数据,其代码称为引导代码,在系统引导时首先获得控制;MBR中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型。当...原创 2019-12-26 21:52:21 · 852 阅读 · 0 评论 -
《反勒索软件开发笔记》(二)服务程序排错技巧
服务程序排错技巧调试信息输出 如OutputDebugString通常在开发或者测试使用。行时日志考虑单日志或者多日志文件异常捕获try expect内嵌汇编,栈内存被覆盖会没用异常捕获minidump如SetUnhandledExceptionFilter异常捕获,(运行时库?)奔溃不会捕获,用minidump传给服务器。因为服务管理器定时查服务管理...原创 2019-12-25 22:01:41 · 150 阅读 · 0 评论 -
《反勒索软件开发笔记》(一)vs常见问题与使用技巧,服务程序标准框架
下断点时候当前代码下断代码不匹配在工具->选项->调试->常规去掉要求源文件与原始版本完全匹配在重新编译时候重新生成表一些错,比如无法贷款数据库等先清理解决方案,在重新生成,如果还不行,就关闭项目,删除项目的.ncb文件,然后重新生成。杂项注意相对路径,另外做产品一般使用Unicode,不要用多字节,代码生成一步用MT或MTd。优化产品级的项目尽量避免...原创 2019-12-25 20:58:21 · 257 阅读 · 0 评论 -
《Windows内核原理与实现笔记》(二)注册表和配置管理器,事件追踪,安全性管理
注册表和配置管理器Windows系统很多组件都是可以配置的,内核组建通常支持一些参数,甚至有些完全依赖于系统配置信息。例如I/O管理器和即插即用管理器在初始化阶段根据系统设置来例句和加载设备驱动程序。Windows操作系统提供了一个称为“注册表”的中心存储设施来作为系统的配置和管理中心。应用程序和捏合通过访问注册表来读写设置Windows同时提供API供访问注册表,API接到注册表访问请求,转...原创 2019-12-23 21:01:26 · 1268 阅读 · 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 · 426 阅读 · 0 评论 -
Mac头,ip头,tcp头简介
MAC帧头定义MAC头有14个字节,尾4个字节typedef struct _MAC_FRAME_HEADER{char m_cDstMacAddress[6];//目的mac地址char m_cSrcMacAddress[6];//源mac地址short m_cType; //上一层协议类型,如0x0800代表上一层是IP协议,0x0...原创 2019-12-19 22:56:17 · 1239 阅读 · 0 评论 -
VS2017编译驱动遇到LNK2019 unresolved external symbol __CheckForDebuggerJustMyCode
用vs2017编译驱动遇到 Error LNK2019 unresolved external symbol __CheckForDebuggerJustMyCode referenced in function DriverEntry Hellodrv 如下图:解决方案:Configuration Properties" -> "C/C++" -> "...原创 2018-08-30 21:24:52 · 2439 阅读 · 0 评论 -
Windows等待唤醒机制
临界区并发是指多个线程在同时执行: 单核(是分时执行,不是真正的同时) 多核(在某一个时刻,会同时有多个线程再执行) 同步则是保证在并发执行的环境中各个线程可以有序的执行 临界区:一次只允许一个线程进入直到离开DWORD dwFlag = 0; //实现临界区的方式就是加锁 //锁:全局变量 进去加一 出去减一if(dwFlag ==...原创 2018-09-04 10:33:26 · 1874 阅读 · 1 评论 -
Windows消息机制
消息队列在哪消息队列进程-->消息队列消息队列-->鼠标消息队列-->键盘消息队列-->其他进程的消息消息队列放在哪里这个模式怎么区分消息属于谁,是通过一个专门进程处理消息,这样问题是有跨进程通信太费时。Windows不是这样,Linux是这样。微软是把消息队列存到了0环。 怎么找到消息结构体,是KThread(任何一个线程都有个内核结构...原创 2018-09-04 23:22:17 · 2726 阅读 · 1 评论 -
保护模式之段相关的笔记
段寄存器简介 段寄存器 Selector Attribute Base Limit ES ++0023++ 可读可写 0 0xFFFFFFFF CS ++001B++ 可读可执行 0 0xFFFFFFFF SS ++0023++ 可读可写 0 0xFFFFFFFF DS ++0023+...原创 2018-09-04 23:24:10 · 427 阅读 · 0 评论 -
保护模式之页相关的笔记
保护模式之页相关的笔记分页物理地址如下指令: MOV eax,dword ptr ds:[0x12345678] 其中,0x12345678 是有效地址 ds.Base + 0x12345678 是线性地址 物理地址在哪里?CR3寄存器是所有寄存器里面,唯一一个存储物理地址的寄存器,其他都是线性地址。 每个进程都有一个CR3,(准确的说是都一个CR3的值,CR...原创 2018-09-05 11:16:14 · 806 阅读 · 0 评论 -
APC异步过程调用
线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人怎么可能控制它呢? 举个极端的例子:如果不调用API,屏蔽中断,并保证代码不出现异常,线程将永久占用CPU,何谈控制呢?所以说线程如果想“死”,一定是自己执行代码把自己杀死,不存在“他杀”这种情况! 那如果想改变一个线程的行为该怎么办呢? 可以给他提供一个函数,让它自己去调用,这个函数就是APC(Asyncro...原创 2018-09-03 21:13:45 · 2433 阅读 · 0 评论 -
KPCR学习
KPCR:CPU控制区(Processor Control Region)KPCR介绍KPCR相当于一个副本,存储着线程相关的一些重要信息,这样CPU在处理时就不用查线程了。 1) 当线程进入0环时,FS:[0]指向KPCR(3环时FS:[0] -> TEB)2) 每个CPU都有一个KPCR结构体(一个核一个)3) KPCR中存储了CPU本身要用的一些重要数据:GDT、...原创 2018-09-03 21:25:41 · 1796 阅读 · 0 评论 -
object_Hook相关知识
前置知识首先,分析OBJECT(内核对象)先找到一个进程内核对象的地址,使用!process 0 0查看PROCESS 885de030 SessionId: 1 Cid: 0700 Peb: 7ffd9000 ParentCid: 0418 DirBase: 7f3602e0 ObjectTable: 98a8c548 HandleCount: 60...原创 2018-09-03 21:27:08 · 673 阅读 · 0 评论 -
SSDT—Hook和MDL
SSDT HOOK首先要明白SSDTHOOK就是自己再写一份函数,替换了SSDT表中的地址替换掉 如何访问系统服务表呢?SSDT 的全称是 System Services Descriptor Table,系统服务描述符表下面这个是个全局变量 kd> dd KeServiceDescriptorTable(SSDT)这个导出的 声明一下就可以使用了kd&g...原创 2018-09-03 21:28:31 · 1494 阅读 · 0 评论 -
Inline_Hook
Inline Hookjmp 到没用的地方 pushad,pushfd, 做自己的事 popfd,popad. 加上被覆盖的代码 jmp 到被覆盖代码的下一行 注意点位置的选择:<1> JMP/CALL指令至少占用5个字节<2> 绕开全局变量,因为全局变量的硬编码会随着指令变<3> 根据业务来决定在哪里HOOK:过滤参数...原创 2018-09-03 21:24:00 · 472 阅读 · 0 评论 -
WIN32编程视频的相关笔记一
编码中GB2312是利用ASIIC的127到256的两个确定一个汉字,所以不同语言不兼容,unicode只是一种编码,即所有语言符号有唯一值,而他的存储格式被分为unicode-8或者-16,即内核单元用几位,具体符号比如16的开头有个FFFE和FEFF是标志大端还是小段存储,在文本开头显示,具体存储看其的编码比如分3个段加不同的前缀,由于unicode最多四个字节存储,但有些一字节即可,所以浪费...原创 2018-09-03 21:33:19 · 396 阅读 · 0 评论 -
WIN32编程视频的相关笔记二
虚拟内存与物理内存1. 虚拟内存与物理内存关系 可以使用的内存不一定有物理页,必须申请内存了才有物理页。 物理页数量限制由内存条限制物理内存 pagefile.sys,就是用硬盘存放物理页。 私有内存的申请与释放windbg里!vad 地址,可以查看那些线性地址被占用。 线性地址分为Private和Mapped私有内存时当前物理页只归当前进程用,一...原创 2018-09-03 21:36:08 · 287 阅读 · 0 评论 -
使用NT_SUCCESS()宏判断驱动返回NTSTATUS值的原因
根据大佬的博客,首先//// Status values are 32 bit values laid out as follows://// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0// +-...原创 2018-10-18 10:22:22 · 1786 阅读 · 0 评论 -
Ring0文件操作
Ring0文件操作,文件复制,移动,删除,删除使用设置属性,路径硬编码#include <ntifs.h>#include <ntddk.h>NTSTATUS ntCreateFile(WCHAR *szFileName);NTSTATUS ntCreateDirectory(WCHAR *szDirName);NTSTATUS ntWriteFile(...原创 2018-10-25 11:32:13 · 1103 阅读 · 0 评论 -
NT驱动框架复习
下面是NT框架#include <ntddk.h>#define DEVICE_NAME L"\\device\\ntmodeldrv" //设备名device开头固定,后面随便取,一般和编译出的.sys一致,设备对象是驱动对象创建的,用来接收应用层发来的IRP请求。#define LINK_NAME L"\\dosdevices\\ntmodeldrv"//符号链接为了...原创 2018-11-07 15:47:45 · 514 阅读 · 0 评论 -
BIOS+MBR与UEFI+GPT
前天面试某公司,有道面试题,BIOS+MBR与UEFI+GPT与UEFI+GPT的区别,并说明磁盘限制大小,为什么?之前老师讲过,但是没想起来,下面总结一下:BIOS+MBRLBA(logical block address,32位),中文名称:逻辑区块地址。是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个数据区块的地址或是某个地址所指向...原创 2018-11-05 11:31:26 · 528 阅读 · 0 评论 -
堆溢出,堆喷射简介
堆简介堆上分配内存,就是比如malloc,就是从堆上把这块内存的链表,摘下来共我们使用。堆上自己是按桶的结构进行管理(一个hash表),从2^1,2^2,2^3,2^4.....,如果申请一个50字节内存,就从,2^6分配,64-50=14,有14个内存碎片。我们申请内存就是从这个内存表中把某一个节点从这个双向链表中摘掉。即Node->bp->fp=Node->fp;...原创 2018-11-21 10:02:42 · 3984 阅读 · 2 评论 -
段描述符浅谈
描述符表中存放的是段描述符,如下图所示图1-1 段描述符通用格式段描述符基本属性段描述符是GDT和LDT中的一个数据结构项,用于向处理器提供有关一个段的位置大小访问控制的信息状态信息,每个段描述符的长度是8个字节,含有3个主要字段段基地址 段限长 段属性基地址字段Base描述了一个短的起始位置,由三个部分组成一共32位,段基地址可以是0~4GB范围内的任意地址(这同实...原创 2019-04-26 12:58:20 · 1602 阅读 · 0 评论 -
段使用时相关的检查与调用门实验
段类型检查加载段选择符进入段寄存器时候CS只能存放可执行的选择符 不可读可执行不能被加载到数据段寄存器 只有可写的数据段才能加载到SS段权限检查当给段寄存器赋值,实际是从GDT中获取相应的段描述符加载到段寄存器的不可见部分。这个时候有个权限检查,有三个概念:CPL:当前代码执行权限 DPL:存在段描述符中,描述访问本段内存需要的权限 RPL:存在于段寄存器加载时的段选择子...原创 2019-04-26 13:01:21 · 269 阅读 · 0 评论 -
通过进程挂靠实现改其它进程的数据
0环下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 #include <ntifs.h>VO...原创 2019-05-02 10:38:48 · 325 阅读 · 0 评论 -
SSDT—Hook和MDL
SSDT HOOK首先要明白SSDTHOOK就是自己再写一份函数,替换了SSDT表中的地址替换掉SystemServiceTable系统服务表如何访问系统服务表呢?SSDT 的全称是 System Services Descriptor Table,系统服务描述符表下面这个是个全局变量kd> dd KeServiceDescriptorTable(SSDT)这个导出...原创 2019-05-02 10:40:26 · 484 阅读 · 0 评论 -
WIN32编程视频的相关笔记一
编码中GB2312是利用ASIIC的127到256的两个确定一个汉字,所以不同语言不兼容,unicode只是一种编码,即所有语言符号有唯一值,而他的存储格式被分为unicode-8或者-16,即内核单元用几位,具体符号比如16的开头有个FFFE和FEFF是标志大端还是小段存储,在文本开头显示,具体存储看其的编码比如分3个段加不同的前缀,由于unicode最多四个字节存储,但有些一字节即可,所...原创 2019-05-03 08:18:44 · 267 阅读 · 0 评论 -
WIN32编程视频的相关笔记二
虚拟内存与物理内存1. 虚拟内存与物理内存关系1可以使用的内存不一定有物理页,必须申请内存了才有物理页。物理页数量限制由内存条限制物理内存10pagefile.sys,就是用硬盘存放物理页。私有内存的申请与释放windbg里!vad 地址,可以查看那些线性地址被占用。线性地址分为Private和Mapped私有内存时当前物理页只归当前进程用,一个物理...原创 2019-05-03 10:57:56 · 227 阅读 · 0 评论 -
进程结构体和线程结构体
首先说明这分析的是XP系统,WIN7每个单元偏移略有差距进程结构体EPROCESS每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。PEB在3环,EPROCESS在0环。KPROCESS主要成员介绍 1234567891011121314151617181920212223...原创 2019-05-03 10:58:48 · 1137 阅读 · 0 评论 -
系统调用笔记(1)
API函数的调用过程(3环部分)Windows APIApplication Programming Interface,简称 API 函数。 Windows有多少个API? 主要是存放在 C:\WINDOWS\system32 下面所有的dll,dll里面函数都是API 几个重要的DLL Kernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数等...原创 2019-04-29 23:55:21 · 1419 阅读 · 0 评论 -
系统调用笔记(2)
API函数的调用过程(SystemServiceTable)在上中,讲到进0环后,3环的各种寄存器都会保留到_Trap_Frame结构体中,这篇我讲解如何根据系统服务号(eax中存储)找到要执行的内核函数?调用时参数是存储到3环的堆栈,如何传递给内核函数?SystemServiceTable 系统服务表系统服务表ServiceTable存了系统服务表里函数地址表(4字...原创 2019-04-29 23:57:37 · 557 阅读 · 0 评论 -
UNICODE_STRING
typedef struct _UNICODE_STRING { USHORT Length;//字节数,不是字符数,有效的字节数。 USHORT MaximumLength;//字节数,告诉系统函数最多有多少内存可用#ifdef MIDL_PASS [size_is(MaximumLength / 2), length_is((Length) / 2) ] U...原创 2019-05-24 20:00:25 · 842 阅读 · 0 评论 -
文件操作
文件的表示应用层:”c:\\hi.txt”内核:L”\\??\\c:\\hi.txt”//??实际上是个符号链接,连接的是卷设备名称->\\device\\harddiskvolume3\\hi.txtR3:设备名:L”\\\\.\\xxxDrv”R0设备名:”\\device\\xxxDrv”符号连接名:”\\dosdevices\\xxxDrv”或\\??\\xxxDrv...原创 2019-05-24 21:54:49 · 327 阅读 · 0 评论 -
注册表操作
注册表分键值对REG_BINARY 二进制 REG_DWORD 四字节 REG_EXPAND_SZ 可扩展字符串,可以引用系统变量 比如%temp% %systemroot% (ExpandEnvironmentStrings 展开%systemroot%,函数可查询系统变量 ) REG_SZ 字符串 REG_MULTI_SZ 多文本字符串 这个可...原创 2019-05-24 22:56:29 · 550 阅读 · 0 评论