自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IOT pwn

很多开源项目需要交叉编译到特定架构上。

2024-01-21 17:16:12 859

原创 kr 第三阶段(九)64 位逆向

随后 AMD64 的问世,由于指令集并没有变动太多,且还能兼容运行 x86 的程序,所以得到了大量的普适性,Intel 也推出了 AMD64 标准的指令集 IA32e。在 x64 位汇编对应的加法、减法、乘法指令的速度相对于 32 位汇编有了很大的提升,因此多数情况都是直接使用对应的指令而不作优化。寄存器中的所有整型参数都是向右对齐的,因此被调用方可忽略寄存器的高位,只访问所需的寄存器部分。类型作为相同大小的整数传递。来进行优化,只不过这里的除法按照被除数有符号,除数为非 2 的整数次幂的情况进行优化。

2023-11-12 23:26:19 616

原创 kr 第三阶段(五)32 位逆向

对于低版本的 VC 编译器(VC 6.0),main函数在 PE 入口点函数中是倒数第 3 个函数调用,且参数个数为 3 个(wmain函数为 4 个参数)。对于高版本的 VC 编译器mainjmpmainif如果是其他编译器可以先编译一个程序调试查看函数调用堆栈寻找定位特征。IDA 内置常见库的签名文件,因此一般能够通过代码特征识别出main函数。

2023-10-28 20:56:58 604

原创 kr第三阶段(二)32 位汇编

是微软的 masm32 的民间工具集合。该工具集合除了 asm32 本身的汇编器mlliblinklinkrcmasm32masm32binpathincludemasm32includelibmasm32lib。

2023-10-24 00:33:38 372

原创 kr 第三阶段(一)16 位汇编

函数名 proc [距离][调用约定] [uses reg1 reg2..] [参数:word, 参数名:word..]local 变量:wordlocal 变量:wordret函数名 endpret距离:距离关键字说明near函数只能段内调用函数使用ret返回调用时ip入栈far段内段间都可调用函数使用retf返回调用时ip和cs入栈如果是用far修饰且段内调用,汇编器也会手动压一个cs寄存器确保retf能正常返回。调用约定调用约定关键字说明c调用方平栈。

2023-10-18 00:34:12 646

原创 kr 第三阶段(三)调试器

软件断点即 CC 断点或 int3 断点,OD中的快捷键F2,使用率也是最多的断点类型。以调试方式创建的进程,必定会有一个系统断点。

2023-10-03 23:50:52 213

原创 kr 第三阶段(六)C++ 逆向

方法3:在 C++11 及以后标准中,可使用 关键字设置结构体的对齐值。不过请注意, 关键字的参数必须是常量表达式,对齐值必须是 2 的幂且不能小于结构体中最大的成员。结构体对齐策略假设一个结构体中有 nnn 个元素,每个元素大小为 ai(1≤i≤n)a_i(1\le i\le n)ai​(1≤i≤n) 并且按照 kkk 字节对齐,则结构体大小计算方式如下:注意以下特殊情况:通常采用 的方式访问结构体成员。如果结构体比较小则利用寄存器进行拷贝。如果结构体比较大则优化为 指令。结构体传参

2023-09-25 01:46:02 1246

原创 kr 第二阶段(一)SDK

在 Windows 系统中一切图形界面都是由窗口组成。例如下图所示窗口为应用程序窗口或main 窗口。它通常具有带有标题栏、最小化和最大化按钮以及其他标准 UI 元素的框架。框架有操作系统管理因此称之为窗口的非客户区域。框架中的区域是客户区域,这是程序管理的窗口的一部分。下面是另一种类型的窗口:UI 控件和应用程序窗口之间的主要区别在于控件本身不能独立存在。相反,控件相对于应用程序窗口进行定位。拖动应用程序窗口时,控件会随预期一起移动。此外,控件和应用程序窗口可以相互通信。

2023-09-14 01:56:38 1571 2

原创 LLVM 与代码混淆技术

项目源码什么是 LLVMLLVM 计划启动于2000年,开始由美国 UIUC 大学的 Chris Lattner 博士主持开展,后来 Apple 也加入其中。最初的目的是开发一套提供中间代码和编译基础设施的虚拟系统。LLVM 命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写,随着 LLVM 项目的不断发展,原先的全称已不再适用,目前 LLVM 就是该项目的全称。简单来说,可以将 LLVM 理解为一个现代化、可拓展的编译器。GCC 与 LLVM 编译流程GCC

2023-09-06 20:24:21 2273 1

原创 IDA Python 使用总结

运行 IDA 安装目录下的,选择使用的 python 解释器。

2023-08-29 10:40:50 3600

转载 Vim 使用教程

命令行模式下的文本编辑器。filename。

2023-08-16 15:15:14 90

转载 Git 使用教程

【代码】Git 使用教程。

2023-08-16 15:12:07 79

转载 SSH 使用教程

hostname输入yes,然后回车即可。这样会将该服务器的信息记录在文件中。然后输入密码即可登录到远程服务器中。ssh 默认登录端口号为 22。如果想登录某一特定端口可以用-p参数指定。

2023-08-16 15:09:32 161

转载 docker 使用教程

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。使用 Dockerfile 定义应用程序的环境。使用定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。最后,执行命令来启动并运行整个应用程序。

2023-08-16 11:32:48 198

转载 Shell 入门教程

定义变量,不需要加name1='abc' # 单引号定义字符串name2="abc" # 双引号定义字符串name3=abc # 也可以不加引号,同样表示字符串等号两侧不能有空格。等号左边的变量认为是定义,不能加,等号右侧使用的变量要加。name=abc数组用小括号表示,元素之间用空格隔开。

2023-08-16 08:13:27 106

原创 linux pwn 基础知识

环境搭建虚拟机安装镜像下载网站为了避免环境问题建议 22.04 ,20.04,18.04,16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256 G,而后期如果硬盘空间不足会很麻烦。基础工具vimsudo apt install vimgedit不习惯 vim 的可以使用 gedit 文本编辑器。sudo apt install geditgit

2023-08-11 17:12:36 2110

原创 2023 年实验班选拔试题

邀请码:2023qsb。

2023-08-07 20:01:59 3028 1

原创 windows pwn

附件下载链接程序保护如下,没有开 GS 保护。程序是一个简单的栈溢出:利用方法如下:这里有几个易错点:64 位栈溢出附件下载链接和 32 位的程序相似,不过这里溢出字节数较少,需要栈迁移。ORW如果题目开启了 保护禁用了 ,那么我们就需要采用 ORW 的方式获取 flag 。Windows 中的 ORW 示例代码如下,其中 和 位于 , 位于 。由于传递的参数过多 gadget 不好找并且会导致 ROP 过长,因此采取 修改内存属性写 shellcode 的方式 进行 OR

2023-07-13 10:49:30 1403

原创 windows pwn 基础知识

在 Win10 和 Win Server2016 版本之前,只有一种堆类型 NT Heap在 Win10 和 Win Server2016 之后,引入了 Segment Heap(段堆)在之后版本中,除了 UWP 程序之外 一般都继续使用 NT Heap 进行堆管UWP(Universal Windows Platform)是 Win10 引入的一种新的应用程序开发模型,他们采用了一套共享的 API。所以采用 UWP开发的程序,可以在所有 Win10 设备上运行。

2023-06-21 09:26:51 3885 3

原创 VMware 逃逸基础知识

运行在 VMM 上的程序必须和原始硬件运行一样,需要高效。大部分指令必须直接在真实的处理器上运行,而不需要解释每条指令VMM 必须完全控制硬件,任何 VM 不能穿越 VMM 直接控制硬件。

2023-06-19 07:17:09 2049

原创 QEMU 逃逸相关例题

实际上只能使用第二种方式,因为 PCI 设备内部会对访问的内存区域进行检查,不允许超过分配。的合法区间,因而我们只能通过第二种方式构造越界读写原语。上设置定时任务,不过时间设置为 -1 因此不会执行。函数定义如下,也就是说这里会将该定时任务时间设置为。位于 qemu 上,地址小于堆地址,而越界写。无法将下标设为负数,因此考虑其他方法。指向参数地址,从而实现任意命令执行。结构体的内容如下,其中。从前面的调试结果可以看到。实现虚拟机逃逸,由于。函数调用链如下,根据。的参数可知,最终会将。初始值为 1 ,而在。

2023-06-13 16:56:35 1015 1

原创 Qemu 逃逸基础知识

QEMU 与 KVM 的完整架构如下图所示。其中 VMX root 和 VMX non-root 都是 CPU 引入了支持硬件虚拟化的指令集 VT-x 之后出现的概念。虚拟机在 VMX root 模式和 VMX non-root 模式下都有 ring 0 到 ring 3 四个特权级别。

2023-06-12 20:34:25 1493 1

原创 linux kernel pwn 常用结构体

tty 设备在/dev下的一个伪终端设备ptmx。

2023-05-28 14:46:02 1560

原创 linux kernel pwn 基础知识

驱动程序设备驱动文件系统驱动内核拓展模块LKMs 的文件格式和用户态的可执行程序相同,Linux 下为 ELF ,Windows 下为 exe/dll ,mac 下为 MACH-O ,因此我们可以使用 IDA 等工具来分析内核模块。模块可以被单独编译,但不能单独运行,它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程不同。模块通常用来实现一种文件系统,一个驱动程序或者其它内核上层的功能。

2023-05-22 21:44:36 2216

原创 linux kernel pwn 内核利用

基础知识内核概述内核架构通常来说我们可以把内核架构分为两种:宏内核和微内核,现在还有一种内核是混合了宏内核与微内核的特性,称为混合内核。宏内核(Monolithic kernel),也译为集成式内核、单体式内核,一种操作系统内核架构,此架构的特性是整个内核程序是一个单一二进制可执行文件,在内核态以监管者模式(Supervisor Mode)来运行。相对于其他类型的操作系统架构,如微内核架构或混合内核架构等,这些内核会定义出一个高端的虚拟接口,由该接口来涵盖描述整个电脑硬件,这些描述会集合成一组硬

2023-05-17 21:54:25 1599 1

原创 linux 内核内存管理

物理内存相关数据结构page(页)Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h 头文件中,大量使用了 C 语言的联合体(union)来优化其数据结构的大小,因为每个物理页面都需要一个 page 数据结构来跟踪和管理这些物理页面的使用情况,所以管理成本很高。struct page { // 第一部分,

2023-05-12 04:07:22 873

原创 Chrome v8 pwn

它是⼀个多进程+IPC的程序, 不同的进程管理不同的内容,

2023-04-17 21:53:04 2109

原创 musl pwn

调试环境搭建debug_musl 可以源码调试。运行 setup.sh 将源码及相关动态链接库解压到根目录下 musl 文件夹下,用的时候只需要将对应版本的 libc.so 文件复制到目录下,然后利用 patchelf 运行如下命令修改可执行文件所依赖的 ld 为 libc.so 即可进行源码调试。patchelf --set-interpreter ./libc.so ./pwn另外该项目中的 build.sh 可以自动下载和编译 musl 到根目录下的 musl 文件夹中,建议在 ubuntu

2023-04-03 01:27:29 858

原创 LLVM PASS pwn

LLVM的核心是一个库,其设计了一种通用的LLVM IR,并提供一系列接口来操作LLVM IR,生成目标平台代码等等后端的功能.LLVM Pass就是遍历传入的IR并进行一些处理,在实现上,LLVM的核心库中存在一些Pass类,通过继承这些类并重载一些方法,就可以方便的处理传入的IRLLVM Pass的用处:在Pass遍历LLVM IR的同时,就可以非常方便的完成插桩,静态分析,机器无关的代码优化等等操作.下面列出了几个重要的命令行工具.llvm-asLLVM IRllvm-disllvm-asopt。

2023-03-22 22:27:28 580

原创 2022强网杯线上赛 qmachine

附件下载链接逆向还原分析可知程序的大致逻辑如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>typedef long long i64;typedef unsigned long long u64;typedef unsigned int u32;int code[420] = {14593309, 328982, 6816276,

2023-03-21 10:20:02 532 2

原创 2022CTF培训(十三)虚拟化&QEMU架构分析&QEMU CVE示例分析

全虚拟化结构如下图所示,Guest被给予Ring1层的特权级。实际上,Guest也可以在Ring3层中执行。由于GuestOS不是运行在内核态,所以其不能直接操作硬件设备。为了解决这个问题,VMM引用了两个机制——二进制翻译和陷入模拟。陷入模拟在陷入模拟方式的VMM中,客户机代码直接运行在CPU上,但降低权限(reduced privilege)。 当客户机尝试读或修改特权状态时,处理器会将控制权交给VMM的相关处理函数。 VMM随后使用解释器模拟指令并在下一条指令恢复客户机代码的直接执行。X86

2023-02-08 01:50:47 1086 2

原创 2022CTF培训(十二)IOT 相关 CVE 漏洞分析

版本存在 UPnP 栈溢出漏洞,该漏洞在后续版本中被修复,但是 UPnP 模块中还存在其它栈溢出漏洞。漏洞存在于 uhttpd 中,由于该功能比较独立,可以直接用 qemu user mode 仿真。可以看到之前的栈溢出已经修复,但是只要通过前面一些列的验证会调用 sub_248F8 函数。通过调试发现 v13 实际上是用户输入的密码,因此存在命令注入漏洞。sub_248F8 函数中 strncpy 中的长度参数可以通过。之间字符串长度控制,如果构造出过长的字符串就会造成栈溢出。

2023-01-11 00:14:56 859

原创 2022CTF培训(十一)IOT 相关 CVE 漏洞分析

是采用 qemu-user 对个别程序进行仿真,而对于完整的仿真需要使用 qemu-system。直接使用 qemu-system 仿真需要进行复杂的环境配置,而可以将这个过程自动化。是在 Firmadyne 的基础上开发的固件仿真框架,接下来会利用该框架尝试仿真 DIR823GA1_FW102B03。首先下载 firmware-analysis-toolkit 并运行初始化脚本。(由于要安装大量的环境依赖,如果对自己的网络没有信心的话建议拍个快照,安装失败的话可以恢复快照重新安装)之后配置。

2023-01-04 18:34:55 1227

原创 2022CTF培训(十)IOT 相关 CVE 漏洞分析

这里选择的设备是一款家用路由器,型号为 D-Link DIR-850L(EOL)。由于该款路由器已停产,官网无法下载到固件,不过目前这个还能下载到相关的固件,当然附件中也会提供需要分析的固件。

2022-12-31 18:57:18 1858 2

原创 2022CTF培训(九)MIPS PWN环境搭建&MIPS PWN入门

mips pwn

2022-12-22 02:20:57 1712 2

原创 MIPS32汇编逆向分析基础

MIPS 有 32 个通用寄存器 (General purpose registers),以美元符号 ($) 表示。可以表示为 $0~$31,也可以用寄存器名称表示如,$sp、 $t9 、$fp 等等。

2022-12-16 23:36:16 1441

原创 2022CTF培训(八)ARM PWN 环境搭建&ARM PWN 入门

而 docker 镜像是根据配置文件 DockerFile 来创建的,分析 DockerFile 可知首先是拉取一个 Ubuntu16.04 的镜像并安装了相关的软件,由于安装了文件传输工具 curl ,因此可以考虑通过利用漏洞执行 curl 命令来将 flag 文件下载下来。根据 ARM 的函数调用约定,LR 寄存器存储返回地址,因此这条 gadget 中的 PC 决定 下一个函数的地址,而 LR 决定下一个函数的返回地址。qemu是一款可执行硬件虚拟化的虚拟机,与他类似的还有Bochs、PearPC,

2022-12-16 00:32:48 1199

原创 ARM32汇编逆向分析基础

指令编码的立即数为目标地址与 PC 寄存器的差值除 4。由于涉及读 PC 寄存器,因此根据当前模式要加上相应的偏移。触发断点实现,且 IDA 调试器 无法分辨出改指令是否是自己设置的,在读取数据时会按实际情况返回数据。IT 指令的 mask 编码为从高到低,T 为 0,E 为 1 ,最后填一个 1 表示结束。由于 ARM 汇编指令长度的影响,对立即数范围有严格的限制。cond 标志位位于指令硬编码的高 4 比特,在执行时根据标志寄存器决定该指令是否执行。的 mask 的二进制形式为。

2022-12-12 21:26:47 973

原创 2022CTF培训(六)逆向题目选讲

分析可知,函数首先调用 sub_4017C0 初始化 v4 数组,之后根据 v4 数组中的内容依次调用 funcs_4018AB 数组中的函数对输入的 1 到 32 字节进行变换。通过改变断点位置可以判断出,该函数表中 sub_B232A0 函数的前一个函数 sub_AD1000 同样存在反调试。必然会触发除零异常,因此会执行 loc_4010BE 处的代码,将局部变量 a0 和 a1 分别异或 dword_41F038 和 dword_41F03C。并用魔改的 tea 对其进行加密。

2022-12-08 23:01:54 1068

原创 2022CTF培训(五)字符串混淆进阶&代码自解密

之前的字符串混淆是一次性解密的,找到解密函数即可获得所有字符串,同时执行解密函数后内存中也可直接获得所有字符串。因此对抗人员升级了混淆技术,使得解密仅在使用时发生,从而避免了全部泄露的问题。常见的形式是提供一个函数获取解密字符串,通过参数来决定返回的字符串。同样分为静态和动态两种。静态解密可以直接获取可分析到的全部引用点,但缺点也是同样的,可能会遗漏掉动态解密的引用点,例如SMC代码自解密技术。动态记录虽然能够捕捉所有执行到的解密,但无法记录未被执行到的分支,对于需求代码的搜索能力较差。

2022-12-06 22:33:10 1362

空空如也

空空如也

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

TA关注的人

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