【发布时间】:2017-02-01 00:25:34
【问题描述】:
我用o-llvm 混淆了许多 GitHub 项目。这是一个用 clang 实现的编译时链接器。使用 o-llvm,我正在尝试编译/混淆一个使用 libtool 的 GitHub 项目,但是指定混淆转换所需的标志会弄乱链接器。
我传入的额外标志如下:
/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann
-bcf 表示应用虚假控制流转换,-boguscf-loop 限制每个基本块运行的次数,-ann 表示使用 printf 语句注释基本块。
起初,我尝试在配置后的 make 步骤中这样做:
make CC=/path/to/obfuscator/clang CFLAGS="-O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann
但是 gcc 是链接器,它失败了,因为它不知道“-mllvm”选项。 Libtool 还自动删除了“-bcf”、“-boguscf-loop=1”和“-ann”选项
在另一个项目中,回退到在 CC 中配置和指定 CFLAGS 有效:
./configure CC="/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann"
这使得“链接器”成为clang,它识别“-mllvm”选项,但libtool删除相应的标志仍然会混淆调用:
[...] -O0 -mllvm -mllvm -mllvm -Wl,-z -Wl,defs -Wl,-soname [...]
clang: warning: argument unused during compilation: '-mllvm -bcf'
clang: warning: argument unused during compilation: '-mllvm -boguscf-loop=1'
clang: warning: argument unused during compilation: '-mllvm -ann'
clang: warning: argument unused during compilation: '-mllvm -mllvm'
clang: warning: argument unused during compilation: '-mllvm -Wl,-z'
/usr/bin/ld: error: cannot open defs: No such file or directory
我尝试使用 -Wc、flag 或 -Xcompile 在我的编译器专用参数前面添加,但 clang 无法识别这些。
有没有其他方法可以告诉 Libtool 或 Clang 只使用混淆参数进行编译而不是链接?
谢谢。
【问题讨论】: