ホームページ  >  記事  >  バックエンド開発  >  JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

WBOY
WBOY転載
2023-04-13 09:46:061318ブラウズ

JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

まえがき

数日前、Python Xingyao と The Strong King の交換グループで、数人が JS リバース エンジニアリング ビデオと関連コードについて質問していました。それらは私が高度な知識を学んでいるものばかりで、本当に十分に学ぶことができません。たまたま最近、いくつかの JS 学習教材を読んでいて、非常に良い事例を見つけたので、ここで共有し、記録しておきます。

JSコード

JSコードの検索ですが、記事を書いて説明するのはなかなか大変なので、動画で解説した方が良いと思います。コードは直接配置されます。この JS 暗号化コードを最初から見つけるのは非常に難しく、常にブレークポイントを突破し、暗号化ルールを見つけ、玉ねぎを 1 層ずつ剥いて見つけ出す必要があります。この記事で使用されている JS 暗号化コードは、小さな動画 Web サイトから取得したもので、Web ページで紹介されている暗号化関数は次のとおりです:

JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

暗号化方法はそれほど難しくありません。 decode() 暗号化関数のコア コードは次のとおりです。

define("tool", function(a, b, c) {
var d = a("jquery")
, e = a("support")
, f = a("constants")
, g = a("base64")
, h = "substring"
, i = "split"
, j = "replace"
, k = "substr";
b.decodeMp4 = {
getHex: function(a) {
return {
str: a[h](4),
hex: a[h](0, 4)[i]("").reverse().join("")
}
},
getDec: function(a) {
var b = parseInt(a, 16).toString();# 对应Python中的str(int(a, 16))
return {
pre: b[h](0, 2)[i](""),
tail: b[h](2)[i]("")
}
},
substr: function(a, b) {
var c = a[h](0, b[0])
, d = a[k](b[0], b[1]);
return c + a[h](b[0])[j](d, "")
},
getPos: function(a, b) {
return b[0] = a.length - b[0] - b[1],
b
},
decode: function(a) {
var b = this.getHex(a)
, c = this.getDec(b.hex)
, d = this[k](b.str, c.pre);
return g.atob(this[k](d, this.getPos(d, c.tail)))
}
};

decodeMp4 の decode() 関数が呼び出され、decode() 関数が getHex(a)、getDec(b.hex)、g.atob()、getPos( d, c.tail) およびその他の関数を使用し、これらの関数を Python 記述に変換し、対応する暗号化メソッドを構築し、暗号化された結果を取得して、その逆の効果を完了する必要があります。

変換処理

ここでの変数aはポイントを区切って得られる長い文字列であり、ここでは例として以下の変数を使用します。

a = "c0b1Ly9tdnPflQ3cQpPZpZGVvMTAubWVpdHVkYXRhLmNvbS82MWM0NDNlOGI1MmFmMTYzMi5tcDkBOyQ"

後でみんなが確認しやすいように、後で使う機能を事前に簡単に整理しておきましょう。

JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

以下のように、各関数を順番に分解してみましょう:

1. getHex(a) 関数

var h = "substring",i = "split";
getHex: function(a) {
return {
str: a[h](4),
hex: a[h](0, 4)[i]("").reverse().join("")
}
},

上記は対応する getHex() 関数の JS コードです。辞書が直接返されることがわかります。辞書のキーはそれぞれ str と hex です。str の対応する値は a[h](4)です。h の定義は部分文字列です。この関数は、文字列が指定された添え字から始まり、文字列の終わりに達することを意味します。ここでの変換は a.substring(4) です。つまり、文字列 a は添え字 4 から始まり、最後で終わります。a[ h](0, 4)[i]("").reverse().join("") これは理解するのが少し複雑です。まず、文字列の値が取得され、位置は 0 から 0 までです。 4. 次に、split 関数である関数 i が呼び出されます。スペース ("") を区切りとして使用し、reverse() 関数を呼び出して逆順にソートし、join("") を呼び出して文字列を接続します。分解すると、はるかに簡単になります。次のステップは、Python コードを構築することです。比較を記述すると、次のようになります:

def getHex(a):
return {
"str": a[4:],# JS中的substring(4)指的是从4开始取值到字符串末尾
"hex": "".join(list(a[0:4])[::-1])# [::-1]代表的是反向取值
}

見覚えはありますか? これは、上記の JS コードとまったく同じです。

2. getDec(a) 関数

JS コードは次のとおりです:

 getDec: function(a) {
var b = parseInt(a, 16).toString(); 
return {
pre: b[h](0, 2)[i](""),
tail: b[h](2)[i]("")
}
},

対応関係に従って、対応する Python コードは次のように記述できます。 ##

def getDec(a):
b = str(int(a, 16))
print(b)
return {
"pre": list(b[:2]),
"tail": list(b[2:])
}

3. substr(a, b) function

JS コードは次のとおりです:

substr: function(a, b) {
var c = a[h](0, b[0])
, d = a[k](b[0], b[1]);
return c + a[h](b[0])[j](d, "")
},

対応関係に従って、対応する Python コードは次のように記述できます。 :

def substr(a, b):
c = a[0: int(b[0])]
print(c)
d = a[int(b[0]):int(b[0])+int(b[1])]
print(d)
return c + a[int(b[0]):].replace(d, '')

4. getPos(a, b) 関数

JS コードは次のとおりです:

getPos: function(a, b) {
return b[0] = a.length - b[0] - b[1],
b
},

対応関係に従って、対応する Python コードを書くことができます

def getPos(a, b):
b[0] = len(a) - int(b[0]) - int(b[1])
print(b[0])
return b

5. decode(a, b) 関数

JS コードは次のとおりです:

decode: function(a) {
var b = this.getHex(a)
, c = this.getDec(b.hex)
, d = this[k](b.str, c.pre);
return g.atob(this[k](d, this.getPos(d, c.tail)))
}

対応関係に従って、対応する Python コードを実行できます。

 b = getHex(a)
# print(b)
c = getDec(b['hex'])
print(c)
# d = k(str(b), c.pre)
d = substr(b['str'], c['pre'])
# print(d)
return base64.b64decode(substr(d, getPos(d, c['tail'])))

効果表示

Webクローラー経由で直接リクエストします。最終的な暗号化されたアドレスは取得できません。どのようにリクエストしても取得できません。 data-src を取得します。つまり、上記の文字列変数 a は、上記の分析を通じてのみ逆転でき、コードを実行して Web ページ上と同じリクエスト アドレスを取得します。下の図に示すように、逆転は成功します。

JS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。

このアドレスをブラウザに入力すると再生でき、ダウンロードリクエストを行うと動画をダウンロードできます。

概要

皆さんこんにちは。私は Python の上級ユーザーです。この記事は、主に Python Web クローラーにおける JS 逆引き問題に基づいてケースを説明します。 Web ページが JS で読み込まれている場合、Web クローラーを介して直接リクエストすると、最終的な暗号化されたアドレスを取得できません。この逆の問題に対処するために、簡単な逆の実装プロセスの例を作成しました。

以上がJS リバース コードから Python コードへの変換に関するチュートリアルを確認してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。