Skip to content

gmh5225/lambdaize-loop

 
 

Repository files navigation

lambdaize-loop

卒論用に作ったLLVM IRの難読化プログラムです。詳しい仕組みはホームページで公開している卒論を参照してください。

コンパイルと使用にはLLVMのインストールが必要になります。

lambdaize-loop

このプログラムの本体に当たる部分です。makeコマンドでlambdaize-loop.soができるので、

opt -load-pass-plugin lambdaize-loop.so -passes=lambdaize-loop -o OBFUSCATED_IR INPUT_IR

とするとINPUT_IRを難読化してOBFUSCATED_IRができます。但しこれ単体ではまだコンパイルできません。まずlooperディレクトリのほうでmakeコマンドを叩いてlooper.bcを作ってください。またこのとき、make MAX_RECURSION_COUNT=Nとすると再帰を行う最大回数を指定できます(デフォルトでは8192回)。そのあとOBFUSCATED_IRとlooper.bcをこんな感じでリンクしてください。

llvm-link -o OUTPUT_IR OBFUSCATED_IR looper.bc

あとはOUTPUT_IRをClangでコンパイルすれば実行ファイルになります。

test

名前の通りテストに使っていたディレクトリです。test.sh SOURCE [INPUT]とすると、SOURCEを普通にコンパイルしてできた実行ファイルにINPUTを入力したときの出力とSOURCEを難読化してからコンパイルしてできた実行ファイルにINPUTを入力したときの出力がちゃんと一致するか調べてくれます。例えばこんな感じで使えます。

test/test.sh test/sha256.cpp /bin/ls

utilities

卒論用の資料を作るのに使っていた便利スクリプト類です。

average_time.sh

average_time.sh -n REPEAT_TIME EXE_FILEとするとEXE_FILEをREPEAT_TIME回実行し、1回あたりの平均実行時間を表示してくれます。

plot-instdist.sh

plot-instdist.sh EXE_FILE1 EXE_FILE2とするとEXE_FILE1とEXE_FILE2それぞれに含まれる機械語命令の出現分布をgnuplotで表示してくれます。

count-cyclomatic-complexity

count-cyclomatic-complexity/count-cyclomatic-complexity.sh INPUT_IRとするとINPUT_IR内の関数の数、基本ブロックの数、辺の数、循環的複雑度を表示してくれます。

About

LLVM IR obfuscation tool, developed for my bachelor thesis.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 80.6%
  • C 6.0%
  • Makefile 5.3%
  • Shell 4.5%
  • Awk 3.6%