序文
第 4 世代のエクストリーム エクスペリエンスははるかに単純であるようで、スキルがなくても、環境党が 5 分で直接勝利しました。
URL: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNoYS1kZW1v
1. 分析
公式ウェブサイトに直接アクセスし、スライダーをスライドしてコンソールを開くと、
検証リクエストがあることがわかります。そこから返されるリクエストは、移動距離を送信する場所であるはずです。次に、どのようなデータが送信されているかを確認します。極端な例を見ると、古いテストは依然として w パラメーターです。(他のパラメーターはロード リクエストで取得できるため、ここでは詳しく説明しません。読者は実際に行って自分の目で確認してください)
ランチャーを開いてスタックに移動すると、このステップはほぼ同じです
。 w パラメータが必要です
。上記を見ると、r の呼び出しメソッドはこの方法で直接指定されています。次にフォローアップして見てください。このメソッドには渡された 2 つのパラメータが表示されます。最初のパラメータは明らかに移動パラメータの情報です
。それとは関係なく、2 番目のパラメータに注目してください。これはオブジェクトであり、直接コピーする方法はありません (私は非常に怠け者なので、それを取得し、2 番目のパラメータをダブルクリックする必要があります。この r メソッドでは、その値の 1 つだけが使用されていることがわかります)
この値をコピーできます (これは非常に快適です)。ここでは、パラメーターの入力は基本的に明確です。
次に、心配しないでください。環境を構築し、時間を節約します。その後、その js を直接観察し始めます。js 全体が読み込まれていることがわかり、それをいじってみましょう。それは正しくありません。すべてを取得してください。ダウン、スタッドそれ。
Xiaomo はコードを削除した後、コードを変更し、直接分析しました。ここでは t の値が 1 つだけ必要なので、その値をパラメータとして渡します。次に、もちろん、それをローカルで直接実行するのではなく、ブラウザに投げて、コードが正常に実行できるかどうかを確認します
。
値は通常であり、このパラメータをリクエストで渡すことができます (時間の無駄なので、ここでは説明しません)
その後、もちろん、構築するために直接 nodejs にスローされます。
window=global;
document={
};
better_proxy = function (o, callerName){
return new Proxy(o, {
set(target, property, value){
console.table([{
"类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
return Reflect.set(...arguments);
},
get(target, property, receiver){
console.table([{
"类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
return Reflect.get(...arguments);
},
}
);
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")
オブジェクトを作成したら、ここに簡単なプロキシを示します (この方法は少しばかげていますが、あまり考える必要はありません。何も考えずにそれを埋めるだけです)。
何気なく追加したのは以下の 2 つですが、オブジェクトを追加するときは必ずプロキシを追加することを忘れないでください。
window=global;
document={
};
better_proxy = function (o, callerName){
return new Proxy(o, {
set(target, property, value){
console.table([{
"类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
return Reflect.set(...arguments);
},
get(target, property, receiver){
console.table([{
"类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
return Reflect.get(...arguments);
},
}
);
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")
window.location = {
"ancestorOrigins": {
},
"href": "https://www.geetest.com/adaptive-captcha-demo",
"origin": "https://www.geetest.com",
"protocol": "https:",
"host": "www.geetest.com",
"hostname": "www.geetest.com",
"port": "",
"pathname": "/adaptive-captcha-demo",
"search": "",
"hash": ""
};
window.navigator= {
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
appName:'Netscape'
}
document.body = {
}
document.head = {
}
document.documentElement = {
}
window.location = better_proxy(window.location, "window.location")
window.navigator = better_proxy(window.navigator, "window.navigator")
document.body = better_proxy(document.body, "document.body")
document.documentElement = better_proxy(document.documentElement, "document.documentElement")
実は上記のサプリメントは全てほぼ終わっていて、最後の一つが足りない(自分で補う)というもので、全部与えるのはあまり良くないようです。
結果は以下の通りです:
混乱については話さないで、ただ乱暴にでっちあげてください、しかし、第 2 パラメータがたくさんありますが、それらはすべて暗号化に使用されますか? 怠け者の私はそれに直接エージェントを置き
、 1 ポイントが非常に多くの用途に使用されていることがわかり、1 ポイントを与えるだけで完了です。
これで、この極端な実験4は終了です。
2、検証
それですべては終了です。検証なしでプレイしてみましょう。前のロード リクエストに戻ります。検証リクエストには多くのパラメータが必要であることがわかります。認証コードの背景画像と認証コードのギャップの画像も含まれています。
postman にそれを Python に変換してもらい、次のステップである検証コードのギャップ認識を行うことができます。
Pythonを使用して
スライダー検証のギャップを特定する方法 code_python
import cv2
def identify_gap(bg,tp,out):
'''
bg: 背景图片
tp: 缺口图片
out:输出图片
'''
# 读取背景图片和缺口图片
bg_img = cv2.imread(bg) # 背景图片
tp_img = cv2.imread(tp) # 缺口图片
# 识别图片边缘
bg_edge = cv2.Canny(bg_img, 100, 200)
tp_edge = cv2.Canny(tp_img, 100, 200)
# 转换图片格式
bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
# 缺口匹配
res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配
# 绘制方框
th, tw = tp_pic.shape[:2]
tl = max_loc # 左上角点的坐标
br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标
cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形
cv2.imwrite(out, bg_img) # 保存在本地
# 返回缺口的X坐标
return tl[0]
2 つの画像を渡すだけで、最後のパラメータは入力結果の画像の位置です。(2 つの写真は、ロード リクエストによって返されるリターン ボディ上にあります)
最後に、移動する必要がある距離が取得されます。
再度jsを呼び出し、移動距離を渡すだけです(最初のパラメータに渡します)
function init(data_x){
let mydata = '{"setLeft":'+data_x+',"passtime":1915,"userresponse":'+data_x+'.81178591310345,"device_id":"自己搞(网页上都有的)","lot_number":"自己搞(网页上都有的)","pow_msg":"自己搞(网页上都有的)","pow_sign":"自己搞(网页上都有的)","geetest":"captcha","lang":"zh","ep":"123","rigp":"199241198","yeg6":"d6w9","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}'
mydata_obj={
"pt": "1",
}
mydata_obj = better_proxy(mydata_obj, "mydata_obj")
result = window.code(mydata, mydata_obj)
console.log(result)
}
module.exports = {
init
}
要約する
難しくなく、どんどん簡単になっていて、初心者でも入門コースとして利用できます