D 语言
D 的设计目标是 融合 C/C++ 的性能与 Python/Ruby 的开发效率。它支持多种编程范式:命令式、面向对象、函数式、泛型、模板元编程
常见用途:高性能服务端、游戏引擎、数值计算,以及部分 CTF 出题者用来写加密逻辑,利用其模板和范围机制增加逆向趣味性
逆向技巧
识别胖指针:看到函数参数用两个寄存器传递同一数组(如 rcx=ptr, rdx=len),可能是 D 的数组
关注范围对象的布局:范围操作通常会产生一个栈上的结构体,内部包含当前迭代器指针、剩余长度等字段,需分析清楚
利用符号名:D 编译后的二进制常保留函数名和模板参数,如 _D3app8encryptFNaNfAyaZ 这种混杂的名字,可以通过 demangle 还原。模板字符串参数直接可见,如 "475475475"
标准库痕迹:对 std.range.cycle 等函数的调用特征(参数、返回值结构)做积累,可以快速定位算法核心
实战案例
advanced(D 语言)

IDA 反编译发现 _Dmain 函数,说明程序是 D 语言编写的

运行程序得到密文
1 | welcome, here is your identification, please keep it in your pocket: 4b404c4b5648725b445845734c735949405c414d5949725c45495a51 |
调转到加密函数中

encrypt 里面连续调用了 enc!("111")……,其实就是
1 | for i in range(1, 500): |
随便进入一个 enc!(key) 函数中

D 语言看不懂,冷门语言,转为 Python
1 | def encrypt(plain: bytes, key: bytes = b"475475475", v7: int = 0) -> bytes: |
编写解密脚本拿到 flag
1 | ct_hex = "4b404c4b5648725b445845734c735949405c414d5949725c45495a51" |