Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 爬虫进阶必备 | 某电子商务生态链平台登陆 Form Data 加密逻辑分析(补环境大法好啊!!)

Python 爬虫进阶必备 | 某电子商务生态链平台登陆 Form Data 加密逻辑分析(补环境大法好啊!!)

作者头像
咸鱼学Python
发布于 2021-08-10 07:34:32
发布于 2021-08-10 07:34:32
53300
代码可运行
举报
文章被收录于专栏:咸鱼学Python咸鱼学Python
运行总次数:0
代码可运行

今日网站

aHR0cHM6Ly9wYXNzcG9ydC5nb2pveS5jb20vbG9naW4=

公众号的文章难度并不是逐级递增/递减的,遇到啥写啥,所以就和开盲盒一样,也许文章很干呢。

反调试

这个站分析的是页面提交的参数加密逻辑,所以先打开开发者工具抓包

打开抓包,会提示进入 debugger

绕过这个 debugger 得方法比较多,右键设置 Never Pause Here 就行了

设置完就像下面这样

然后点击右边的蓝色箭头就可以了

加密定位

通过 debugger 之后输入手机和密码提交,可以在Network下看到如下的请求

虽然提交的是Form Data但是没有关键词,搜索是没办法搜索了,用xhr和分析调用栈的法子都可以定位。

点开Initiator

从第一个进去之后打上断点,然后再提交一次数据

可以看到这里的l已经生成好了

所以继续向上一步的堆栈进行分析,分析直到下面这个位置

这里是我们提交参数的地方,不过这里的t里包含了需要提交的参数,所以在这里打上断点

放开断点,重新提交,会断在post这行上

这个时候,t 中是没有生成好的数据的,s则是页面上提交的数据

所以接下来才会生成加密,所以从这里一步步往下调试,大概是先单步然后下一步几次之后

你会发现下面的逻辑

这里的interceptors我之前的文章讲过,很多 request 前的操作都悄咪咪的在这里面做的

所以在下面这个位置下断

然后直接下一步断在750这一行

我们看看运行的结果

所以加密的逻辑就在这个Q

跟进来就是这个s函数

加密分析

进入到Q函数当中,代码就比较难看了,所以先复制这个代码到本地,看看整体的结构

可以看到s是包在一个!function(){}()里面的,这是一个自执行的函数列表

所以我们需要单独把这一部分拿来运行

我们尝试在本地直接运行这段自执行的代码,但是提示错误

在代码里捕获了错误,但是具体为什么报错我们并不知道,所以直接去掉这个try...catch看看是哪里报错

再次运行提示this.b不是一个方法

所以需要进一步调试,发现在代码中调用的时候,传入this.b中的a是如下的一串的字符串

这个字符串格式是不是很熟悉,很明显这里的this.b是 window 中的atob ,所以需要在这里补齐this.b的逻辑,在某乎的文章里我已经给大家列举过了如何补齐,大家可以点下方蓝字回顾一下

Python 爬虫进阶必备 | 某著名人均百万问答社区 header 参数加密逻辑分析

我们直接复制粘贴一下逻辑

将代码修改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# this.abv = [this]["filter"]["constructor"]("return this")()[this.b](a || b >> d)
this.abv = xazxBase64.decode(a || b >> d)

再次运行,这里就不报错了,提示domain未定义

domain大家都知道是啥吧,在document下标识当前的站点的

直接拿了一个通用的环境头过来,运行一下

出结果了,但是好像有点小毛病,代码一直停住没有结束

我们继续分析,找到下面这个位置

这里使用了setInterval调用了debugger

“在窗口和工作接口上提供的setInterval()方法重复调用函数或执行代码片段,每次调用之间有固定的时间延迟。

直接删掉这段代码,运行就正常了

补环境大法好啊~

现在就有人问我不会补环境,这样要怎么搞?

那我们回到刚刚 domain 的检测位置

找到报错的位置,可以看到这个代码逻辑是在一个大大的for循环表达式里的

伪代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var i = 0, o = 18; i<【一坨代码】;i++){
 方法体
}

所以只能断点一步步调试了

有点恶心,这里还有debugger

直接删掉,继续调试

之后就一直提示domain未定义,现在要怎么补齐呢?

我在网页上调试发现这段代码的结果为一个固定值,如下

可是如果替换为固定的18,这个for循环就会变为下面这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var i = 0, o = 18; i < 18; i++){
    方法体
}

这个方法体里面就是我们的检测,包含debugger还有domain

那我们为啥不直接跳过这段代码,里面的逻辑我们理清楚了也没有相关的加密逻辑全是检测

这里直接将循环的判断逻辑判断条件改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var i = 0, o = 18; i < 0; i++){
    方法体
}

让代码直接跳过不就行了

照着我们上面的思路,修改一下,就可以看到结果的输出了

ps:记得将setInterval注释

好了,以上就是本次的全部内容了,我们下次再会~

对了,看完记得一键四连,这个对我真的很重要。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6基础-ES6的扩展
编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm)
达达前端
2019/11/26
5450
「ES6基础」你需要知道的Array数组新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/17
7580
「ES6基础」你需要知道的Array数组新方法(上)
ES6的语法
世间万物皆对象
2024/03/20
1840
ES6中数组做了哪些新扩展?
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
用户6256742
2024/07/15
990
【ES6基础】Array数组的新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/13
9030
【ES6基础】Array数组的新方法(上)
ES6学习笔记(一)
ES6的标准发布很久了,ES7和ES8已经出来了,直到现在才开始学习,已经有点晚了,希望可以赶得上吧。
CherishTheYouth
2019/07/30
5780
ES6学习笔记(一)
ES6、ES7、ES8学习指南
ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言。目前JavaScript使用的ECMAScript版本为ECMAScript-262。
CrazyCodeBoy
2018/10/09
1.7K0
JavaScript 又出新特性了?来看看这篇就明白了
https://juejin.im/post/5ca2e1935188254416288eb2
崔庆才
2019/05/06
1.6K0
ES6/ES7/ES8/ES9/ES10常用特性和新特性
变量的改变,添加了块级作用域的概念 let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题 const声明常量(会计作用域)
公众号---人生代码
2020/06/28
1.5K0
ES6新特性
ES6的常用新特性简介,全部特性可参阅 Ecma-International MDN ES6入门 ES6 教程
WindRunnerMax
2020/08/27
7900
ECMAScript 6 笔记(二)
  用两个双字节的形式表达字符时,如果直接在\u后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成\u20BB+7。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。
超然
2018/08/03
8140
ES6技术
JavaScript之前是LiveScript,具体的资料,大家自己查一下百度。网景公司的语言,这个公司为了把自己的公司语言,走出美国,迈向世界。把自己的语言提交给了ECMA。
张哥编程
2024/12/19
1070
ES6技术
ES6中数组新增扩展盘点
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
@超人
2021/07/05
5730
ES6中数组新增扩展盘点
ES6总结
书到用时方恨少啊 于是2022年的规划又多了一项:多看书 不积跬步无以至千里 不积小流无以成江海
小吕
2022/09/26
6030
Javascript数组方法(ES5-ES6)
join(speparator):将数组的元素组起一个字符串,spearator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数,即分隔符。
用户9298250
2021/12/29
1.1K0
常见的数组基本用法
ES5方法:pop push shift unshift reverse sort splice
前端迷
2021/04/09
9450
JavaScript——ES6新增语法特性
ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项脚本语言的标准化规范
岳泽以
2022/10/26
4330
JavaScript——ES6新增语法特性
ES6 数组方法归纳整理
Array.from() 可接收三个参数,第一个参数为类数组对象,第二个参数为映射函数,如果使用了映射函数,可以传第三个参数表示映射函数的this值。
全栈程序员站长
2022/06/27
6000
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
如果fromIndex为负值,使用数组长度 + fromIndex计算出的索引作为新的fromIndex,如果新的fromIndex为负值,则搜索整个数组。
zz_jesse
2024/07/04
3150
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
从零开始学 Web 之 ES6(六)ES6基础语法四
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
Daotin
2018/09/30
4670
相关推荐
ES6基础-ES6的扩展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验