簡単なjsバックパッキング練習-python爬虫類

2417 ワード

原文:https://www.jianshu.com/p/1114f9f4b6db
周知のように、データキャプチャの道では、javascriptは回り道できないカンです.非常に複雑なjsアンチ登山技術は極めて効果的で、これも実際には解読できます.業界にも既製品があります.この文章は非常に簡単なjsアンチスクリプトから始まりました.簡単なアンチアップ手段を紹介します.また、この状況に対してどうやって解読しますか?
まず、このような手続きを見に来ました.これはget要求の中でページのソースコードの一部を取得しました.
var s = '1.41.601'.split('').reverse().join('');
var yy = atob('\x4d\x69\x34\x79\x4e\x44\x41\x3d'.replace(/\\x([0-9A-Fa-f]{2})/g,
    function() {
        return String.fromCharCode(parseInt(arguments[1], 16))
    }));
var pp = -3983 + 12065;
document.write(''+s+yy+String.from CharCode(58)+pp+'');
これは一連の非常に簡単なjsコードで、その役割は組み合せIP+portで、ハイパーリンクとしてホームページに出力します.ページの表示効果は以下の通りです.
106.4.12.240:8082
通常のget要求はこのipアドレスを直接に取得することができません.対応するjsソースしか入手できません.これはjsの反登山の一つの手段であり、非常に初歩的な手段であるが、それは確かに反登山の役割を果たしていることは否めない.
上記のソースコードとページ表示の対比があります.このコードの機能はきっと直観的に認識されていると思います.
逆に、このページでは、jsコードの機能を解析し、pythonで実現し、ページのソースコードに基づいて、私たちが欲しいデータを取得します.つまり、このIP+PORTです.
次にコードレベルからjsプログラムを一言で解析し、pythonで実現します.
まず、第一行のプログラムは、reverseを見て、出力効果を比較してください.業務機能が呼出されます.したがって、私たちの問題は二つしかありません.どのように元のテキストを取得したらいいですか?問題一については、正則を用いて、問題二、文字列をpythonに反転させることは非常に簡単です.コードは以下の通りです
ip_part1 = re.search(r'\'(.*)\'\.split', page_content).group(1)[::-1]
もちろん、この正則にはいろいろな書き方があります.紙面と博主の技量を考慮して、ここで展開しません.文字列は反転して、1つのスライスはすぐ解決することができて、みんなは深く入り込むと思って、自分で娘あるいは谷兄を度(度合)することができます.
次に私達はこの第二段のコードを見にきました.ここには2つの関数があります.一つはabsです.もう一つはreplaceです.
String.from CharCode(parseInt(argments[1],16)は文字通り、16進数の数字を取得して、asciiコードに対応する文字に変換されます.
全体的に見て、このコードの意味は正則によってソース文字列の16進数を切り取り、対応するbase 64文字列に変換し、abbを利用してutf-8符号化フォーマットの文字列に変換することです.ok、業務機能があれば、pythonコードの実現も簡単です.以下のように実現します.
ip_part2= ''.join([chr(int(x, 16)) for x in re.findall(r'\\x([0-9A-Fa-f]{2})', page_content)])
難点の部分はすでに解決済みで、もう一つのppが残っています.これは多く言いません.二つの数字の演算結果はポート番号です.みんな自分でやってください.私は詳しく説明しません.
全体の練習はここまでで一段落しました.知らず知らずのうちに、皆さんはもうブロガーに従って小さな反対回りをしました.本質的には、反対登山士の思考を読むことです.
解読の方法は多様で、私達が考慮する必要があります.或いは、トレードオフの核心要素はブロガーから見れば二つの点があります.第二に、反登山の時間を破るのはプロジェクトの許容範囲内ですか?
時には、心を静めてよく解読する必要があります.時には、seleniumのような自動化ツールを使ってもいいです.
転載は出典を明記してください.ありがとうございます.