ホームページ  >  記事  >  バックエンド開発  >  PHP 暗号化ファイルを段階的に復元する実用的な方法

PHP 暗号化ファイルを段階的に復元する実用的な方法

藏色散人
藏色散人転載
2021-03-05 13:49:113478ブラウズ

ps: 作者は単なる技術的なコミュニケーションを目的としており、悪意はありません。この技術を悪用しないでください。

#PHP 暗号化ファイルの実際の復元

## まず環境について話しましょう:
    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(&#39;uGpqefbDEBkqp4preQ2UaAp3RAUeJAZ5s4aERAQMkxbJTgEovHnQw6WxsA99sAhSacJCLGxZL4Q4u6zFyGveuDUoemktHGkMaB5D&#39;);
?>

上で分析した既知の条件によると:

1. 暗号化方式は eval 暗号化方式に似ています。

2.jhgo には、実行コードと復号化コードが含まれています。

3.jinhou.so には jhgo 関数が含まれています。

まず、VIM を使用して jinhou.so を大まかに開き、重要な情報があるかどうかを確認します。

PHP 暗号化ファイルを段階的に復元する実用的な方法残念ながら、解決策のソースは明確に書かれています。 https://github.com/eixom/zoeeyguard

コードを確認すると、理論的には、この拡張機能は 2 つのメソッド (ファイル暗号化用とファイル復号化用) を公開します。しかし、実際に公開されたメソッドは 1 つだけで、1 つは狡猾なプロバイダーによって削除されました。

もちろん、ソースコードはすでにあるので、あまり気にしません。

公式のソース コードを使用してコンパイルし、デコードしてみても、まだ動作しないことがわかります。

それを注意深く調べたところ、

## に非常に魔法の文字列があることがわかりました: PHP 暗号化ファイルを段階的に復元する実用的な方法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 暗号化ファイルを段階的に復元する実用的な方法

<?php require_cache(APP_PATH.&#39;/Lib/Action/User/AddonAction.class.php&#39;);
?>

その後のまとめ

1. このクラッキングには、主に暗号化スキームと暗号化コードが明確に教えてもらったおかげで、それほど時間はかかりませんでした。 2. 主な時間は暗号化パラメーターをテストすることです。幸いなことに、.so ファイルは圧縮されていません。

3. クラッキングのプロセス中に、PHP 暗号化の欠陥についても学びました。


【推奨学習:
PHP ビデオ チュートリアル

以上がPHP 暗号化ファイルを段階的に復元する実用的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。