ホームページ > バックエンド開発 > PHPチュートリアル > Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:28:51
オリジナル
1112 人が閲覧しました

実はこれを既にネット上で解析してツールとして書いている方がいましたが、色々試してみましたがどれもうまくいかなかったので、最初から解析してみることにしました。

Aegis 暗号化されたソース コードを開くと、次のようなコードが表示されます

Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

写真に示すように、広告コメントが書かれていますが、ファイルの最後にコードが変更されているかどうかを確認するMD5確認コードがあるため削除できません

Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

コード部分をよく見ると、文字化けだらけであることが分かりました。実は、これはすべて欺瞞です。
latin1 文字範囲に拡張するために、その変数の一致規則性は $[a- です。 zA-Z_x7f-xff][wx7f-xff] ]* この形式。
これは数日前に分析され、最終的に公式Webサイトで答えを見つけました。「Aegis暗号化と復号化チュートリアル(1) PHP変数に使用できる文字」を参照してください。

それは少し突飛ですが、復号化の最初のステップを実行しましょう。

追記: これは私の復号化のアイデアです。もっと良い方法があるので、それを共有したいと思います。 。

コードをコピーします コードは次のとおりです:
$str = file_get_contents("1.php");

//最初のステップはすべての変数を置き換えることです

// 通常 $[a-zA-Z_x7f-xff][wx7f-xff]*
preg_match_all('|$[a-zA-Z_x7f-xff][wx7f-xff] ]* |', $str, $params) または die('err 0.');
$params = array_unique($params[0]); // 重複を削除します
$replace = array();
$i = 1;
foreach ($params as $v) {
$replace[] = '$p' . $i;
tolog($v . ' => $p' . $i); $i++ ;
}
$str = str_replace($params, $replace, $str);

// 2 番目のステップは、すべての関数名を置き換えることです

// 通常の関数 ([a-zA-Z_x7f-xff][wx7f-xff]*)
preg_match_all('|function ([a-zA-Z_x7f-xff) ][ wx7f-xff]*)|', $str, $params) または die('err 0.');
$params = array_unique($params[1]); // 重複を削除します
$replace = array( );
$i = 1;
foreach ($params as $v) {
$replace[] = 'fun' . $i;
tolog($v . ' => fun' . $i);ログからログへ
$i++;
}
$str = str_replace($params, $replace, $str);

// 3 番目のステップは、すべての表示不可能な文字を置換することです

function tohex($m) {

$p = urlencode($m[0]); // すべての非表示の文字を 16 進数に変換します
$p = str_replace( '%', 'x', $p);
$p = str_replace('+', ' ', $p); // urlencode はスペースを + に変換します
return $p;
}
$str = preg_replace_callback( '|[x00-x08x0e-x1fx7f-xff]|s', "tohex", $str);

// ファイルに書き込みます

file_put_contents("1_t1.php", $str);


function tolog($str) {

file_put_contents("replace_log.txt", $str . "n", FILE_APPEND);

}
?>


(ログにはコードが記録されており、その後の二次的な復号化に役立ちます。) 実行後、1_t1.php ファイルを開くと、次のようなコードが表示されます。


それをフォーマットするツールを見つけてください。私が使用している phpstorm には独自のフォーマット機能があり、そうすればコードがより明確になります。 Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

さらに並べ替えた後、次のコードが得られました: Aegis 暗号化および復号化チュートリアル (2) PHP Aegis Decryption_PHP チュートリアル

コードをコピーします

コードは次のとおりです:

//コードの復号開始<<===
if (!define('IN_DECODE_82d1b9a966825e3524eb0ab6e9f21aa7')) {
define('xA130x8C', true);

function fun1($ str、$flg ="") {
if(!$flg) return(base64_decode($str));

$ret = '?';
for($i=0; $i $c = ord($str[$i]);
$ret .= $c< ;245 ? ( $c>136 ? chr($c/2) : $str[$i] ) : "";
}
returnbase64_decode($ret);
}

function fun2(&$p14)
{
{
global $p15, $p16, $p17, $p18, $p19, $p3;
@$p17($p18, $p19 . '(@$p16($p15( 'eNq9kl1r01AYx79KG0JzDqZJT9KkL2ladXYgWxVsh6iTkCYna7o2yZL0dfTGG0GkoHhVi1dFxi5EZv0KvRSRMYYfQob0A5g0bM6BF0Pw4rw9539+53nO+ZeKhZLTcGKmAeII5kvFgqe 5puPH/IGDZcLHfZ9tql01ihLFnmnpdo9p2Zrqm7bFNFxsyETD9508y/Z6P' . $p15(fun1('xACxA8x94x8ExA2xD65xE6xA4xA8x8A=', 'x9ExA8A4xB4Dx92xF0xB4x8Ex8Cx D8x9AxF4xD61x9CxA8xC60x9AxF4xA4xD4xB2xF4x9A3x9AxD4xCExEEx9CxDAxB4xD2x9AxF4x8A3x9Cx8ExAA=')) 'juztsoMT9cF1q27qsY83WcSLslF08kLOcjuo5NSeK WU7AvMClcT2l1kWcMzikqpmEZ+5YssiJWMO6kVY5geezhihkNYx4MZtDGp9OpwmpwEapFQvxZDKqBVu6aUjkcySgZ/IhyqDPgFrws58f+Teni/HZ1yPuUKZo6t3BrfT8zuuz+fjl6WR5gqYHi9RkOT s+Wk74yfGXH9Pv82+T5Qt+Og7kUCLfB8nMLvPCdn1O8NIRCpCfUE4Y05S117h9b/NBebe7lmraw0ftbu1h5fHA7jfX1NxGbcvrVtWK4G4NO6LGubVqu1vdqAiD+ 3vNVACE+xFHjgoG/4ajKYqOeEHFEfcmeZLJvgXnUdOIAcfFO0pb9bUGIFjA3CjB7fCjtwFL0IqyfnezrCg0+QGl+FcQxvajmRwNT9BTaRTDLQ9fbJwfkUZkZBPFcGTDdrAFIgVDhHiCptzwIy40y sojhotVHfyO0obZwp45xH8ehlAytJbt4UtSKAGvU/d8F1yB0kmeg3G5rQsgbH8RpVYyyFA rU1zPBzCR0E0MqPUg2WoAy5fdsLiO5WH/6kVQGv1n1/wChxaEtA==')).$p16($p15($p3) )))', "82d1b9a966825e3524eb0ab6e9f21aa7");
}
}
グローバル $p15, $p16 、$ p17、$ p18、$ p19、$ p3;
$ p17 = 'preg_replace'; p16 = 'gzuncompress';
$p3 = '';

@$p17($p18, $p19 . '(@$p16($p15('eNplks9Og0AQxu8mvgMlxrYHoMCyQPkXvdhDE5to4sE0BtihoMgSSqWN8RV60pMX73oy8RG8e/J5bLutIeWyyfebnS/zTcZzbS+) Pcy6JOi252/dcexoWSV5y5SIHhy9hXkq3/oPPKO9WSUZoJaY09MuEZmJcQOTwcVnmfUmqqkpcmZFcpMVEWv2E+Vp795Q4BEJK4Hj93NzBwjEUIgemb2JsKB' $p15(fun1('xB21xC65xC8A=) =', 'x9ExA8A4xB4Dx92xF0xB4x8Ex8CxD8x9AxF4xD61x9CxA8xC60x9AxF4xA4xD4xB2xF4x9A3x9AxD4xCExEEx9CxDAxB4xD2x9AxF4x8A3x9Cx8ExAA= ')) 'oIg6PkBBjNSZN/Xj6fJJHOwgiEEEiFf0VTViLBmhCCr2DDlUEUI8ZYtsdFcuyUILAtkJIksjyU7PIAwplx7AGlKuStapMQOCrdt7QqXcTLlRoPRmmx7uKOz4fnpyfDi+k3T8HLs/Otf3XityU9F ea/JL6z36uUXpOOfmn5GhvpR00sZoe+xk83S1JplUyg7e63dfcwcGpgZNfBmvAbdZGhQ'.($p20.=fun2($p20)))))', "82d1b9a966825e3524eb0ab6e9f21aa7" . = 'xxDAxCB)
vnqhBNLREkvC0jozYmvTWMZyoxjCa9KTUsvSaM5rUzu6c2rTSmvSKM5yOqj0=

OFF .xADH5xCF2x88xF0ux8BL*xCDxF2223.

xB1xF0FF1xCF+x02x00xB6xCA
xBE'));
//復号コードの終わり===>>
return true;?>76cde264ef549deac4d0fae860b 50010

残りは基本的なコードです。通常の修飾子に e が含まれている場合、2 番目のパラメータが解析されて php コードとして実行されます。最後のeが光っています。
また、fun2の内容を再度ファイルに出力し、変数を上記の方法で置き換えると良いでしょう。
@$p17 その行は実際のソース コードですが、fun2 が実際の検証および出力末尾の Base64 コードであるため、末尾の部分は fun2 関数内にあります。
復号化に必要な知識はすべてすでに述べたので、残りを書くのが面倒です

明日、このツールを使用して書いた復号コードを暗号化して投稿し、誰もが呼び出せる復号APIを提供します。

ふりや見せびらかしているわけではありません。誰かに釣り方を教えるよりも、釣り方を教えるほうが良いからです。自分で十分な食べ物や衣服を作ることができるとも言えます。
もちろん過程ではなく結果だけを求める人もいるでしょうから、APIを直接渡しても同じですよね?

http://www.bkjia.com/PHPjc/780719.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/780719.html技術記事実はこれを既にネット上で解析してツールとして書いている方がいましたが、色々試してみましたがどれもうまくいかなかったので、最初から解析してみることにしました。 暗号化されたイージスを開きます...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート