自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 Fuzz学习笔记(二)—— TrapFuzzer环境搭建

TrapFuzzer 是一个基于断点的覆盖率模糊测试工具,它专为大型和复杂的软件设计,如果使用动态二进制检测工具,速度会很慢。TrapFuzzer的特点是通过IDA获取代码中的基本块,从而对每个基本块进行插桩并获取覆盖率,目前仅支持x86架构。

2023-07-19 14:31:37 849 1

原创 Windows x64内核学习笔记(七)—— Patch Guard(1)基本概念

Patch Guard(简称PG)是Windows x64系统中用于保护内核代码完整性和安全性的保护机制,能够防止任何不受信任的代码或驱动程序修改内核代码,从而防止系统破坏和恶意软件的传播。Patch Guard在系统启动时进行验证,并在系统运行过程中定期执行检查以确保内核代码的完整性。如果发现任何不正确的修改,Patch Guard会使系统蓝屏并重启系统以确保安全性,蓝屏代码为0x109。

2023-06-02 09:53:04 2188

原创 eBPF学习笔记(二)—— eBPF开发工具

本篇记录对bpftrace、BCC、libbpf等eBPF常用开发工具的基本使用。

2022-11-14 15:32:43 2831 2

原创 eBPF学习笔记(一)—— eBPF介绍&内核编译

本篇将介绍eBPF技术,以及如何编译高版本Linux内核源码中的eBPF示例代码并用其编写自定义例程。

2022-11-11 14:40:02 3620 1

原创 Duilib学习笔记(一)—— 环境搭建

使用Visual Studio 2019搭建Duilib环境小结。

2022-10-26 15:53:26 1674 1

原创 2022网刃杯CTF - REVERSE - squid

2022网刃杯CTF - REVERSE - squid附件下载一、信息搜集1. 基本信息2. 字符串信息3. 运行3.1 第一次运行3.2 第二次运行3.3 第三次运行二、解题思路1. 解包2. 修复pyc文件头3. pyc反编译4. 分析PYZ-00.pyz参考资料附件下载squid 密码: ubgs一、信息搜集1. 基本信息2. 字符串信息根据字符串信息,初步可以判断是pyinstaller打包的ELF程序。3. 运行注意:运行时千万不要和其他文件放在同一个文件夹!!!注意:运行

2022-04-25 10:22:03 411

原创 Windows x64内核学习笔记(六)—— LFENCE&CFG

Windows x64内核学习笔记(六)—— 硬件漏洞补丁&CFG预测执行实验一:理解预测执行幽灵漏洞LFENCECFG_guard_dispatch_icall参考资料预测执行众所周知,CPU的运行速度是非常快的,每秒能执行百千万条指令,而指令是从哪里来的呢,当然是从内存中读取的。由于内存的运行效率低于CPU,就导致了一个问题,即CPU访问内存的速度远大于内存访问CPU的速度。那么,应该怎么做,才能将CPU的性能尽可能利用起来呢?CPU处理一条指令大致可以分为四个阶段:读取指令、翻译指令

2022-03-09 14:09:03 1605

原创 Windows x64内核学习笔记(五)—— KPTI(未完待续)

Windows x64内核学习笔记(五)—— KPTIKPTI实验一:构造IDT后门并读取Cr3实验二:访问KVASCODE区段实验三:访问TEXT区段参考资料KPTI描述:KPTI(Kernel page-table isolation)即内核页表隔离机制。在学习SMEP&SMAP两个标志位时,我们成功通过将这两个标志位的值置0以达到让处于内核权限的CPU拥有读写和执行用户代码的权限,但实际上,只有内核模块的KVASCODE区段范围的地址是可读的,正是因为x64模式拥有内核页表隔离机制。

2022-03-04 17:40:55 1746 9

原创 Windows x64内核学习笔记(四)—— 9-9-9-9-12分页

Windows x64内核学习笔记(四)—— 9-9-9-9-12分页前言9-9-9-9-12分页实验一:线性地址转物理地址页表基址PTE to PXE实验二:通过页表基址定位各级页表的物理页参考资料前言在学习VT虚拟化技术的EPT物理地址转换时,我们简单提到过9-9-9-9-12分页的概念,即支持48位物理地址转换。9-9-9-9-12分页描述:随着计算机技术的发展,64位系统逐渐占据主流地位,那么也就表示CPU的最大寻址范围为64位。但实际上,CPU实际使用只使用了其中的48位用于寻址,寻址方式

2022-03-02 12:44:32 4025

原创 Windows x64内核学习笔记(三)—— SMEP & SMAP

Windows x64内核学习笔记(三)—— SMAP & SMEP参考资料参考资料bilibili周壑:x64内核研究系列教程

2022-02-28 18:30:41 2965 2

原创 Windows x64内核学习笔记(二)—— IA-32e模式

Windows x64内核学习笔记(二)—— IA-32e模式IA-32e模式模式检测特性强制平坦段任务切换中断门描述符FS / GS参考资料IA-32e模式描述:IA-32e是IA-32模式的扩展,它是一种状态,其内核为64位,用户可以是32位,也可以是64位。当在64位CPU中安装32位操作系统时,内核和用户都是32位的,这种状态叫做Legacy模式。模式检测描述:如果IA32_EFER MSR(下标为0xC0000080)寄存器的值第八位为1,说明当前系统处于IA-32e模式。特性强

2022-02-24 17:51:40 3358

原创 Windows x64内核学习笔记(一)—— 环境与配置

Windows x64内核学习笔记(一)—— 环境与配置前言之前,跟着海哥学习了windows内核的一些机制,包括保护模式,异常处理,消息机制等等,使用的环境是XP系统。但是,在实际工作中,面对需要用到x64内核相关的内容时,依旧会感到茫然无措,毕竟脑中的知识只局限在32位内核。随着时代发展,64位系统未来必将成为主流,但苦于市面上关于x64的教程非常少,因此一直没有机会系统化学习。前段时间才发现周壑老师出了一套名为「x64内核研究」的教程,不得不说周壑老师真是太牛了。

2022-02-24 14:52:27 2269

原创 Intel VT学习笔记(九)—— EPT应用示例

Intel VT学习笔记(九)—— EPT应用示例内存保护EPT violation代码实现参考资料内存保护描述:尝试使用EPT将一块特定的物理内存保护起来。先来选择一块物理地址,那么这里就跟周壑老师一样,选择「Page Fault」函数所在的物理地址。首先使用PCHunter看一下具体的物理地址是多少:然后用WinDbg直接查看对应的物理地址:可以看到「Page Fault」函数的物理地址是0x541450,即所属的物理页为0x541000。那么,能不能让Guest能够执行它,但是不能够

2022-02-23 15:53:41 2093

原创 Intel VT学习笔记(八)—— 开启EPT

Intel VT学习笔记(八)—— 32-bit分页模式启用EPT要点回顾要点回顾在上一篇中,我们学习了什么是EPT模式,以及EPT模式是如何在GPA和HPA之间进行转换的。在本篇,我们即将学习的是32-bit分页模式(10-10-12分页)下如何开启EPT。在讲解正题之前,周壑老师抛出了几个小问题。问题一:为什么在退出VT模式后,使用PCHUNTER查看GDT表会蓝屏?问题二:进入VT模式时通过EFLAGS关闭了外部中断(IF位清零),切换到HOST时需要再手动关闭一下吗?这里我们就直接说答

2022-02-22 16:42:21 2089

原创 Intel VT学习笔记(七)—— EPT物理地址转换

Intel VT学习笔记(七)—— EPT物理地址转换要点回顾EPT支持检测参考资料要点回顾在上一篇中,已经初步实现了最小VT框架,但实际上还有许多问题需要解决。在最小VT框架中,我们仅处理了三个退出码:#define EXIT_REASON_CPUID 10#define EXIT_REASON_VMCALL 18#define EXIT_REASON_CR_ACCESS 28要是想开发一个成熟的VT框架,需要处理的

2022-02-21 16:54:30 1603 1

原创 Intel VT学习笔记(六)—— VM-Exit Handler

Intel VT学习笔记(六)—— VM-Exit HandlerReutrn To DriverEntryVM-Exit HandlerExternal interruptI/O instructionControl-register accessesReutrn To DriverEntry描述:当开启VT后,就可以从DriverEntry中返回了,但应该怎么做呢?NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING reg_pa

2022-02-13 15:17:16 2386

原创 Intel VT学习笔记(五)—— 调试技巧

Intel VT学习笔记(五)—— 调试技巧要点回顾INT 3失效调试技巧参考资料要点回顾在上一篇中,我们主要学习了如何填写Guest state fields的各项字段,以及如何对错误码进行排查,并最终成功执行了Guest代码。在GuestEntry中,我们通过执行VMCALL指令触发VM-Exit,而没有用INT 3指令直接中断,其中是有原因的。在本篇,我们将解释为什么没有在GuestEntry中使用INT 3中断,以及相关的调试技巧。INT 3失效将GuestEntry修改为以下代码:v

2022-02-11 10:15:24 1439

原创 Intel VT学习笔记(四)—— VMCS(下)

Intel VT学习笔记(四)—— VMCS(下)要点回顾VM-Exit InformationGuest state fields代码实现参考资料要点回顾在上一篇中,我们了解了如何设置VMCS字段,以及如何通过错误码排查错误字段,并最终成功执行了VMLAUNCH指令,进入了guest,但是由于由于目前并未填充Guest state fields,因此直接从Guest中跳出到Host中。本篇将学习如何排查相关错误以及如何填写Guest域信息。VM-Exit Information描述:如果执行虚拟

2022-02-10 14:52:46 1246

原创 Intel VT学习笔记(三)—— VMCS(上)

Intel VT学习笔记(三)—— VMCS前言VMCS参考资料前言在上一篇笔记中,我们学习了如何进入VMX模式,接下来,我们将学习与虚拟机开始交互前需要做的一些准备工作VMCS参考资料VT虚拟化架构编写视频教程①~⑥课周鹤《VT技术入门》系列视频教程github项目:VT_Learngithub项目: HyperPlatformIntel开发手册 卷3:Chapter 23 ~ Chapter 33x86内部函数列表...

2022-02-09 17:26:28 3324

原创 Intel VT学习笔记(二)—— VMXE&VMXON

Intel VT学习笔记(二)—— VMXONVT流程开锁VMXON参考资料VT流程可以参考Intel开发手册第3卷图23-1。周壑大大将VT过程总结为以下示意图:并将这个流程比喻为:开锁(将Cr4的VMXE位置1)开柜门(VMXON)拔电源(VMCLEAR,相当于初始化)选中机器(VMPTRLOAD,选择需要处理的guest机)装机(设置VMCS,通过VMWRITE)开机(VMLAUNCH)拔电源(依然是VMCLEAR)开柜门(VMXOFF)开锁(将Cr4的VMXE位置0)

2022-02-09 09:49:12 3320

原创 Intel VT学习笔记(一)—— 基础知识&支持检测

Intel VT学习笔记(一)—— 基础知识&支持检测VT简介VT分类VT作用HypervisorVT实现支持检测cpuidIA32_FEATURE_CONTROL MSRCr0 & Cr4代码实现参考资料VT简介VT,就是虚拟化技术(Virtualization Technology)的缩写。Intel VT就是指Intel的虚拟化技术。这种技术简单来说就是让可以让一个CPU工作起来就像多个CPU并行运行,从而使得在一台电脑内可以同时运行多个操作系统。只有部分Intel的CPU才支持

2022-02-05 16:03:40 6882

原创 glibc-2.23学习笔记(二)—— free部分源码分析

glibc-2.23学习笔记(二)—— free部分源码分析_libc_free_int_free函数定义局部变量startfast bins部分unsorted bins部分mmap部分_libc_freevoid__libc_free (void *mem){ mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ /* 判断__free_hook中是否有值,若有值则将其

2021-12-10 20:34:44 1168

原创 glibc-2.23学习笔记(一)—— malloc部分源码分析

glibc-2.23学习笔记(一)—— malloc部分源码分析搭建Glibc源码调试环境1.下载并解压glibc源码sudo apt-get install glibc-sourcecd /usr/src/glibcsudo tar xvf glibc-2.23.tar.xz 2.配置gdb打开gdb配置文件sudo vim ~/.gdbinit在首行加入以下内容

2021-11-30 18:51:36 2046

原创 Windows软件调试学习笔记(七)—— 单步步入&单步步过

软件调试学习笔记(七)—— 单步步入&单步步过单步步入设置单步异常处理单步异常实验1:单步异常的设置与处理单步步过实现思路实验2:实现单步步过单步步入描述:单步步入的实现依赖于单步异常。当我们需要观察每一行代码(包括函数内部的代码)执行之后寄存器与内存的变化,通常会采用单步步入。当使用单步步入时,可采用在下一行代码的首字节设置INT 3断点的方式实现。CPU为我们提供了一种更为方便的方法,即使用陷阱标志位(TF位)。设置单步异常TF位:置1处理单步异常单步产生的异常与硬件断

2021-08-11 16:52:18 2146 4

原创 Windows软件调试学习笔记(六)—— 硬件断点

软件调试学习笔记(五)—— 硬件断点硬件断点设置硬件断点触发硬件断点处理硬件断点硬件断点描述:与软件断点与内存断点不同,硬件断点不依赖被调试程序,而是依赖于CPU中的调试寄存器。调试寄存器有7个,分别为Dr0~Dr7。用户最多能够设置4个硬件断点,这是由于只有Dr0~Dr3用于存储线性地址。其中,Dr4和Dr5是保留的。思考:假如在Dr0寄存器中写入线性地址,是否所有线程都会受影响?答案:不对,每个线程都拥有一份独立的寄存器,切换线程时,寄存器的值也会被切换。设置硬件断点1)Dr0

2021-08-10 19:13:04 4291

原创 Windows软件调试学习笔记(五)—— 软件断点&内存断点

软件调试学习笔记(五)—— 软件断点调试的本质软件断点分析INT 3执行流程调试的本质描述:1)调试的本质是触发异常与调试器接管异常的过程。2)不论是软件断点,硬件断点还是INT 3断点,本质都是触发异常。软件断点当使用调试器在任意代码位置设置断点时,本质上是将当前代码位置的字节码改为0xCC,对应的汇编指令为INT 3。调试器为了界面的美观,不会直接在反汇编界面将修改后的数据显示出来。可以使用WinHex查看内存数据进行验证。软件断点执行流程:被调试进程:1)CPU检测到INT

2021-08-05 19:55:44 2021

原创 Windows软件调试学习笔记(四)—— 异常的处理流程

软件调试学习笔记(四)—— 异常的处理流程要点回顾异常的处理流程要点回顾调试事件有多重类型、例如DLL加载、进程创建、线程创建等等。其中最关键的调试事件是”异常“。在调试过程中,不论是软件断点、硬件断点还是INT 3断点,都是通过异常来实现的。异常的处理流程流程图:...

2021-08-05 15:13:36 1764

原创 Windows软件调试学习笔记(三)—— 调试事件的处理

软件调试学习笔记(三)—— 调试事件的处理要点回顾调试事件的处理实验一:实现简单调试器(创建进程)实验二:分析异常来源实验三:实现简单调试器(附加进程)实验四:分析NtDebugActiveProcess总结要点回顾当调试器与被调试进程建立连接后,调试器与被调试进程关系如下图所示被调试进程产生调试事件时,会有专门的API对调试事件进行捕获,并写入调试事件链表当中。调试器不断检索调试事件链表,不断从调试事件链表中取出调试事件并进行处理。调试事件的处理调试器调试目标进程步骤:关联(创建进程

2021-07-29 17:45:43 1280

原创 Windows软件调试学习笔记(二)—— 调试事件的采集

软件调试学习笔记(二)—— 调试事件的采集要点回顾调试事件的种类调试事件采集函数例:分析PspUserThreadStartup例:分析PspExitThread总结要点回顾调试器与被调试进程通过DEBUG_OBJECT结构体建立联系。DEBUG_OBJECT中有一个链表成员,用于记录所有调试事件。当被调试进程产生调试事件时,调试器从链表中取出调试事件进行处理。思考:是否所有的调试事件都会被记录到链表中?答案:调试事件有不同种类,只有几个最关键的种类才会被记录到链表中,例如被调试进程进行文

2021-07-28 17:34:01 686

原创 Windows软件调试学习笔记(一)—— 调试对象

软件调试学习笔记(一)—— 调试对象

2021-07-01 18:55:15 1076

原创 Windows消息机制学习笔记(四)—— 内核回调机制

消息机制学习笔记(四)—— 内核回调机制要点回顾内核调用实验1:理解内核调用第一步:编译并运行以下代码第二步:修改窗口过程函数,重新运行结论KeUserModeCallback分析KeUserModeCallback要点回顾1)GetMessage不仅能够取出消息,还能处理SentMessagesListHead队列中的消息2)DispatchMessage()用于处理其它队列中的消息。内核调用描述:窗口过程函数除了会在消息循环中被调用,一些0环的代码也可以直接发起调用。例如:窗口初始化时、窗口

2021-06-24 18:23:24 1089 2

原创 Windows消息机制学习笔记(三)—— 消息的接收与分发

Windows消息机制学习笔记(三)—— 消息的接收要点回顾消息循环消息队列的结构GetMessage实验:理解GetMessage要点回顾1)一个GUI线程包含一个消息队列普通线程↓GUI线程↓THEWAD.W32THREAD↓THREADINFO↓消息队列2)一个线程可以包含多个窗口,所有窗口共享一个消息队列_WINDOW_OBJECT //0环创建↓PTHREADINFO pti //所属线程↓WNDPROC lpfnWndProc //窗口过程(窗口回调函数)

2021-06-23 14:53:13 1083

原创 硬编码学习笔记(二)—— 经典变长指令

硬编码学习笔记(二)—— 经典变长指令前言指令结构符号说明寻址符号操作数符号上标符号One-Byte Opcode Map变长指令ModR/M例:0x88例:0x89例:0x8A例:0x8BSIB例:88 84 48 78 56 34 12例:89 84 84 78 56 34 12Opcode Extension Tables例:80 65 08 FFInstruction Prefixs段前缀操作指令前缀:修改地址默认长度操作指令前缀:修改默认寻址方式前言本次学习仅基于intel x86模式指

2021-04-01 18:38:35 2166

原创 硬编码学习笔记(一)—— 经典定长指令

硬编码学习笔记(一)—— 经典定长指令前言指令结构符号说明寻址符号操作数符号上标符号One-Byte Opcode Map经典定长指令:修改寄存器0x40~0x470x48~0x4F0x50~0x570x58~0x5F0x90~0x970xB0~0xB70xB8~0xBF经典定长指令:修改EIP0x70~0x7F0x0F80~0x0F8F0xE00xE10xE20xE30xE80xE90xEA0xEB0xC20xC30xCA0xCB前言本次学习仅基于intel x86模式指令结构描述:对于任何一

2021-04-01 13:53:47 1199

原创 Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用

WinAFL学习笔记(一)—— WinAFL环境搭建环境配置安装步骤1)安装git2)安装CMake3)编译dynamorio编译32位编译64位4)编译winafl编译32位编译64位测试测试dynamorio测试winafl环境配置工具版本链接windows10Visual Studio2019https://visualstudio.microsoft.com/zh-hans/vs/git2.31.0https://gitscm.com/downloa

2021-03-24 17:35:05 5666 7

原创 pwn学习总结(五) —— ret2dl_runtime_resolve(待补充)

pwn学习总结(十) —— ret2_dl_runtime_resolve一、程序示例二、Section信息.dynamic.dynstr.dymsym.rel.plt延迟绑定一、程序示例第一步:编译并运行以下代码#include<stdio.h>int main(){ char buf[]="Hello World!\n"; write(1, buf, strlen...

2021-03-23 14:18:04 432

原创 恶意代码分析(一)

病毒分析(一)样本来源样本概况分析环境分析步骤一、初步分析二、调试分析样本来源https://www.52pojie.cn/thread-1377686-1-2.html样本概况样本信息Value样本名称免费外纪.exe样本大小4.62MB(4,853,850 Byte)MD5bcfc56704ea9b62650bec0349532b7d7SHA1176fbfb56e401f1043532377c1b67bd207c32bb9时间戳28/10/2

2021-03-23 14:10:19 1246

原创 Windows消息机制学习笔记(二)—— 窗口与线程

Windows消息机制学习笔记(二)—— 窗口与线程前言前言一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com二、海东老师牛逼!

2021-01-29 10:21:47 822

原创 Windows消息机制学习笔记(一)—— 消息队列

Windows消息机制学习笔记(一)—— 消息队列前言基本概念实验一:使用代码画出最简单窗口第一步:编译并运行以下代码第二步:查看运行结果第三步:使用其它窗口对其进行覆盖,观察效果前言一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com二、海东老师牛逼!基本概念接触过编程的人,或多或少用到过消息机制,但大多数人(包括我自己)只是知道相关API的基本用法,却不知道它是如何实现的从本章起,我们将带着以下几个问题一起来学习消息机制:什么是窗口句柄?在哪里?有什么用?

2021-01-19 14:19:13 766

原创 Windows内存管理学习笔记(三)—— 无处不在的缺页异常

Windows内存管理学习笔记(三)—— 无处不在的缺页异常前言缺页异常实验一:设置虚拟内存前言一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com二、海东老师牛逼!缺页异常描述:当CPU访问一个地址,其PTE的P位(页面有效位)为0,此时会产生缺页异常在windows中,缺页异常是时刻在发生的PTE结构(10-10-12分页):假设:当我们的物理内存大小只有2MB时,当我们需要用到某个物理页的时候,将对应物理页的P位置1,当我们不再需要使用该物理页时,

2021-01-18 16:31:39 1309

空空如也

空空如也

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

TA关注的人

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