2017-02-01 18 views
0

私はo-llvmで多くのGitHubプロジェクトを難読化しています。それはclangで実装されたコンパイル時リンカーです。 o-llvmでは、私はlibtoolを使用するGitHubプロジェクトをコンパイル/難読化しようとしていますが、難読化変換を指定するために必要なフラグがリンカーを混乱させます。 -bcf手段が、それは基本ブロックごとに実行され、-annに示し回数-boguscfループ制限、偽の制御フロー変換を適用Libtool/clang:リンカーではなくコンパイラーに引数を渡します

/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann 

:ように私は渡している

余分なフラグがありますprintfステートメントで基本ブロックに注釈を付けます。まず

、私が設定した後、メイクステップでこれをやってみました:

make CC=/path/to/obfuscator/clang CFLAGS="-O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann 

しかし、その後、GCCは、リンカであり、それは「-mllvm」オプションを知らなかったので、それが失敗しました。

./configure CC="/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann" 

この:libtoolはまた、自動的に働いCCに設定するには、バックドロップとCFLAGSを指定して、別のプロジェクトでは、 "-bcf" "-boguscf-ループ= 1" と "-ann" オプション

を削除しました

[...] -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と私のコンパイラ引数のみ、フラグを付加しようとした:「リンカー」を「-mllvm」オプションを認識し、打ち鳴らすが、対応するフラグを取り除くlibtoolのまだ呼び出しを台無しにすることになりまたは-Xcompile buそれらのどちらも認識しない。

LibtoolまたはClangに、難読化の引数をコンパイルにのみ使用し、リンクしないように指示する他の方法はありますか?

ありがとうございます。

答えて

0

私はこれを避けようとしていましたが、リンク時に他の難読化オプションのように-mllvmを落とすようにlibtoolスクリプトを修正しました。

sed -i "s/-m\*|/-mtune=*|-march=*|-mcpu=*|-mfpmath=*|-masm=*|-mieee-fp|-mno-ieee-fp|-msoft-float|-mno-fp-ret-in-387|-mno-fancy-math-387|-malign-double|-mno-align-double|-m96bit-long-double|-m128bit-long-double|-mlarge-data-threshold=*|-mrtd|-mregparm=*|-msseregparm|-mpc32|-mpc64|-mpc80|-mstackrealign|-mpreferred-stack-boundary=*|-mincoming-stack-boundary=*|-mmmx|-mno-mmx|-msse|-mno-sse|-msse2|-mno-sse2|-msse3|-mno-sse3|-mssse3|-mno-ssse3|-msse4.1|-mno-sse4.1|-msse4.2|-mno-sse4.2|-msse4|-mno-sse4|-mavx|-mno-avx|-maes|-mno-aes|-mpclmul|-mno-pclmul|-msse4a|-mno-sse4a|-mfma4|-mno-fma4|-mxop|-mno-xop|-mlwp|-mno-lwp|-m3dnow|-mno-3dnow|-mpopcnt|-mno-popcnt|-mabm|-mno-abm|-mfused-madd|-mno-fused-madd|-mcld|-mcx16|-msahf|-mmovbe|-mcrc32|-mrecip|-mveclibabi=*|-mabi=*|-mpush-args|-mno-push-args|-maccumulate-outgoing-args|-mthreads|-mno-align-stringops|-minline-all-stringops|-minline-stringops-dynamically|-mstringop-strategy=*|-momit-leaf-frame-pointer|-mtls-direct-seg-refs|-mno-tls-direct-seg-refs|-msse2avx|-mno-sse2avx|-m32|-m64|-mno-red-zone|-mcmodel=*|-mcmodel=*|-mcmodel=*|-mcmodel=*|/g" libtool 

基本的には、単に打ち鳴らすのことですが、GCCのマニュアル、マイナス-mllvmからのすべての可能な値で* -m展開します。これで、Chimeraコーパスの一部として異なるコンパイラを使用して、任意の呼び出しでvlcを自動的にコンパイルできます。

関連する問題