自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows消息Hook简介

众所周知,Windows应用程序都是消息(事件)驱动的,任何一个窗口都能够接收消息,并对消息进行处理,处理完成后进入下一轮循环。通常情况下,程序员可以在窗口过程中处理接收到的消息,但是在一些应用中常常需要获取和处理另外应用程序的消息,而实现此类功能的技术也就本文要讨论的主题――消息拦截技术。

2024-03-27 10:17:34 876

原创 WinDbg无符号调试DriverEntry中断

在内核中,许多函数都需要进行间接调用,出于安全性考虑,避免目标地址被控制,因此不会直接CALL目标地址,而是先通过_guard_dispatch_icall检查地址合法性,并由其进行调用,如果地址合法,它的作用相当于「CALL RAX」。因此,我们在上图红色位置打下断点,等待内核执行到这里,查看RAX的地址。从正常的DriverEntry的调用栈栈中可以看到驱动加载的调用路径基本上如下所示。然后在反汇编窗口中可以发现,这里通过CFG的派遣调用方式执行了RAX指向的函数。上图中可以看到在pe文件后,又通过。

2024-03-07 16:42:46 581

原创 基于布隆过滤器的跨平台USB存储设备管控方案

U盘作为移动存储设备之一,是我们日常生活中接触最多和最常用的存储介质。正因如此,针对U盘内容的管理也因为使用场景的多样和复杂性,变得难以实现。我们的设计思路是先通过某些手段对U盘进行病毒,并在查杀完成后对U盘进行认证。在后续使用过程检测认证U盘是否被篡改以保证U盘的安全性。

2024-02-10 16:13:01 878

原创 加载符号文件

当程序突发崩溃时,当我们尝试通过core文件分析原因时,通常会遇到以下问题,那么这种情况该怎么解决呢?

2024-01-09 11:59:44 374

原创 Windows设备管理

熟悉Windows系统的都应该使用过设备管理器。设备管理器将操作系统中所有已安装的设备分类展现出来。同时提供了安装、卸载、启用和禁用的功能。那么,我们应该如何通过C++编程的方式实现这种功能呢?答案很简单,那就是使用SetupDi函数族。

2023-12-16 22:38:49 976

原创 Ext4文件系统解析(三)

前文已经讲述了如何根据索引号获取实际的文件内容。对于文件而言,到了这里已经结束了。但是对于文件夹来说,我们还需要从数据块中解析出对应的数据。而在文件系统的实现中,文件夹的实际存储方式有着两种不同的实现,经典的线性布局方式和全新的Hash树布局。

2023-12-02 22:18:32 437

原创 Ext4文件系统解析(二)

想要了解EXT文件系统的工作原理,那了解文件系统在磁盘上的分布就是必不可少的。这一节主要介绍EXT文件系统硬盘存储的物理结构。由于当前主流的CPU架构均采用小端模式,因此下文介绍均已小端模式为准。

2023-12-02 22:17:32 965

原创 Ext4文件系统解析(一)

熟悉Linux操作系统的都应该或多或少的了解或者使用过Ext4文件系统。接下来,会简单介绍Ext4文件系统的一些特性和工作原理。

2023-12-02 22:14:14 1242

原创 NTFS文件系统解析(四)

前文在非常驻属性中提及了Data Run,那么Data Run到底是什么呢?简单来说,Data Run是一个指向实际数据存储的一个固定格式的数组。通常情况下,Data Run由一组或者多组数字组成。

2023-11-05 19:03:27 256

原创 NTFS文件系统解析(三)

正如上图所示,绿色部分代表IndexEntry的头部,紧接着的红色部分和黄色部分就是去除了标准属性头之后的0x30属性,而最后的紫色部分则存储着子节点的VCN号。为了便于管理,NTFS文件系统为所有的属性定义了统一的头部结构,可以称之为属性头。对于NTFS文件系统而言,无论文件内容本身,抑或真实的文件属性,都被称之为属性。索引根节点通常由标准属性头,索引根属性头,索引属性头和索引属性组成。而由于每种属性的长度不一,因此又额外定义了常驻属性和非常驻属性。属性,这种情况下,文件的基本属性与。

2023-11-05 19:01:11 341

原创 NTFS文件系统解析(二)

但是,当一个记录的恰巧写到扇区最后2个字节时,由于扇区尾部已经写入了2个字节的更新序列号。NTFS文件系统的的工作流程主要依赖于两个部分,文件记录部分用于记录文件本身的信息,而索引部分则通过树的形式存储着文件系统的结构信息。NTFS文件系统为了保持数据的一致性,在文件和索引记录的每个扇区的最后2个字节都会写入更新序列号。| 索引记录头 | 索引头 | 索引数据 | …| 结束标志 || 文件记录头 | 属性列表 | 属性列表 |…| 结束标志 |

2023-11-05 18:52:31 162

原创 NTFS文件系统解析(一)

文件记录是一个与文件相对应的文件属性数据库,它记录了文件数据的所有属性。但是,由于Windows操作系统的封闭性,我们无法准确得知NTFS文件系统的具体实现,因此,只能通过少量的官方文档和逆向分析的方式来推导NTFS文件系统的工作流程。一个属性的偏移00H~03H处的4个字节,为该属性的类型标志,不同的属性其结构和含义各不相同。通常情况下,当需要从卷中读取文件时,只需要从根目录从查询出文件对应的逻辑簇号(LCN),再根据LCN从MFT记录读取出文件的记录即可。每个文件或者目录都对应一个或者多个文件记录。

2023-11-05 18:50:46 258

原创 默认文件系统类型的扫描方案

当然,实际上对Windows操作系统的底层调用有所了解的情况下,可以知道上述提到的函数在内核中实际上是通过调用。在linux平台上,说到目录遍历,最先想到的必然就是opendir/readdir/closedir函数。通常情况下,当需要遍历整个磁盘时,我们会选择使用系统提供的接口,或者调用标准库或者boost库中的。库的遍历方法较为简单,因此本文仅列举系统遍历接口的使用方法。函数和广度优先算法遍历目录。因此可以选择直接调用。

2023-10-24 21:50:57 54

原创 基于卷的磁盘扫描算法设计

通常会使用诸如FindFirstFile/FindNextFile(Windows),或者opendir/readdir(Linux)遍历扫描的目录。因此,我们基于磁盘逻辑卷的结构,设计基于卷的遍历算法,能有效减少磁盘IO次数,提升扫描性能。但是,当伴随文件数量变多,文件夹层次加深时,遍历算法的性能往往不尽如人意。一般情形下,由于文件数量相对较少,文件夹层次低,扫描效率相对符合预期。常规情况下,当我们扫描计算机的硬盘时,

2023-10-24 21:24:57 82

原创 Ubuntu20.04 搭建L2TP+IPsec客户端

编辑PPP配置文件(例如上文中的**/etc/ppp/options.l2tpd.client**)。2)编辑**/etc/ipsec.secrets** , 设置ipsec的预共享秘钥,编辑**/etc/xl2tpd/xl2tpd.conf**1)编辑**/etc/ipsec.conf**安装l2tp和strongswan。

2023-10-23 12:11:34 1401

原创 Ubuntu20.04 搭建L2TP+IPsec环境

1) 编辑PPP配置文件(例如上文中的**/etc/ppp/options.xl2tpd**)。2)编辑**/etc/ipsec.secrets** , 设置ipsec的预共享秘钥。2)编辑**/etc/ppp/chap-secrets**,添加VPN访问用户密码。当客户端可以连接到VPN服务器时,需要添加路由才可以访问私有网络中的其它机器。编辑**/etc/xl2tpd/xl2tpd.conf**1)编辑**/etc/ipsec.conf**安装l2tp和strongswan。

2023-10-23 12:09:24 3399 2

原创 Linux终端控制与ANSI转义序列

在Windows系统中,我们可以通过系统提供的接口操作控制台缓冲区的显示。那么在linux平台应该如何实现呢?答案就是ANSI转义序列。在计算机系统中,ANSI转义码(或转义序列)是一种使用带内信号控制视频文本终端的格式、颜色和其他输出选项的方法。为了编码这种格式化信息,特定的字节序列被嵌入到文本中,终端将查找并将其解释为命令,而不是字符代码。

2023-10-06 17:28:46 294

原创 如何完美控制控制台输出

正常情况下,我们在控制台程序中只关注程序的输入和输出,而不在意输出的格式、光标位置等。因此,当我们想要完美控制程序的输入输出时,就必须要使用系统提供的操作接口,来实现我们的目标。由于linux平台的控制台显示完全由ANSI 转义序列控制,在这里仅仅讨论windows平台的实现。

2023-10-02 18:14:09 226

原创 Windows驱动开发(一)

总结来说,WDM是早期的Windows驱动开发模型,需要开发人员直接操作底层硬件资源,而WDF是在WDM之上的高级和抽象的驱动程序开发框架,提供了更简化和自动化的开发方式。注意:在极少数情况下,你需要编写注意到 PnP 或电源事件的软件驱动程序,并且驱动程序需要访问无法通过 KMDF 获取的数据,你必须使用 WDM。WDF提供了更多的自动化和简化功能,减少了驱动程序开发的复杂性和错误,提高了开发效率和稳定性。WDM驱动程序以核心驱动程序、功能驱动程序和过滤器驱动程序为基础,涵盖了广泛的硬件设备类型。

2023-09-12 15:41:11 1818

原创 CMake基础

是 CMake 中的一个变量,用于指定构建类型。通过设置,您可以控制在构建过程中使用的编译选项和优化级别。通常,变量的值可以是以下之一:Debug:用于调试目的,启用调试符号,并优化性能。Release:用于发布目的,启用更高级别的优化和禁用调试符号。RelWithDebInfo:一种组合模式,同时启用优化和调试符号。MinSizeRel:用于最小化生成文件大小的模式。是 CMake 中表示目标系统的名称。是 CMake 中表示当前系统指针的字节大小。

2023-09-07 14:12:39 163

原创 C++ 获取进程信息

通常对于一个正在执行的进程而言,我们会关注进程的内存/CPU占用,网络连接,启动参数,映像路径,线程,堆栈等信息。windows平台没有直接提供获取进程启动参数的接口,但是可以通过解析进程的PEB(进程环境块)地址,获取信息。:这个文件包含了有关进程状态的各种信息,如进程ID、父进程ID、运行状态、内存使用情况等。:这个文件包含了进程的内存映射信息,显示了进程所使用的内存地址范围及其对应的权限。:这是一个文件夹,包含了进程当前打开的文件描述符列表。:这是每个正在运行的进程都有一个对应的目录,其中。

2023-08-28 18:20:59 1624

原创 Zmq适配Win7 SP0 / Win XP/ Win 2k

由于发布版本的libzmq使用了较多新的系统特性,导致在低版本windows平台上无法使用。因此,需要对zmq源码进行修改以适配低版本的系统,如Win7 SP0,Win XP,Win2003等等。

2023-08-15 15:40:07 199

原创 PE文件解析

PE文件磁盘分布和解析

2023-08-10 20:02:48 536

原创 设计模式——代理

代理模式是一种结构型设计模式,它通过引入一个代理对象来控制对原始对象的访问。代理模式在客户端和目标对象之间添加了一个代理,代理对象与目标对象实现相同的接口,客户端通过代理对象来间接地访问目标对象。抽象主题(Subject):定义了真实主题和代理对象共同的接口,这样代理对象可以在任何需要真实主题的地方代替它。真实主题(Real Subject):定义了代理对象所代表的真实对象。

2023-07-04 22:06:10 269

原创 设计模式——适配器

用于将一个类的接口转换成另一个客户端所期望的接口形式。适配器模式使得原本由于接口不兼容而无法一起工作的类可以协同工作。

2023-07-01 21:25:35 452

原创 设计模式——装饰器

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。那么使用装饰器模式如何实现上面的需求呢?

2023-06-25 14:00:24 483

原创 设计模式——入门

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。

2023-06-19 18:47:18 441

原创 Sha1算法实现流程(基于OpenSSL源码)

SHA-1(Secure Hash Algorithm 1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

2023-04-28 22:18:47 2357 1

原创 Selenium入门教程

Selenium最初是由ThoughtWorks公司一个叫Jason R. Huggins的工程师和他的团队开发出来Selenium是仅针对Web系统的一款自动化测试工具Selenium是免费的、开源的,很多公司选择Selenium和它是免费的有很大关系 Selenium不是一个工具,它是一系列工具的总称

2022-11-17 11:15:12 1358

原创 C语言实现简单线程池

生产消费线程池实现

2022-08-26 21:53:58 603

原创 动态规划:01背包问题

动态规划算法入门:01背包

2022-08-19 21:48:54 334

原创 C/C++ 基础知识总结

C/C++ 知识总结

2022-08-16 13:45:54 413

原创 基于MIME风格的Base64编码

1、Base641.1 简介Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,一种基于64个可打印字符来表示二进制数据的方法。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

2022-05-09 17:09:23 1153

原创 记一次https访问握手失败(sslv3 Alert Handshake Failure)

前言使用C++结合openssl实现https请求时,当访问百度等网站时,可以正常动作。但是某些网站出错,SSL_connect函数返回异常。1.调查过程1、尝试使用curl测试网站是否可以正常访问,结果是正常的。2、下载curl的源码,查看源码中关于openssl关联的代码3、最终定位到这行代码。SSL_set_tlsext_host_name(ssl, hostname);2.原因正常情形下,一个ip对应一个域名(主机名)。但是对于某些拥有超过1个主机名的web服务器,客户端必须告诉

2022-04-15 11:58:01 6108

原创 手动删除win10恢复分区

前言由于Window10装机时会自动创建回复分区,当系统盘容量不足需要扩容时,由于恢复分区存在,导致无法扩容。方法1.管理员打开命令提示符,使用diskpart删除恢复分区。C:\WINDOWS\system32>diskpartMicrosoft DiskPart 版本 10.0.19041.964Copyright (C) Microsoft Corporation.在计算机上: DESKTOP-GGSOCOA1.管理员打开命令提示符,使用diskpart删除恢复分区。C:

2022-03-28 12:55:31 3702 1

原创 Oracle 启动

1.启动监听$ lsnrctl start2.启动数据库实例$ sqlplus / as sysdbaSQL> startup3.启动PDB(使用CDB的场合)SQL> startupSQL> alter pluggable database ALL OPEN;4.测试连接SQL> conn system/oracle@orclpdb;

2022-03-14 11:09:36 572

原创 openssl 安装

前言由于Window系统没有自带的openssl库,因此当需要使用openssl参与工程编译时,需要自己下载和编译openssl源码。1.编译环境下载Mingw和Msys2TDM-MingwMSYS22.编译下载openssl源码,解压OpenSSL开始菜单打开"MSYS2 MSYS",cd到openssl解压目录cd /c/openssl-3.0.1/openssl-3.0.1编译(静态库和动态库)export PATH=$PATH:/c/TDM-GCC-64/

2022-02-10 10:54:57 4923

原创 bashdb 安装

前言正常情况下,使用Shell程序-x参数打印执行日志可以满足一般的测试需求。因此,当需要更精细地调试Shell,可以通过bashdb工具实现。1.下载找到bash版本对应的bashdb源码并下载。$bash -versionGNU bash,版本 4.4.19(1)-release (sparc-sun-solaris2.11)Copyright (C) 2016 Free Software Foundation, Inc.2.编译及安装$cd bashdb-4.x... # <-

2021-12-14 15:35:42 2219

原创 java.util.Collections#sort() throws IllegalArgumentException

问题JDK6升级JDK7的情况下,由于java.util.Arrays.sort和java.util.Collections.sort使用的排序算法已被替换(mergesort → timsort)。当TimSort检测到待比较的项目违反约定,则可能抛出IllegalArgumentException。JDK6及以前的版本忽略了这种情况。如果需要以前的行为,可以使用新的系统属性java.util.Arrays.useLegacyMergeSort来恢复以前的mergesort行为。 /**

2021-12-09 13:48:22 199

原创 WindowsAPI ——GetFileAttributes

Window上用来判断简单的文件类型,如软链接等

2021-12-06 14:07:41 1290

适用于 Windows 2000 的 IPv6 技术预览

适用于 Windows 2000 的 IPv6 技术预览

2023-08-15

空空如也

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

TA关注的人

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