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
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
虚拟机虚拟机逆向(Virtual Machine Reverse Engineering)是指对软件中自实现的虚拟机(或称解释器)进行反向分析的技术 程序将原本的原生代码或关键逻辑编译成自定义的字节码(bytecode),然后由一个解释器循环(VM loop)执行这些字节码。逆向工程师需要: 识别出虚拟机结构(操作码表、虚拟寄存器、虚拟栈、内存模型等) 提取字节码,并反汇编为人类可读的虚拟指令 理解虚拟指令序列的算法逻辑,以破解保护、提取算法或找到漏洞 虚拟机分类根据虚拟机的执行模型,通常分为两类 基于栈的虚拟机操作数隐式地通过一个虚拟栈传递,指令执行时从栈顶弹出操作数,计算结果再压
VxWorks 固件VxWorks 是美国 Wind River 公司开发的实时操作系统(RTOS),广泛应用于工控、航空航天、网络设备、医疗仪器等嵌入式场景 其固件镜像通常是一个单体内核映像,包含内核、驱动、应用程序和文件系统 固件镜像格式典型镜像类型 Bootrom:引导加载程序,负责初始化硬件、加载主映像 VxWorks 主映像:包含内核、任务、符号表(可选),通常被压缩或直接以 ELF/二进制形式存在 文件系统(TFFS/DOSFS/HRFS):挂载于 /tffs0 等,存放配置、Web 页面、应用程序模块 镜像结构特征 压缩壳:常见
WebAssembly概述WebAssembly(简称 Wasm)是一项为现代 Web 打造的底层、高性能、可移植的字节码格式。它允许使用 C、C++、Rust 等语言编写的代码,在浏览器中以接近原生应用的速度运行 核心优势 🚄 高性能:Wasm 是一种紧凑的二进制格式,能被浏览器快速解码和编译为机器码。执行效率接近原生程序,非常适合处理计算密集型任务 🛡️ 高安全性:Wasm 代码运行在一个内存安全的沙箱环境中。它无法直接访问系统内存或执行危险操作,并遵循浏览器同源策略,有效保障了用户安全 🌍 可移植性:作为一套 “虚拟指令集架构”,Wasm 代码不依赖特定硬件或操作系统,编译一次
花指令原理反汇编器通常有两种主要策略: 线性扫描:顺序解析每条指令,遇到干扰字节就会错位 递归下降:根据控制流跳转来反汇编,更智能但依然可能被误导 花指令正是利用反汇编器的缺陷——让它把数据当成代码,或者把代码的一部分拆解成错误指令 最终反汇编出来的结果是混乱、错误、不连续的,分析者需要手动修复或动态调试才能看清真实逻辑 实战案例Maze(花指令绕过 + 迷宫) 使用 Exeinfo PE 发现有 UPX 壳 脱壳后用 IDA 分析,有花指令 关键点:jnz +1 的跳转目标 jnz short 指令本身长 2 字节(75 操作码 + 01 偏移量) 偏移量是相对下一指令地址的
JT/T 808 协议概述JT/T 808 是交通运输行业标准《道路运输车辆卫星定位系统 北斗兼容车载终端通讯协议》,规定了车载终端与监控平台之间的数据通信格式 协议基于 TCP 或 UDP,采用大端字节序,报文整体以 0x7E 为帧边界,内部需经过转义处理 报文封装格式每个完整报文由标识位包裹,内部包含消息头、消息体和校验码 1234+--------+--------+----------+--------+--------+| 标识位 | 消息头 | 消息体 | 校验码 | 标识位 || 0x7e | 变长 | 变长 | 1 byte | 0x7e
1527 芯片芯片定位与调制方式1527 是一颗固定码无线遥控编码芯片,专为低成本的单向遥控设计。典型工作方式: 射频频率:315 MHz 或 433 MHz(由外部声表/晶振和发射电路决定) 调制方式:OOK (开关键控),即发射载波的有无代表数据 数据发送:按下按键后,同一帧数据会以约 10 ms 的间隔重复发送,直到松手 数据结构一帧完整数据由同步头和 24 位数据(20 位地址 + 4 位按键值)组成,每发完一帧会有一段较长的低电平间隙,然后重复下一帧 1[同步头] + [数据] + 间隙…… 再重复 同步头:一个宽高电平脉冲,用来唤醒接收端并标志一帧的开始