爬虫剖析之 JS逆向某验滑动加密(1)
相关学习引荐:javascript视频教程
今天给大家来剖析并复原某验的 JS 加密,做过爬虫的应当都知道这个验证码,假如你还没碰到今后你会碰到的信赖我
话不多说,时间珍贵,进入正题!
抓包
进入官网,点击选中今天的主题滑动验证,其他验证类型的加密大同小异,只要你把握了下面的办法!
点击按钮抓包,随便拖动一下,恳求数据包如下
可以看到一堆恳求参数,其实你要做的就是实现 w 的加密
点击进去,就能看到加密的 JS 文件,为便于剖析将其留存到当地。
AST 复原
通过调试可以看到有大量的 unicode 格局的编码乃至数组名称的混淆
传统解决办法是在阅读器 console 端输入就能看到它的庐山真面目,但是这种办法太费事了,接下来我们用 AST 来将其复原!
第一复原 unicode 编码,翻开 AST 在线解析网站(https://blogz.gitee.io/ast/[1])
将待复原的代码放进去
可以看到只需要把 extra 属性删掉就能复原本来的值。遍历代码如下:
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 在线解析一下
按照解析结果,编写响应的遍历代码
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) 代码复原了,这样代码就能有个直不雅感受!
信赖聪慧的你很快就能写出复原的代码。经过上面几步团体复原后的代码是这样的
按照关键词很快就能搜索到加密所在位置,清楚可见!假如不复原你是搜不到的.. 复原后在网站上我们也能很快定位到加密位置,打上断点
一样的代码可读性相差多大,信赖你一眼就能看到。你认为这样就完了?No!
Reres 更换
既然代码已经复原了,但是我们在网站上调试的时候还是混淆的代码,那如何办呢?
接下来上另一个神器 Reres, 它的作用是将恳求映射到当地,即你可以用当地 JS 来代替长途 JS 文件。
用途直接参照 它的 github https://github.com/annnhan/ReRes[2]
好了有了这个东西,我们就能在网站上用复原后的 JS 来停止调试,太强了把!
结果如下:
tql,这下加密参数扣起来就没压力了吧!
后台回复 tql 猎取相关代码!