No.6有道翻訳フォーム偽造

1.はじめに

ウェブサイト:http://fanyi.youdao.com/

効果:Webフォームの送信をシミュレートし、リアルタイムの翻訳を実現します

フレームを使用:リクエスト

難易度:✩✩✩

2.チュートリアル

1はじめに

Youdao Translationは、中国で有名な翻訳会社として、オンライン翻訳Webサイトも開設しました。今回のクローラーの目標は、Youdaoの翻訳をシミュレートするフォーム送信をクロールし、リアルタイムの翻訳の効果を実現することです。

2.ウェブサイト分析

ウェブサイトのホームページ

ここに画像の説明を挿入

翻訳してみてください

ここに画像の説明を挿入

クロールネットワークリクエスト

このリクエストで必要な結果があることを検索して見つけることで、このリクエストを受け取ったときに目的の効果を得ることができます。

ここに画像の説明を挿入

分析フォーム

さまざまなリクエストを通じてフォームパラメータを分析する

ここに画像の説明を挿入

ここに画像の説明を挿入

さまざまなリクエストを通じて、フォームの変更されたデータを見つけることができます。

  • i:翻訳されたテキスト
  • ソルト:タイムスタンプ
  • 記号:MD5暗号化暗号文
  • LTS:より多くのよりもタイムスタンプ
  • bv:MD5暗号化暗号文

フォームデータを見つけるためのブレークポイントデバッグ

Ctrl + Shift + Fを使用して、キーワードが配置さているJSファイル検索します

ここに画像の説明を挿入

ファイルを見つけた後、Ctrl + Fはキーワードを探し、見つかったキーワードで中断します。

ここに画像の説明を挿入

ホームページに戻って再度リクエストすると、プログラムのウェブページが一時停止していることがわかります。この時点で、ヒットしたブレークポイントが有効になりました。

ここに画像の説明を挿入

デバッガーに戻ると、変更はありません。つまり、プログラムがヒットしたブレークポイントまで実行されたときにソルト値は生成されません。直線はブレークポイントの間違った場所です。次の作業は、上記の作業を繰り返すことです。

ここに画像の説明を挿入

この位置に着いたとき、私たちはついに素晴らしいものを見つけました。私たちが必要とするすべての値はここにあります、そしてここのJSコードは私たちがクラックする必要があるものです:

ここに画像の説明を挿入

JSコードを分析する

var r = function(e) {
    
    
    var t = n.md5(navigator.appVersion)  // navigator.appVersion的值为User-Agent,对该值进行md5加密
        , r = "" + (new Date).getTime()  // 获取当前时间戳
        , i = r + parseInt(10 * Math.random(), 10);  // 时间戳和一位随机数进行字符串拼接
        return {
    
    
            ts: r,
            bv: t,
            salt: i,
            sign: n.md5("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m")  // 字符串拼接后进行md5加密
    	}
 };

Pythonコードの実装

import time
import random
from hashlib import md5

data = {
    
    
"i": "爬虫",
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}

enc = md5()
enc.update(
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 "
"Safari/537.36".encode())
data['bv'] = enc.hexdigest()
data['lts'] = time.time() * 1000
data['salt'] = data['lts'] + random.randint(0, 9)

enc = md5()
sign = f"fanyideskweb{self.keyword}{data['salt']}]BjuETDhU)zqSxf-=B#7m"
enc.update(sign.encode())
data['sign'] = enc.hexdigest()

フォームの偽造が完了したら、データをリクエストできます。データリクエストの部分は比較的単純なので、ここでは詳細なチュートリアルを投稿しません。特定のコードは以下で見ることができます。

3.完全なコード

完全なコード

おすすめ

転載: blog.csdn.net/qq_43580193/article/details/108352647