起因#
最近暇つぶしに、あるリソースサイトを見ていたら、浪子易支付のソースコードが投稿されているのを見つけました。浪子易支付は以前に聞いたことがあるような気がしますが、評判はあまりよくないように思います。この記事は作者が投稿したもので、コメント欄を見ると楽しいです。
興味が湧いたので、ソースコードをダウンロードして見てみました。
過程#
コードをざっと見てみると、2 つのファイルが暗号化されています。適当に 1 つ開いて構造を見てみましょう。
define('iVEizn0925',__FILE__);
$YyBEPP=base64_decode("bjF6Yi9tYTVcdnQwaTI4LXB4dXF5KjZscmtkZzlfZWhjc3dvNCtmMzdqWHpma29GRWpwd21TSFRoQVFuc0R1cVJJcmJ0UGRNVlllSk5hWml4S0dDT1dMQnlsY3ZVZw==");
$AWrjGM=$YyBEPP[3].$YyBEPP[6].$YyBEPP[33].$YyBEPP[30];
$BDMKWe=$YyBEPP[33].$YyBEPP[10].$YyBEPP[24].$YyBEPP[10].$YyBEPP[24];
$gJozBE=$BDMKWe[0].$YyBEPP[18].$YyBEPP[3].$BDMKWe[0].$BDMKWe[1].$YyBEPP[24];
$steYGh=$YyBEPP[7].$YyBEPP[13];$AWrjGM.=$YyBEPP[22].$YyBEPP[36].$YyBEPP[29].$YyBEPP[26].$YyBEPP[30].$YyBEPP[32].$YyBEPP[35].$YyBEPP[26].$YyBEPP[30];
eval($AWrjGM("加密されたコードの内容"));?>
作者は暗号化について何か誤解があるのか、自分のスキルを過大評価しているようですが、これは暗号化されていないのとほとんど変わりません。
解読のアイデア#
この方法では、通常、eval 関数をフックしてソースコードを取得することができます。ここでは、eval を file_put_contents に変更する方法を採用しています。なぜなら、それが簡単だからです。
作者は複数回の暗号化を採用していますが、一層ずつ解読していけば問題ありません。技術的な難しさはありません。
解読が完了したら、認証コードは暗号化されたファイルの最初の行にあります。
<?php
include("../includes/common.php");
if(!isset($_SESSION['authcode'])){
$query = curl_get("http://hidden-url/check.php?url=".$_SERVER["HTTP_HOST"]."&authcode=".authcode);
if ($query = json_decode($query, true)) {
if ($query["code"] == 1) {
$_SESSION["authcode"] = authcode;
}else{
sysmsg("<h3>".$query["msg"]."</h3>", true);
}
}
}
?>
削除するか、または /includes/functions.php 内の curl_get 関数を変更し、パラメータに hidden-url が含まれている場合には単に{"code":1"}
を返すようにします。
吐槽#
正直言って、オリジナルの易支付とあまり変わりませんが、この認証は最低でも 58 元です...。