Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-52-generic x86_64) PHP 5.5.9-1ubuntu4.19 (cli)実践的なプロセス
暗号化されたプロジェクトと PHP 拡張ダイナミック リンク ライブラリ (jinhou.so) が手元にあります。
PHP コードは次のようになります:
<?php /* xxxx技术有限公司版权所有: 2016-09-08 08:18:00 */ jhgo('uGpqefbDEBkqp4preQ2UaAp3RAUeJAZ5s4aERAQMkxbJTgEovHnQw6WxsA99sAhSacJCLGxZL4Q4u6zFyGveuDUoemktHGkMaB5D'); ?>
上で分析した既知の条件によると:
1. 暗号化方式は eval 暗号化方式に似ています。
2.jhgo には、実行コードと復号化コードが含まれています。
3.jinhou.so には jhgo 関数が含まれています。
まず、VIM を使用して jinhou.so を大まかに開き、重要な情報があるかどうかを確認します。
残念ながら、解決策のソースは明確に書かれています。 https://github.com/eixom/zoeeyguard
コードを確認すると、理論的には、この拡張機能は 2 つのメソッド (ファイル暗号化用とファイル復号化用) を公開します。しかし、実際に公開されたメソッドは 1 つだけで、1 つは狡猾なプロバイダーによって削除されました。
もちろん、ソースコードはすでにあるので、あまり気にしません。
公式のソース コードを使用してコンパイルし、デコードしてみても、まだ動作しないことがわかります。
それを注意深く調べたところ、
## に非常に魔法の文字列があることがわかりました: 82dsa7dsas32112389uy7aydh8h2h2i412
これは彼のものなのかと思いました。鍵。コードを読み直したところ、それは真実であることがわかりました。https://github.com/eixom/zoeeyguard/blob/master/src/guard.h ファイル内。
元のものは 28dsa7dsas12312389uy7aydh8h1h2i312
です。変更を加えた後も、まだ機能しないことがわかりました。 やはり、私はまだToo Young Too Simpleです。
プログラマーの心理的観点からの分析: 通常、コードを変更する人はいません。基本的にはパラメーターを変更するだけです。
他に変更されたパラメータはありますか?しかし、他のパラメータは配列形式なので、頭の痛い問題です。/* private key */ #define PRIVATE_KEY "28dsa7dsas12312389uy7aydh8h1h2i312" #define PRIVATE_KEY_LEN sizeof(PRIVATE_KEY) /* order */ static const unsigned char OBFUSCATED_ORDER[] = { 13, 6, 5, 7, 1, 15, 14, 20 , 9, 16, 19, 4, 18, 10, 2, 8 , 12, 3, 11, 0, 17 }; #define ORDER_SIZE sizeof(OBFUSCATED_ORDER) / sizeof(* OBFUSCATED_ORDER) /* alphabet for base64 */ static const unsigned char OBFUSCATED_ALPHABET[] = { 's', '4', 'N', 'E', 'k', 'X', 'c', 'u' , 'J', '2', 'U', 'o', 'O', 'w', 'K', 'v' , 'h', 'H', 'C', '/', 'D', 'q', 'l', 'R' , 'B', 'r', '5', 'Z', 'S', 'Q', '6', 'W' , '3', 'L', 'j', '8', '1', 'z', '0', 'G' , 'n', 'e', 'y', 'b', 'I', 'd', 'i', 'P' , 'A', '9', '7', '+', 'm', 'V', 'M', 'Y' , 'F', 'g', 'f', 'p', 'a', 'T', 't', 'x' }; #define ALPHABET_SIZE 64現時点では、キラー ツールである IDA Pro v6.8 (逆コンパイル アーティファクト) を使用する必要があります。左が通常版、右がjinhou.soです。
guard.h 内のファイルをデータに応じて変更します。再コンパイル後、正常に復号化されました。
<?php require_cache(APP_PATH.'/Lib/Action/User/AddonAction.class.php'); ?>
その後のまとめ
1. このクラッキングには、主に暗号化スキームと暗号化コードが明確に教えてもらったおかげで、それほど時間はかかりませんでした。 2. 主な時間は暗号化パラメーターをテストすることです。幸いなことに、.so ファイルは圧縮されていません。
3. クラッキングのプロセス中に、PHP 暗号化の欠陥についても学びました。
【推奨学習:
PHP ビデオ チュートリアル