D 语言D 的设计目标是 融合 C/C++ 的性能与 Python/Ruby 的开发效率。它支持多种编程范式:命令式、面向对象、函数式、泛型、模板元编程 常见用途:高性能服务端、游戏引擎、数值计算,以及部分 CTF 出题者用来写加密逻辑,利用其模板和范围机制增加逆向趣味性 逆向技巧识别胖指针:看到函数参数用两个寄存器传递同一数组(如 rcx=ptr, rdx=len),可能是 D 的数组 关注范围对象的布局:范围操作通常会产生一个栈上的结构体,内部包含当前迭代器指针、剩余长度等字段,需分析清楚 利用符号名:D 编译后的二进制常保留函数名和模板参数,如 _D3app8encr
RISC-V 架构RISC-V 是一种开源的精简指令集架构(ISA),由加州大学伯克利分校于 2010 年发起,现由 RISC-V 国际基金会维护 基本特征位数:RV32(32位)、RV64(64位)、RV128(未来扩展)。常用的是 RV32/64 字节序:默认为小端(Little-Endian),也允许大端(非主流) 指令格式:定长 16 位(压缩指令)或 32 位(标准指令)。编码极为规整,字段位置几乎固定 模块化指令集: 基础整数指令集(I):加减、逻辑、移位、分支、访存、系统调用 标准扩展: M:乘除法 A:原子操作 F / D:单/双精度浮点 C:压
RC4RC4(Rivest Cipher 4)是由 Ron Rivest 在 1987 年设计的对称流密码,因其结构简单、软件实现高效,曾被广泛应用于 SSL/TLS、WEP、WPA、RDP、以及各种恶意软件和 CTF 题目中 算法结构RC4 由两个核心阶段组成:密钥调度算法(KSA, Key-Scheduling Algorithm) 和 伪随机生成算法(PRGA, Pseudo-Random Generation Algorithm) 状态初始化一个 256 字节的 S 盒(state vector),初始化为 S[i] = i,i = 0..255 密钥 key 为任意长度(1
PythonPython 逆向是指对 Python 编写的程序(包括脚本、.pyc 字节码、打包的可执行文件等)进行分析,以理解其逻辑、提取算法、恢复源码或寻找漏洞 Python 程序的编译与运行机制源码 .py 被编译为 字节码 .pyc,存储在 __pycache__ 目录(Python 3.2+) .pyc 文件结构: 前 4 字节:magic number(标识 Python 版本,如 Python 3.8 为 550D) 后 4 或 12 字节:时间戳 + 源码大小(可选) 剩余部分:marshal 序列化后的 code object 逆向的核心就是:获取 .pyc → 反
Ret2text原理在 CTF 和二进制安全里,Ret2text 是一种非常经典的栈溢出利用手法。它的名字可以这样拆开理解: Ret:Return,代表 “返回地址” 2 / to:到、跳转到 text:.text 段,存放程序机器指令的区域 简单说,Ret2text 就是利用栈溢出漏洞,将函数的返回地址篡改为程序 .text 段中已存在的合法代码,从而劫持控制流去执行这些代码来获取 shell 因为执行的代码是程序本来就有的,所以它不需要注入 Shellcode,也能绕过 NX 保护 实战案例帮我取一个题目名称(Ret2text) 没开金丝雀,read 函数读取大小为 6
SMCSMC(Self-Modifying Code,自修改代码) 是一种程序在执行过程中修改自身指令的技术 原理程序运行时,动态修改内存中代码段的机器码,然后跳转到修改后的地址执行。修改方式包括: 异或(XOR) — 用密钥异或加密代码段,运行时解密 加减常量 — 对指令字节增减固定值 直接覆写 — 用预先准备好的原始字节替换 实战案例jocker(SMC 逆向 + IDA 脚本) IDA 反编译发现对 Str 和 Destination 进行了操作 12345678910111213141516171819202122232425262728int __cdecl main(in
SMT概述可满足性模理论(Satisfiability Modulo Theories,简称 SMT) 可以看作是一个更强大的 “解方程” 工具。它解决的核心问题是:在特定的数学理论(如整数运算、数组、位向量等)背景下,判断一个逻辑公式是否存在一组解 工作原理主流的 SMT 求解器多采用 “惰性(Lazy)算法”,其工作流程像一个高效的 “猜-验” 循环: 抽象化:将 SMT 公式中的理论部分(如 x > y)替换为布尔变量,交给内部的 SAT 求解器去 “猜” 一个可能的布尔赋值组合 理论验证:将 SAT 求解器 “猜” 出的布尔组合,还原回具体的理论约束,交给对应的理论求解器(如
Schneider 模块固件概述施耐德电气(Schneider Electric)的模块固件,是为其各类模块化设备(如控制器、I/O 模块、通信模块等)提供底层功能的软件。它直接决定了模块的性能、功能及稳定性,通常以 .zip 或 .seco 等格式提供 实战案例简单的固件逆向分析(Schneider 模块固件) 解压缩附件,里面有个压缩文件叫 SchneiderTFE.zip,所以应该考察的是 Schneider 模块固件 关键文件是 FLASH0/wwwroot/conf/exec/NOE77101.bin 1od -Ax -tx1z -j 0x210 -N 48 ./NOE77
虚拟机虚拟机逆向(Virtual Machine Reverse Engineering)是指对软件中自实现的虚拟机(或称解释器)进行反向分析的技术 程序将原本的原生代码或关键逻辑编译成自定义的字节码(bytecode),然后由一个解释器循环(VM loop)执行这些字节码。逆向工程师需要: 识别出虚拟机结构(操作码表、虚拟寄存器、虚拟栈、内存模型等) 提取字节码,并反汇编为人类可读的虚拟指令 理解虚拟指令序列的算法逻辑,以破解保护、提取算法或找到漏洞 虚拟机分类根据虚拟机的执行模型,通常分为两类 基于栈的虚拟机操作数隐式地通过一个虚拟栈传递,指令执行时从栈顶弹出操作数,计算结果再压
UnityUnity 游戏的核心逻辑通常位于 C# 编译的 DLL(Mono)或 C++ 编译的 IL2CPP 文件中 编译方式 方式 脚本后端 包含文件 难度 Mono C# → IL → .NET DLL Assembly-CSharp.dll 等 低 IL2CPP C# → IL → C++ → 原生代码 libil2cpp.so / GameAssembly.dll + global-metadata.dat 较高 实战案例Mine Sweeping(Unity) 打开附件可以看到这是一个 Unity 游戏,Unity C# 题的核心逻辑通常都在 Mine