技术标签: python爬虫js逆向
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
以下文章来源于腾讯云 作者:Python编程与实战
( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
今天给大家来分析并还原某验的 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 在线解析一下
image.png
根据解析结果,编写相应的遍历代码
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,这下加密参数扣起来就没压力了吧!
文章浏览阅读516次。<div class="rich_media_content"> <p style="white-..._python大视觉 统计学习
文章浏览阅读2.6k次,点赞2次,收藏12次。做一个简单的PYTHON自动更新程序_python 自动更新py代码
文章浏览阅读671次。LeetCode题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:..._一组数中找出最少和为目标值的数
文章浏览阅读750次,点赞23次,收藏20次。摘要视频运动目标检测与跟踪算法是计算机视觉领域的一个核心课题,也是智能视频监控系统的关键底层技术。它融合了图像处理、人工智能等领域的研究成果,已经广泛应用于安保监控、智能武器、视频会议、视频检索等各个领域。因此,检测与跟踪算法研究具有极其重要的理论意义和实用价值。运动目标检测与跟踪涉及到计算机图像处理、视频图像处理、模式识别、以及人工智能等诸多领域,广泛地应用于军事、工业、生活等各个方面。研究内容分为三个方面:图像的预处理、运动目标的检测和运动目标的跟踪。在图像的预处理方面,采用均值滤波,抑制噪声;_基于运动轨迹图像处理的应用案例
文章浏览阅读340次。之前的三类机器学习问题分别是二分类问题,多分类问题,标量回归问题,这三者都是监督学习的例子,目标是学习训练输入与训练目标之间的关系。机器学习四个分支:监督学习,无监督学习,自监督学习,强化学习分类与回归术语表名称描述样本或输入进入模型的数据点预测或输出从模型出来的结果目标真实值,对于外部数据源,理想情况下,模型应该能够预测出目标预测误差或损失值模型预测与目标之间的距离类别分类问题中供选择的一组标签,例如猫狗分类的猫或狗标签分类问题中类别标注_机器学习处理数据冗余的模型有哪些
文章浏览阅读407次。默认DialogFragment是展示在屏幕中间,并且周围有边距,而需求是贴近底部展示,并且距离左右下屏幕边界0距离。2.在onCreateView或者onCreateDialog 写布局。1.在onCreateView增加修改边界代码。3.调用dialogFragment。_dialogfragment如何实现距离activity底部有50p x
文章浏览阅读2.1w次,点赞4次,收藏13次。目的:将文件test.txt内容添加到文件test.html指定字符串的前面文件内容: test.txt内容如下: 10.110.210.310.410.510.610.710.810.910.1010.1110.1210.1310.1410.1510.1610.1710.1810.1910.2010.2110.22 text.html内容如_python如何将一个文本的部分数据插入到另一文本的指定行
文章浏览阅读452次。将 iPhone 与电脑同步您可以使用 iCloud 让照片、文件、日历等等在使用您的 AppleID 登录的所有设备间自动保持最新。(您甚至可以使用 WindowsPC 前往 iCloud.com 访问 iCloud 数据。)AppleMusic 等其他服务可让您在所有设备间访问更多内容。对于 iCloud 和如 AppleMusic 等服务,不需要同步。如果不想使用 iCloud 或其..._苹果手机和电脑同步如何处理
文章浏览阅读835次。第五节–决策树决策树(decision tree)是一种基本的分类与回归方法.决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布,其主要优点是模型具有可读性,分类速度快.决策树学习通常包括3个步骤:特征选择,决策树的生成和决策树的修剪一.决策树模型与学习1.决策树模型分类决策树是一种描述..._预测变量空间划分怎么对应树
文章浏览阅读964次,点赞3次,收藏7次。Error - expect color and depth to be in same resolution: D: 640x400, C: 640x480在奥比中光上下载的最新版的OpenNI版的linux版本中出现Error - expect color and depth to be in same resolution: D: 640x400, C: 640x480 这个错误是因为其O..._openni检测不到奥比中光设备
文章浏览阅读7.2k次,点赞4次,收藏36次。最近学习对接平台 需要用到 AES BASE64 加密对接接口非常少的资料而且满足不了需要或者有bug,譬如无偏移,base解码超位数输出不正常等最后整理出如标题所示的结果希望能帮助到有需要的朋友 也给自己往后回顾用使用前需要安装openssl库使用方法:<./aes 数据> <例子:./aes test> <注意:有空格会被当成多个参数>功能介..._c语言实现sm4pkcs7填充
文章浏览阅读450次。目录一.hive和spark sql的集成方式(面试可能会问到)二.spark_shell和spark_sql操作spark_shellspark_sql使用hiveserver2 + beeline三.脚本使用spark-sql四.idea中读写Hive数据1.从hive中读数据2.从hive中写数据使用hive的insert语句去写使用df.write.saveAsTable("表名")(常用)使用df.write.insertInto("表名")saveAsTable和insertInto的原理一._df.write