iOS OLLVM のコンパイルからアプリケーションまで
ここで言うまでもなく、OLLLM は、文字列難読化や制御フロー難読化など、コンパイル中にコードを混乱させるために使用されます。これにより、静的解析を逆コンパイルする際に命令の実行ロジックをスムーズに明らかにすることができなくなり、APP の静的解析が大幅に増加し、APP が保護されます。
ヒカリ
私たちはオープンソースプロジェクトHikariを使用しており、GitHubは
以下をサポートしています:
1. 擬似制御フローの有効化
2. 制御フローの平坦化
3. 基本ブロックのセグメント
化 4. 命令置換
5. アンチクラスダンプ
6. レジスタに基づく相対ジャンプ、IDA/Hopper (一般に F5 として知られています)
7、文字列暗号化
8、関数のカプセル化などの疑似コードを完全に破壊することができます。
これ以上の苦労はせずに、直接トピックに進みましょう。
1. 環境構築
1.1 CMAKEのインストール
ソースコードからコンパイルされるため、cmakeをインストールする必要があります。
公式 Web サイトのダウンロード アドレス: https://cmake.org/download/
適切なバージョンを見つけてダウンロードします。私のバージョンは
cmake --version
cmake version 3.10.2
インストール、構成:
メニュー バーから選択します: [ツール] - コマンド ラインで使用するインストール方法
cmake --version
インストールが完了したかどうかをテストします。
1.2 SWIGのインストール
公式 Web サイトにアクセスしてSWIGをダウンロードします。私はバージョン 3.0.12 を使用しています。
ダウンロードが完了したら、解凍して swig-3.0.12 と入力します。
./configure
make
sudo make install
インストールが完了したかどうかをテストする
swig -version
1.3 Z3のインストール
brew install z3
2. ヒカリをダウンロード
最新バージョンのソース コードを使用しています。リリース
には他の GitHub 参照があるため、自分でダウンロードして指定された場所に置く必要があります:
1.ヘッダーを /include/llvm/Transforms/Obfuscation に置きます。
2.コアを/lib/Transforms/Obfuscation に置きます。
3. コンパイル
mkdir Build
cd Build
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on ../Hikari
ninja
まず地雷除去:
1. cmake -G “Ninja” -DCMAKE_BUILD_… を実行すると、たいてい不足しているものがあるので、上記と同様に対応するファイルをダウンロードして指定のディレクトリに配置し、基本的にはコンパイルを通します。
2. ninja を実行すると、iOS 固有の環境をコンパイルするときに、次の 2 つのエラーが報告されます:
不完全な型 'struct stat64' への 'sizeof' の適用が無効です
不完全な型 'struct statfs64' への 'sizeof' の適用が無効です
現時点では, エラー ファイル projects/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc を見つけるには、ファイルを開いて対応する内容を変更します:
struct stat64 を struct stat
truct statfs64 を truct statfs に
変更します。 3. ninja を実行すると、致命的なエラー: Lipo: / Build/lib/libclang_rt.builtins_arm64_ios.a と /Build/lib/libclang_rt.builtins_arm64_iossim.a は同じアーキテクチャ (arm64) を持ち、同じ Fat 出力ファイル内に置くことはできません
M1 チップの arm64 アーキテクチャもコンパイル中に存在するため、build.ninja を直接変更し、対応する Lipo -output コマンドを見つけて、M1 チップの arm64 アーキテクチャを削除してマージします。
-arch arm64 /ボリューム/IosWorkSpace/OLLVM/Hikari/Build/lib/libclang_rt.builtins_arm64_iossim.a
コンパイルを続行します
ninja install
git clone https://github.com/HikariObfuscator/Resources.git ~/Hikari
ファイルのマイニングに進み、
ディレクトリ /usr/local/libexec を作成できません。おそらく必要です。
これは、指定されたインストール パスに権限がないため、Makefile の次のパラメータを変更する必要があるためです。
将:
"/usr/local/libexec"
修改为:
"$(ROMFS)/usr/local/libexec"