免責事項:この記事は学習とコミュニケーションのみを目的としており、違法な目的、商業活動などに使用することを禁止します。それ以外の場合は、ご自身の責任で行ってください。侵害がある場合は、通知して削除してください。ありがとうございます。このチュートリアルは、特定の Web サイト向けに特別に書かれたものではなく、純粋に技術的な研究を目的としています。
事例分析
対象ケース:ケースリンク
1. 対応するインターフェース
2. 対応する困難
パラメトリック分析
最初のリクエストで返された set-cookie は、対応するインターフェイスが 2 回目にリクエストされ、取得された set-cookie を通じてデータを取得できます。初めて取得された cookie は 2 回目の cookie に渡されます
。
パラメータを暗号化して返し、次のリクエストでデータを取得します。初めてクッキーが
リクエストされたとき、ページは対応する js も同期的に返し、js の暗号化されたフィールドを渡しますそして、
Cookieを使用してすべてのステップの二次検証を実行しますすでに理解しましたので、ブレークポイントの設定方法を分析しましょう
複数のリクエストを通じて、赤枠の値が変更されていないことがわかります。検索してみると、
上記のブロックが返されることがわかります。リクエストが行われたとき、URL を生成するにはこの値を他の値と組み合わせる必要があると大胆に推測し、それをjs ファイルを使用して対応する呼び出しを見つけます。次に、デバッグ方法を説明します。ここで見つけました。
更新すると、無限デバッガに入ります。これには、初めて生成された js も含まれます。次に、赤いボックスをクリックして上記の位置を見つけます。ブレークポイントを設定します。ここでは、
ワイヤレス デバッガを右クリックしてフィルタリングできます。ここで約 2 行は一時停止しないでください。一度ループから抜け出して、
ブレークポイントの位置
に入りました。分析したところ、前者と後者は固定されているため、2 つのパラメータを除外しました。n
の値が d によって処理されたことがわかりました。
ここで、toSting プロセスが d に対して実行されることがわかります。d は、
k 内の関数を呼び出すことによって行われます。 y の値は自分で確認できます。デバッグを通じて、
k の関数が呼び出され、渡された値が関数と対応する d 値であることがわかります。
ここでは、gV('0x570', 'z6h!') が k で KPYxL 関数を呼び出し、次に 2 つの入力パラメーターを処理していることがわかります。最初の入力パラメーターは関数であるため、最初の入力パラメーター関数を呼び出し、次に関数を呼び出します。観察する
と、これら 2 つの関数によって生成された値が k のメソッドであることがわかりました。
その後、それを書き込み
、この行を js にコピーして表示できます。このとき、次のように実行します。何が報告されているかを確認してください。間違いを埋め合わせてください。ここには
k がないことがわかり
、ここに k をコピーします。この時点では、実行で不足しているものを補えば十分です。
その後の分析では、この N がd の値を取得し、base64 で暗号化すると、ノードで直接呼び出すことができます。btoa は
ここで終了です。不足している関数を補うには、上記のプロセスに従ってください。!!
バイバイ!!!
結果を示す
コード表示
var Q = '/WZWSREL2Z6aHNoYW5naGFpLzExMzU3Ny8xMTQ4MzIvMTE0OTE4LzE0NjgxL2luZGV4Mi5odG1s';
var M = 'Z!]XbG+5&';
var t = '6104';
var k = {
'yvWGd': function (V, p) {
return V + p;
},
'ucTiE': function (V) {
return V();
},
'KPYxL': function (V, p) {
return V(p);
},
};
function y() {
var v = {
'bATca': '5|2|0' + "|1|4|" + '3',
'FbdfM': function (C, d) {
return C < d;
},
'fvfPH': function (C, d) {
return C + d;
}
};
var A = v['bATca'].split('|');
var u = -0x1d8b * -0x1 + 0x155f + 0x3a3 * -0xe;
while (!![]) {
switch (A[u++]) {
case '0':
for (k = 0x1 * 0x21ad + 0x1 * -0x3cd + -0x20 * 0xef; v['FbdfM'](k, M['lengt' + 'h']); k++) {
P += M['charC' + 'odeAt'](k);
}
continue;
case '1':
P *= t;
continue;
case '2':
var k = 0x258f + 0x2 * 0x125f + 0x4a4d * -0x1;
continue;
case '3':
return v["fvfPH"]('WZWS_CONFIRM_PREFIX_LABEL', P);
case '4':
P += -0x1 * 0x2317d + -0x1 * 0x1a622 + 0x589a6 * 0x1;
continue;
case '5':
var P = -0xa * 0x3ca + -0x1668 + 0x22 * 0x1c6;
continue;
}
break;
}
};
var d = k['ucTiE'](y);
console.log(d)
var N = btoa(d['toStr' + "ing"]());
var K = k["yvWGd"](k['yvWGd'](Q, '?wzwschallenge='), N);
console.log(K)