ホームページ  >  記事  >  ウェブフロントエンド  >  クローラー解析 JS 逆某テスト スライディング暗号化 (1)

クローラー解析 JS 逆某テスト スライディング暗号化 (1)

coldplay.xixi
coldplay.xixi転載
2020-09-11 17:01:571784ブラウズ

クローラー解析 JS 逆某テスト スライディング暗号化 (1)

関連する学習の推奨事項: JavaScript ビデオ チュートリアル

今日は、特定の JS 暗号化を分析して復元します。クロールを完了した人は、この確認コードを知っているはずです。まだ遭遇していない場合は、今後遭遇するでしょう。信じてください。

あまり言うことはありません。時間は貴重です。本題に入りましょう!

パケット キャプチャ

公式 Web サイトに入り、今日のトピックのスライド検証、その他の検証タイプの暗号化をクリックして選択します次の方法をマスターすれば、同様です。

#ボタンをクリックしてパケットをキャプチャし、ランダムにドラッグすると、リクエスト データ パケットは次のようになります。

大量のリクエスト パラメータが表示されます。実際に行う必要があるのは、w

の暗号化を実装することです。クリックすると、暗号化された JS ファイルが表示されます。分析のためにローカルに保存します。

AST 復元

デバッグを通じて、多数の Unicode 形式のエンコーディングと混乱があることがわかります。配列名

従来の解決策は、ブラウザのコンソールに入力して実際の外観を確認することですが、この方法は面倒すぎるため、次に AST を使用して復元します。 . !

まず Unicode エンコーディングを復元し、AST オンライン分析 Web サイト (https://blogz.gitee.io/ast/[1])

を開きます。復元されたコードを

##に入力します。元の値を復元するには、余分な属性を削除するだけでよいことがわかります。トラバーサル コードは次のとおりです:

const parser = require("@babel/parser");const traverse = require("@babel/traverse").default;const t = require("@babel/types");  //操作节点的函数,比如判断节点类型,生成新的节点等:const generator = require("@babel/generator").default;  //生成还原后的代码const fs = require('fs');var jscode = fs.readFileSync("./slide.js", {    encoding: "utf-8"});const visitor = {        StringLiteral(path) {                delete path.node.extra            }}let ast = parser.parse(jscode);traverse(ast, visitor);let {code} = generator(ast, opts = {jsescOption: {"minimal": true}});fs.writeFile('decode_slide.js', code, (err)=>{});复制代码

jscode は以前に抽出された JS コードであることに注意してください。最後に、復元されたコードが decode_slide.js ファイルに書き込まれます。

次のステップは次のとおりです。難読化された配列を復元します。デバッグ コードを観察すると、すべての配列は JS ファイルの先頭にある大きな配列 KBBji.$_Co に基づいており、同時に配列は多くの変数に割り当てられ、変数名はランダムに生成されます。

したがって、次にしなければならないことは、これらの変数名を見つけて、対応する文字列値に置き換えることです。

AST をオンラインで解析します

クローラー解析 JS 逆某テスト スライディング暗号化 (1)クローラー解析 JS 逆某テスト スライディング暗号化 (1)
解析結果に従って、対応するトラバーサル コードを記述します

const visitor = {    VariableDeclaration(path){        const {declarations} = path.node;        if(!t.isMemberExpression(declarations[0].init))return;        if(declarations[0].init.property.name !== "$_Co")return;        if(declarations.length !==3 || declarations[0].init.property === undefined)return;        let value1 = declarations[0].id.name;        let value2 = declarations[2].id.name;        new_array.push(value1, value2);    }};复制代码

上記ですべての変数名が見つかりました。一度見つかったら、この形式の $_DFCB(66) コードをすべて復元できるため、コードは直感的に操作できます。

賢い人であれば、復元されたコードはすぐに書けると思います。上記の手順を経て全体が復元された後のコードは次のようになります。

#キーワードに基づいて暗号化の場所をすばやく検索でき、明確に表示されます。復元しないと見つからなくなります。 復元後、Web サイト上の暗号化された場所をすぐに特定し、ブレークポイントを設定できます。

同じコードでも読みやすさの違いが一目でわかると思います。これで終わりだと思いますか? No!

Reres Replace

コードは復元されましたが、デバッグするときにまだ混乱しています。ウェブサイトのコード、どうすればいいですか?

次に、別のアーティファクト Reres を見てみましょう。その機能は、リクエストをローカルにマップすることです。つまり、ローカル JS を使用してリモート JS ファイルを置き換えることができます。

使用方法については、github を直接参照してください https://github.com/annnhan/ReRes[2]

わかりました。これにより、復元された JS を使用して Web サイト上でデバッグできます。これは非常に強力です。

結果は次のとおりです:

tql では、暗号化パラメーターが差し引かれるため、圧力はかかりません。

バックグラウンド返信 tql 関連するコードを取得してください。

プログラミング学習について詳しく知りたい方は、php training のコラムに注目してください!

以上がクローラー解析 JS 逆某テスト スライディング暗号化 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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