クラックターゲット: ASP トロイの木馬の暗号化されたログイン パスワードをクラックし、ASP トロイの木馬のパスワードをクラックします。トロイの木馬のバージョンの説明がないため、トロイの木馬の具体的な名前はわかりません。
クラックには 2 つの方法があります。暗号文を暗号化されたパスワードに置き換える方法と、暗号文と暗号化アルゴリズムを使用してパスワードを復号化する方法です。前者は実際には亀裂ではありません。
クラックの目的: 単なる楽しみのためです。
ASP ソース コードを入手できない場合、パスワードを解読する可能性はありません。中国の友人は、Web ページにアクセスできたが、そのホームページには ASP トロイの木馬が存在していたが、パスワードが暗号化されていたことが分かったと言いました。それからこのアニメーションがあります。さて、ナンセンスが多すぎるので、この説明はかなり長くなるので、覚悟してください。
ASP トロイの木馬のログイン パスワード検証のキー コードは次のとおりです。
if Epass(trim(request.form("password")))="q_ux624q|p" then
response.cookies("パスワード")="8811748"
...
<%
エンドセレクト
関数 Epass(パス)
temppass=StrReverse(left(pass&"zxcvbnm,./",10))
テンプルン=レン(パス)
mmパスワード=""
j=1~10の場合
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
次
Epass=replace(mmpassword,"'","B")
終了関数
%>
当然のことながら、入力されたパスワードは Epass 関数を使用して暗号化され、取得された暗号文が元の暗号文と比較されます。プログラミングの基礎、特に VB を少しでも持っていれば、Epass の暗号化アルゴリズムは一目瞭然です。そうでない場合は、私の説明ですぐに理解できると思います。関数では、パスワードを保持する変数が pass です。 pass&"zxcvbnm,./" パス内のコンテンツを zxcvbnm,./ に接続して、新しい文字列を取得します。 left(pass&"zxcvbnm,./",10) は最初の 10 桁を受け取ります。 StrReverse 関数は、結果の 10 桁の文字列の順序を逆にします。 len(pass) はパスワードの長さを取得します。以下はループです。取得した文字列の各ビットのAsciiコード-パスワード長+丸め(文字位置*1.1)を取得し、取得した値を文字に変換して再接続します。最後に、取得した文字列内のすべての ' 文字を B に置き換えて、暗号文を生成します。当社が暗号化アルゴリズムを抽出し、元の暗号文を独自の暗号文に置き換えると、対応するパスワードもお客様のパスワードになります。しかし、先ほども言いましたが、これは実際には亀裂ではありません。
愛を入力すると、暗号化プロセスは次のようになります。
愛
lovezxcvbnm,./ '接続してください
lovezxcvbn 'トップ 10 を獲得
nbvcxzevol '順序が逆になりました
n
110(ASCII)-4(数字)+int(1(位置)*1.1)=107
107 の ASCII コードは k となり、最終的な暗号文は次のようになります。
k`ucy|hzts
暗号文と暗号化アルゴリズムを通じてパスワードを推測できます。アルゴリズムの最後のステップから始めて、ステップを上げていきます。最後のステップは、すべての ' を B に置き換えることです。B を ' に戻す必要がありますか? 答えはノーです。最終的な暗号文を取得できる限り、パスワードが異なる可能性があります。 B が 10 個ある場合、元のパスワードの数は 2 の 10 乗です。元のパスワードは 1 つしかありませんが、1024 個のパスワードはすべて正しいです。完璧に解読したい場合は、すべての組み合わせを自分で書いてみることができます。
この場合、このステップは無視できます。
上記のアルゴリズムは非常に明確で、
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
必要なのは、単に + と - を置き換えるだけです。
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
ただし、パスワードの長さが事前にわからないという問題もあります。パスワードが 1 ~ 10 桁の長すぎます。
次に、1 から 10 までのループを使用して考えられるすべてのパスワードを検索し、StrReverse 関数を使用して順序を逆にします。
では、最終的に取得したパスワードはどのように判断すればよいのでしょうか? pass&"zxcvbnm,./" を使用すると、パスワードの末尾に zxvbnm,./ の最初の数字があるかどうかを確認できます。
さて、これが本当のパスワードです。パスワードが 10 桁であれば、後で接続することはないので、常に正しいパスワードになります。したがって、2 つの答えが得られるかもしれません。
以下は私が作成した復号化関数です。
functionCcode(コード)
Templen1=1 ~ 10 の場合
mmcode=""
j=1~10の場合
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
次
Ccode=strReverse(mmcode)
response.write "パスワード"&templen1&":"&Ccode&"<br>"
if Mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) および Templen1<>10 then
結果=左(Cコード,templen1)
次
response.write "最後のパスワード:"&result
た関数は
、このような短期間では完全に習得できない可能性がありますが、これは正常です。その後、ドキュメントと暗号化および復号化された ASP ソース コードを添付して持ち帰ることができます。注意深く勉強してください。同様に、パスワード 10 は常に正しいです。次に、ASP で元の暗号文を取得し、結果がどうなるかを確認します。 OK、両方のパスワードを使用してログインできます。テストのために、ローカルに IIS を想定しました。Web サーバーをローカルにセットアップできない場合は、私に連絡して他の言語で作成することができます。