- 博客(78)
- 资源 (1)
- 收藏
- 关注
原创 heap pwn 入门大全 - 2:glibc heap机制与源码阅读(下)
本文对glibc堆管理器的各项主要内存操作,以及glibc 2.26后引入的tcache机制进行源码级分析,可作为查找使用。
2023-08-13 23:40:20
657
原创 heap pwn 入门大全 - 1:glibc heap机制与源码阅读(上)
本文为笔者学习heap pwn时,学习阅读glibc ptmalloc2源码时的笔记,与各位分享。可能存在思维跳跃之处,敬请见谅
2023-08-13 23:02:09
948
原创 Honggfuzz Linux arch_clone 源码阅读 (setjmp, clone)
阅读 Honggfuzz 系统架构相关源码,在创建子进程部分遇到了几个问题,经过研究得以解决,在此记录。
2023-04-15 17:47:33
596
原创 现代 cmake (cmake 3.x) 操作大全
cmake 是一个跨平台编译工具,它面向各种平台提供适配的编译系统配置文件,进而调用这些编译系统完成编译工作。cmake 进入3.x 版本,指令大量更新,一些老的指令开始被新的指令集替代,并加入了一些更加高效的指令/参数。本文归纳了cmake 3.x 版本的常用指令,方便使用时备查。
2023-02-12 01:26:17
1290
原创 AFL 源码精读笔记 - Fuzzer 部分
本文是笔者阅读AFL源码的核心代码部分阅读笔记,主要内容为AFL fuzzer结构和流程等,不包含插桩内容。由于另一部分笔记直接写入代码注释,可能部分内容不是很完善,但笔者自以为将基本所有AFL流程要点记录在笔记中,欢迎各位交流。
2023-02-07 01:19:01
758
原创 Debian/Ubuntu 配置tty自动登录
服务控制,配置getty服务文件。可以控制开放自动登录的端口和登录用户,本文以root登录ttyS0为例,记录自动登录配置过程
2023-01-31 21:41:00
2592
原创 《Rust权威指南》读书笔记10 - 编写自动化测试
测试是保障程序正确性的重要手段。功能上的漏洞不能直接被编译器检测和捕获,必须通过执行一些测试例并比较期望结果得出。手动编写测试用例是一个较为冗长繁琐的过程,Rust提供了一些自动化测试方法,能够标准化、高效化进行功能的自动测试。
2023-01-25 00:49:23
1347
原创 《Rust权威指南》读书笔记9 - 泛型、特性、生命周期
泛型(Generics),在许多语言中都有出现,主要为了表征一类共有的特性,而不是指代一个特定的类型。我们使用一些抽象的性质表述一些类型,而不需要指定其具体类型。而trait 特征,则是我们约束泛型行为的方法。通过trait,我们可以限定泛型为一个具有某些特定行为的类型,而不是任意类型。最后,我们将讨论生命周期的概念,生命周期也是一类泛型,用于向编译器提供引用之间的相互关系,确保引用过程中的有效性。
2023-01-24 18:26:36
1509
原创 《Rust权威指南》读书笔记8 - Error handling 错误处理
Rust提供了较为独特的错误处理机制。不同于C/C++的通用异常处理,Rust将可恢复与不可恢复错误区分对待。对于可恢复错误,Rust定义了类型作为函数返回值,以便程序后续能够特殊处理。对于不可恢复错误,Rust程序会立即终止运行。
2023-01-23 20:17:36
783
原创 VS Code 为 Clang for MSVC 配置 cmake & cmake tools
一个项目需要在Windows平台上编译,但是是面向linux编写的(`Makefile`),这时候就需要使用Windows平台上的工具链进行编译。但是,多文件项目管理复杂,一个一个文件进行编译较为繁琐,**这时候,就可以使用cmake工具辅助进行编译
2023-01-07 15:54:18
3552
原创 syzkaller 黑盒测试1:环境搭建
使用syzkaller对闭源操作系统进行漏洞测试,会遇到与开源系统完全不同的问题。文中附有笔者自己的解决办法
2023-01-02 01:31:34
1894
原创 Linux modules-load 启动时加载驱动模块
Linux 内核包含非常多驱动以及其他功能模块,驱动开发时,我们可以通过insmod命令向内核中载入模块、rmmod卸载模块、lsmod列出加载的所有模块。一般情况下,模块会根据硬件接入情况自动载入内核。但某些情况下,我们需要使用modules-load配置将部分驱动(或自己编写的测试驱动)自动载入内核。
2022-12-12 00:08:10
4465
原创 CPU段访问控制:特权级(RPL CPL DPL)和代码段一致性
虽然目前操作系统没有应用分段机制,但了解其运行原理仍然具有吸引力XD。本片文章,我们就来理清CPU段访问控制中,代码段一致性的概念。
2022-11-05 23:30:08
1164
原创 《Rust权威指南》读书笔记7 - common collections
集合数据类型(collections),是编程语言中可以表达多个值的类型。不同于标量类型只能表达单一的值。这些集合将持有的数据存储在堆上,不需要在编译时确定大小。这带来了极大的编程便利性。Rust中,广泛使用的集合类型主要有三种:动态数组 `Vector`, 字符串 `String`, 哈希映射 `hash map`。
2022-11-01 01:25:58
455
原创 《Rust权威指南》读书笔记6 - Enums and Pattern Matching
枚举类型,允许我们列举所有可能的值以表示这个类型。枚举可以连同数据以编码信息。Rust中的枚举类似于`F#` `Haskell`等函数式编程语言中的代数数据类型。
2022-10-31 11:43:07
279
原创 CA Server证书申请与颁发 & Apache2 HTTPS
;本文将介绍关于CA Server的相关内容。CA Server搭建与自签名证书创建,实体认证与证书颁发,服务器证书申请与导入。 Apache2 配置HTTPS
2022-10-10 12:20:25
1601
原创 《Rust权威指南》读书笔记5 - Struct
结构体,是一种自定义数据类型,允许程序员将不同类型的数据结合起来,形成相关联的整体。Rust的结构体还提供方法和关联函数,可以指定那些与结构体数据相关的行为。
2022-10-04 11:02:02
967
原创 《Rust权威指南》读书笔记4 - Ownership
所有权 (Ownership)是Rust语言中最为独特的功能之一。通过所有权,Rust实现了在没有GC的前提下保障内存安全。
2022-10-03 16:21:56
599
原创 《Rust权威指南》读书笔记3 - General Programming Concepts
本文对应《Rust权威指南》的第3章,主要介绍Rust中的通用编程概念,如变量、数据类型、函数、程序控制流等。
2022-10-01 10:59:25
562
原创 从开发流程看 PyQt5 入门
PyQt5,是跨平台图形用户界面框架Qt的Python支持包。其提供了丰富的图形控件库,与优秀的跨平台性能(包括Windows, macOS, Linux, iOS, Android)。另外,Qt提供了跨语言的通用UI开发设计器,可以以图形化的方式构建UI界面,并可提供预览。本文就从开发流程的角度,讲述搭建PyQt5应用所需要的基本技术。...
2022-08-10 01:22:36
1236
4
原创 Linux 进程同步实战入门(共享内存、信号量)
为了共同完成某项任务,不同进程间需要有一种协作的方式。其中最简单的一种,就是两个进程共享一块物理内存区域。多个进程都可以在其中读写数据,这样就完成了数据从一个进程传送到另一个进程的功能。但单纯使用共享内存还不够,当多个进程并发执行,一同访问共享数据区域,就可能产生数据错误。(关于并发和竞争条件,本文不详细展开,读者可以查阅其他资料)**所以,我们还需要一种同步这些进程行为的方式。**本文我们将采用信号量实现进程同步。生产者-消费者问题 让我们来考虑这种场景:有n台电脑,m台打印机。n台电脑分别.
2022-05-27 22:02:57
1143
原创 读者-写者问题精析——分析与优化
最近遇到了进程并发与互斥相关的问题。其中一个经典的问题就是读者-写者问题。本文对读者-写者问题的经典模式——读者优先,与两个拓展模式——写者优先、读写公平进行了描述和分析。笔者通过总结归纳,对互斥锁的理念(Idea)有了进一步的了解,并基于此提出了一些可能的方法。(本文描述中,锁和信号量两个概念混杂使用,指代同一对象)问题描述读者-写者(Reader-Writer)问题,描述了多个读者与写者对同一共享资源(如内存,文件等)并发访问的情境。其主要特点为:读者间不互斥:读取操作不会改变资源内容.
2022-05-24 22:29:30
2469
3
原创 Linux系统调用 - 进程管理初探(中)
本文对Linux系统调用的机制进行了大致分析,并以此为基础对Linux进程管理(多进程调用、进程同步等)进行初步探索。在研究进程fork()函数的过程中,笔者产生了很多问题,也通过查阅资料、动手实验等方式对这些问题有了一定的研究和理解。本文将按照笔者对问题研究的历程入手,对Linux进程管理的部分基本过程和背后机理进行阐述。在本文中,你将看到:系统调用(system call)的流程POSIX基本进程管理函数——fork() / vfork() / clone() / wait() / wai.
2022-05-08 19:56:06
1257
原创 Linux系统调用 - 进程管理初探(上)
本文对Linux**系统调用的机制**进行了大致分析,并以此为基础对Linux进程管理(多进程调用、进程同步等)进行初步探索。在研究进程`fork()`函数的过程中,笔者产生了很多问题,也通过查阅资料、动手实验等方式对这些问题有了一定的研究和理解。本文将按照笔者对问题研究的历程入手,对Linux进程管理的部分基本过程和背后机理进行阐述。
2022-05-07 21:13:41
620
原创 Linux 时间函数 (time() clock() gettimeofday()) 简介与比较
Linux 时间函数 (time() / clock() / gettimeofday()) 简介与比较 本文将对Linux系统时间函数gettimeofday()与标准库函数time() clock()进行简单介绍,并比较差异。Introduction 最近笔者的一个项目需要使用计时功能,同时使用POSIX的多线程函数进行多线程操作。在计时过程中,出现了一些Bug,导致计时结果错误。经过研究找到了问题,也由此发现了上述几个函数之间的差异。Linux系统库 sys/time.h系统库提供了
2022-05-07 20:03:04
999
原创 动手编写操作系统(3):系统引导过程——BIOS与MBR(下)
通过MBR的实践,学习IO接口、硬盘操作、显存操作等知识。完成一个不带分区表的MBR
2022-01-28 23:24:07
5717
原创 cmp test指令 条件转移 FLAGS寄存器 机理探究
从底层逻辑触发,对汇编语言中FLAGS标志寄存器、条件转移指令,以及测试指令进行探究
2022-01-20 20:57:14
1175
原创 动手编写操作系统(1):初识Bochs
下面正式进入实操环节,也就是动手搭建操作系统。看着眼前的Windows/Linux/Mac OS/etc,相信绝大多数同学都会感到兴奋和迷茫:这么大个操作系统,从哪里开始呢?古人有云:“工欲善其事,必先利其器。”我们得以发挥自己聪明才智,进行学习研究创造的前提,是拥有一个好的工具。它能让我们在巨人的肩膀上欣赏与创造。在这里,我想表达对所有在相关领域为后人的方便贡献自己汗水的前辈的衷心的感谢与钦佩。 话不多说,接下来我们正式切入正题:配置调试操作系统所需的环境。C/C++编译器,这里采用gcc/.
2022-01-15 21:23:09
6042
2
原创 WMCTF 2021 pwn dy_maze writeup
经过三天的奋战(摸鱼划水√),WMCTF 2021 终于结束,我们的萌新体验队在大家的共同努力下也拿到了前30的成绩,实在出乎我的预料。不过,对于我们的首次比赛而言,成绩是最次要的方面,队友们在比赛中表现出的认真和专注、对CTF的兴趣和热爱才是最最珍贵的东西,只有兴趣,才能推动我们不断训练进取,在水平上拥有长足的进步。 这次比赛中,除了少量签到、娱乐题外,pwn方向上我只做出了一道dy_maze,原因还是技术不够,堆溢出没有学。这道题也与一般的栈溢出不同,在前面加上了自动化分析的内容,确实长了见识.
2021-08-31 13:07:25
1344
2
原创 PLT & GOT 表动态链接详解及 pwn 应用
动态链接,是提高程序空间效率的重要方法。通过动态链接, 我们可以调用外部共享库中的函数,而不需要将其编译在可执行文件中。在运行时动态链接的过程中,PLT表和GOT表起到了至关重要的作用。本文,我们就从运行过程的角度探究程序依靠这两个表进行动态链接的原理。 ps: 转眼加入优快云也已经一年了,从一年前的徒有热情却无目的,孤身在计算机的世界中摸索,到现在拥有了组织的归属,获得了许多前辈们的宝贵经验,也逐渐确定了自己在CTF中的方向:二进制安全。希望在接下来的一年中,能朝着既定的方向迈进。接下来我也会.
2021-08-07 12:38:16
5424
1
原创 树莓派4B开箱初始配置(系统镜像、连接(有线 SSH VNC)、完整初始化配置)
由于网络安全课需要一个小型靶场,主要用于基本SQL injection、XSS、File Upload Vulnerability等基本Web方向的实验学习;另外,考虑到树莓派硬件的通用性,可以完成很多其他任务(做完靶场夹私货 XD),所以选择它作为物理靶场的载体。购置后需要配置,从购置到系统配置完成,中间遇到了许多问题和一些需要注意的细节,记录在本文中,希望为读者解答初始配置的疑问。如果遇到了另外的问题,也欢迎在评论中提出,笔者将尽力解答。0. 写在前面配置目标:小型靶场(DVWA - Da.
2021-06-02 17:56:21
1583
原创 DVWA 入门使用说明与原理解析
本文为校网络安全通识课实验部分 DVWA web攻击实验所整理。适用环境 DVWA 1.10(与1.9基本相似)0. Introduction[DVWA - Damn Vulnerable Web Application](DVWA - Damn Vulnerable Web Application), 是一个基于 PHP/MySQL 的网络攻击靶场,平台上运行了多种网络应用程序,覆盖了日常使用的各种场景,如用户登录、条件查询、文件上传、验证码等;也涉及Web攻击的多种应用手段,如口令爆破、命令.
2021-05-20 19:40:13
7587
3
原创 二叉树的非递归遍历方法(额外空间O(1),自研方法)
《算法导论》基本数据结构的练习题中,有这样一个有趣的问题: 给定一个n结点二叉树,写出一个O(n)时间的非递归过程,将该树每个节点的关键字输出,要求除树本身的空间外只能使用固定量的额外存储空间。过程中不得修改该树的内容。 对于时间复杂度O(n),只要每个点遍历一次,就没有什么问题,但一般的非递归二叉树遍历(深度优先搜索BFS等),都需要额外的O(n)空间作为队列、栈或是已输出元素表。(更夸张的是,我在查找有关资料时,竟然发现一篇文章中断言所有的非递归二叉树遍历方法都需要额外的一维数组,甚至有将.
2021-01-20 18:41:53
3572
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人