>  기사  >  웹 프론트엔드  >  크롤러 분석 JS 역방향 특정 테스트 슬라이딩 암호화 (1)

크롤러 분석 JS 역방향 특정 테스트 슬라이딩 암호화 (1)

coldplay.xixi
coldplay.xixi앞으로
2020-09-11 17:01:571784검색

크롤러 분석 JS 역방향 특정 테스트 슬라이딩 암호화 (1)

관련 학습 권장 사항: javascript 비디오 튜토리얼

오늘은 특정 JS 암호화를 분석하고 복원할 것입니다. 아직 크롤러를 사용해 본 적이 없는 사람이라면 이 인증 코드를 알아야 합니다. 앞으로 저를 만나시면 저를 믿으세요

말할 것도 없고, 시간은 소중합니다. 본론으로 들어가겠습니다!

패킷 캡처

공식 웹사이트에 들어가서 선택하세요. 오늘의 주제 슬라이딩 검증은 다음 방법을 마스터하는 한 다른 검증 유형의 암호화와 유사합니다!

버튼을 클릭하여 패킷을 캡처하고 드래그하세요. 요청 데이터 패킷은 다음과 같습니다.

실제로 해야 할 일은 다음과 같습니다. w

암호화를 클릭하면 암호화된 JS 파일을 볼 수 있으며 분석을 위해 로컬에 저장할 수 있습니다.

AST 복원

디버깅을 통해 유니코드 형식의 인코딩과 배열 이름의 혼동이 많은 것을 확인할 수 있습니다.

기존의 해결 방법은 브라우저 콘솔에 입력하고 사용자가 Lushan Mountain의 진정한 모습을 볼 수 있지만 이 방법은 너무 번거롭습니다. 다음으로 AST를 사용하여 복원합니다!

먼저 유니코드 인코딩을 복원하고, AST 온라인 분석 웹사이트를 엽니다(https://blogz.gitee.io/ast/[1][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);    }};复制代码

모든 변수 이름은 위에서 찾은 후 이 형식을 모두 $ The로 입력하면 됩니다. _DFCB(66) 코드가 복원되어 코드에 대한 직관적인 느낌을 받으실 수 있습니다!

당신이 똑똑하다면 곧 복원된 코드를 작성할 수 있을 것이라고 믿습니다. 위 단계를 거쳐 전체 복원한 코드는 이렇습니다

키워드를 기반으로 암호화된 위치를 빠르게 검색할 수 있고, 명확하게 보입니다! 복원하지 않으면 찾을 수 없습니다. 복원 후에는 웹사이트에서 암호화된 위치를 빠르게 찾아 중단점을 설정할 수 있습니다🎜

같은 코드라도 한눈에 가독성의 차이를 알 수 있다고 생각합니다. 이것이 끝이라고 생각하시나요? 아니요!

Reres replacement

이제 코드는 복원되었지만 웹사이트에서 디버깅할 때 여전히 난독화된 코드가 남아 있는데 어떻게 해야 할까요?

다음으로 요청을 로컬에 매핑하는 데 사용되는 또 다른 아티팩트인 Reres를 살펴보겠습니다. 즉, 로컬 JS를 사용하여 원격 JS 파일을 대체할 수 있습니다.

사용법은 github을 직접 참조하세요 https://github.com/annnhan/ReRes[2]

이것으로 복원된 JS를 사용하여 웹사이트에서 디버깅할 수 있습니다. 너무 강력합니다!

효과는 다음과 같습니다:

tql, 이제 암호화 매개변수가 공제되고 부담이 없습니다!

백엔드 응답 tql 관련 코드를 받아보세요!

프로그래밍 학습에 대해 더 자세히 알고 싶다면 php training 칼럼을 주목해주세요!

위 내용은 크롤러 분석 JS 역방향 특정 테스트 슬라이딩 암호화 (1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제