Skip to content

Latest commit

 

History

History
129 lines (103 loc) · 5.53 KB

README_JP.md

File metadata and controls

129 lines (103 loc) · 5.53 KB

DeClang

概要

DeClang は LLVM フレームワークを利用したコンパイル型アンチチートツールです。

既存のオープンソースプロジェクトである ollvm (https://github.com/obfuscator-llvm/obfuscator) を拡張する形で実装し、現時点では難読化機能のみを公開するに至りました。他のアンチチート機能についても、今後公開する可能性があります。

難読化

コンパイル型アンチチートツールは、従来のパッカー型アンチチートツールと比べて、様々な利点が存在します。詳しくは下記資料をご覧ください。

https://www.slideshare.net/dena_tech/declang-clang-dena-techcon-2020

サポートアーキテクチャ

下記のホストアーキテクチャの動作確認をしています。

  • x86_64 macOS
  • x86_64 Linux
  • x86_64 Windows

下記のターゲットアーキテクチャの動作確認をしています。

  • arm64 ELF (Android)
  • arm64 Mach-O (iPhone)
  • x86_64 ELF (Linux)
  • x86_64 Mach-O (macOS)

ビルド方法

$ git clone https://github.com/DeNA/DeClang
$ cd DeClang
$ cd script
$ bash build.sh
...
$ bash build_tools.sh
...
$ bash release.sh v1.0.0
...

上記コマンドが正常に完了すると、プロジェクトのTopディレクトリにRelease-v1.0.0というディレクトリが生成されます。

インストール方法

  • DECLANG_HOMEを定義します

    export DECLANG_HOME=/path/to/declang_home/
    
  • DECLANG_HOMEにReleaseをコピーします。

    • 手動でビルドした場合
      • Release-v1.0.0 を $DECLANG_HOME/.DeClang としてコピーします。
      mv Release-v1.0.0 $DECLANG_HOME/.DeClang
      
    • DeClangのReleasesページからDeClangバイナリをダウンロードした場合
      • 展開後の Release を $DECLANG_HOME/.DeClang としてコピーします
      mv Release/ $DECLANG_HOME/.DeClang
      
  • android-ndkの標準コンパイラとしてDeClangを利用したい場合には、次のコマンドを実行します。

    bash $DECLANG_HOME/.DeClang/script/ndk_setup.sh {/path/to/ndk_root}
    

    設定をDeClangから標準のコンパイラに戻したい場合は次のようにします。

    bash $DECLANG_HOME/.DeClang/script/ndk_unset.sh {/path/to/ndk_root}
    
  • UnityのWebGLビルドの標準コンパイラとしてDeClangを利用したい場合には、次のコマンドを実行します。

    bash $DECLANG_HOME/.DeClang/script/webgl_setup.sh {/path/to/unity_webgl_support}
    

    設定をDeClangから標準のコンパイラに戻したい場合は次のようにします。

    bash $DECLANG_HOME/.DeClang/script/webgl_unset.sh {/path/to/unity_webgl_support}
    

ビルド済みバイナリ

  • Release-Linux-*-ubuntu22.04.zip
    • C/C++ compiler for Ubuntu 22.04
  • Release-MacArm-*.zip
    • C/C++/ObjC compiler for AppleSilicon Mac
  • Release-MacIntel-*.zip
    • C/C++/ObjC compiler for Intel Mac
  • Release-Win-*.zip
    • C/C++ compiler for Windows
  • Release-Swift-Toolchain-*.zip
    • Swift compiler for AppleSilicon/Intel Mac
    • インストール方法
      1. tar -xzf swift-LOCAL-*-a-osx.tar.gz -C ~/ を実行します
      2. Xcode を開いて select Xcode->Toolchains->Local Swift Development Snapshot を選択します
      3. ~/.DeClang/config.pre.json を編集して ~/.DeClang/gen_config.sh を実行します
      4. Xcodeであなたのアプリケーションをビルドします

使い方

  • $DECLANG_HOME/.DeClang配下のconfig.pre.jsonを編集します。

    vi $DECLANG_HOME/.DeClang/config.pre.json
    
    キー 説明
    build_seed 難読化で利用されるシード string
    overall_obfuscation コード全体に適用される簡易難読化の強さ integer 0-100 (default 0)
    flatten[name] flatten難読化を適用する関数名 regex string
    flatten[seed] flatten難読化内部で使用するシード値 16-digit hexadecimal string
    flatten[split_level] flatten難読化の際にBasic Blockを分割するレベル integer (default 1)
    enable_obfuscation flatten難読化を有効にするか否か integer 0-1 (default 1)
  • config.pre.jsonからconfig.jsonを生成します。

    $DECLANG_HOME/.DeClang/gen_config.sh -path $DECLANG_HOME/.DeClang/ -seed {your seed}
    

    seedは任意の文字列で、ビルドごとに変えるのが好ましいです。

  • 以上で準備が整ったので、ndk-build等を通して、任意プログラムをコンパイルすればconfig.pre.jsonの設定にしたがって難読化が適用されます。

    • (ご注意) ndk-build等を実行する際は、環境変数DECLANG_HOMEが設定されていることを確認してください。

注意点

Unity上でビルドするときは、$DECLANG_HOMEは効かないので、デフォルトの~/.DeClang/が使われてしまいます。なのでコマンドラインからDECLANG_HOMEを設定した状態でビルドしてください。

Gradleを用いてAndroidライブラリをビルドするときは、build.gradle内に記載されているndkVersionに応じて、ndk_setup.shを実行してください。 また、CMakefile.txt内でset(CMAKE_CXX_FLAGS_RELEASE "-O2") を記載し、最適化を有効にしてください。 DeClangは最適化を有効にしないと、難読化を行うLLVM Passに処理が渡らず、難読化が行われません。