BC文件逆向
参考链接:https://blog.csdn.net/weixin_47778392/article/details/141107768
https://www.cnblogs.com/Q7h2q9/p/18590724
LLVM
BC(bitcode)逆向
- 将C文件编译为LLVM bitcode 文件
1 |
|
- 由于.bc 是bitcode的二进制格式,.ll 文件 llvm bitcode 的可读文本
1 |
|
llvm-dis 工具反汇编llvm bitcode 文件, 可以将bc文件转为.ll文件
1 |
|
- 用 llvm-as 工具通过汇编文件(.ll 文件)得到字节码文件(.bc 文件)
1 |
|
- .bc编译成.o
第一种方法:用clang直接将其编译为可执行文件
1 |
|
1 |
|
1 |
|
- 编译生成可执行文件
1 |
|
或者
1 |
|
- .bc到.s编译指令
1 |
|
工具
clang llvm
1 |
|
检查版本
1 |
|
1. 处理.bc文件
.bc文件是 LLVM 中间表示(IR)的二进制格式。要逆向分析它,需将其转换为可读的文本格式(.ll)。
a. 转换为 LLVM IR 文本格式
使用llvm-dis工具(LLVM 反汇编器):
1 |
|
生成的output.ll是文本形式的 LLVM IR,可用文本编辑器查看。
b. 直接查看.bc文件信息
分析.bc文件结构:
1 |
|
2. 使用 Clang 编译/反编译
a. 将 .bc 编译为可执行文件
1 |
|
生成的可执行文件output可用逆向工具(如 Ghidra、IDA Pro)分析。
b. 反编译为 C 代码(需额外工具)
直接反编译 LLVM IR 到 C 代码需要第三方工具,例如:
RetDec:支持 LLVM IR 反编译。
1 |
|
3. 动态分析(调试)
使用lli( LLVM 解释器)直接运行.bc文件:
1 |
|
结合调试器(如 gdb 或 lldb)跟踪执行流程:
1 |
|
bc版本兼容问题
最好根据原生编译平台去下载
个人做法是查看内容安装对应版本
将 .bc 转换为 .ll(LLVM IR 文本格式),查看头部信息:
1 |
|
关键信息:
- target triple:目标平台(可推断兼容的 LLVM 版本)。
- 如果文件包含 llvm.ident,会显示 Clang 版本:
是windows下vs生成的,但版本切换麻烦,直接kali安装了
1 |
|
编译时指定目标三元组
1 |
|
切换版本可以参考这个:https://blog.csdn.net/weixin_45100742/article/details/139897786
遭遇该报错
错误原因
- 你正在 Linux(Kali)上编译一个面向 Windows(x86_64-pc-windows-msvc)的 LLVM Bitcode 文件。
- Clang 默认会尝试调用 Linux 的链接器 ld ,但 .bc 文件包含 MSVC 特有的库依赖(如 libcmt,Windows 的 C 运行时库)。
用vscode配置环境:https://zhuanlan.zhihu.com/p/613922486
llvm下载网址:https://releases.llvm.org/download.html
安装llvm配置环境变量,将mingw64 文件夹中的所有文件拷贝到 LLVM
正式逆向Dragon.bc文件(XYCTF2025–Re)
–target=x86_64-w64-windows-gnu 或 –target=x86_64-w64-mingw
可以vs下载msvc库,但不影响,exe已生成,可以逆向了