郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关。

这篇文章是公众号《云爬虫技术研究笔记》的《2019年末逆向复习系列》的第三篇:《百度指数Data加密逆向破解》

本次案例的代码都已上传到Review_Reverse上面,后面会持续更新,大家可以Fork一波。

逆向背景

大家如果是做行业分析或者用户画像的话,会经常用到XX指数这个东西,类似于百度指数,微信指数,微博指数等等,这些指数用以反映不同关键词在过去一段时间里的“用户关注度”和“媒体关注度”,反馈面广、覆盖时间长。我们这次分析的是百度指数,主要是因为它返回的数据是加密的,我们看看如何来分析获得破解之后的数据。

分析流程与逆向破解

我们首先打开百度指数的页面,打开开发者工具->重新选择日期,搜索->查看网络请求。


我们可以看到整个网络请求的逻辑

xhr顺序:index->ptbk->check

数据估计是从index这个api返回的,我们跟进这个请求查看。


我们首先观察这个请求的结果,主要有两个地方我们需要注意,uniqiddata参数,
uniqid我们暂时不知道有什么意义,data参数是加密的,我们需要获取它的解密逻辑。

1. 寻找data解密的逻辑

已知现在这个index请求是个xhr请求,我们就给这个请求下个xhr断点,如图

我们从这里,也就是initiator跟进去(PS:initiator是说明从哪个对象和这进程发起请求的)

在右侧Xhr/fetch BP下个断点,断点的值就是我们这个index请求的部分地址/api/Searchapi/index,我们打下断点之后根据之前的逻辑,重选时间,再次请求

我们可以看到断点打在 n.send(t.getBody())这里,我们可以看到右侧有Call stack调用栈列表,说明在达到这个断点之前调用了哪些函数和对象,我们顺着这个调用栈一个个往回追溯。


我们首先看到前几个调用栈的对象,如果做过前端开发的话,很容易理解是前框框架做的一些封装,针对每一个请求/响应进行处理,我们接着往下看

这个调用很明显,从这个方法的名字很容易看出,我们接着好好看看这个方法的代码逻辑

很好理解的代码逻辑,我们可以看到e.chartData的结果很像我们刚才看到的index接口返回的数据,从代码上看,应该是首先初始化,然后对部分的数据进行加密,加密的方法是P.a.decrypt,那么我们就对这个方法下个断点跟进去

断点已经下好,接着跟进去

我们可以看到decrypt,里面的代码没有额外的混淆,很好理解逻辑,这个方法有两个参数,et,下面我们看看这两个参数怎么获得的

2. 加密方法decrypt参数分析

从decrypt的逻辑上看,这两个参数应该是秘钥和秘文

  1. e参数
    和接口中返回的data加密数据类似,判定是加密数据
  2. token参数
    没有很好的判断,我们从network的tab里面搜索一下

    我们发现这个字符串出现在网络请求的某个接口中返回的数据里面

    我们看看这个接口的构造,这个接口需要一个uniqid参数

    我们继续寻找这个uniqid参数,发现这个参数是我们一开始请求的index那个接口中返回的一个字段的数据。

我们再重头理清一下思路,根据网络请求的顺序,我们大致可以理出这样一个请求的思路:

到此为止,我们分析好了整个算法的流程,下面我们重写decrypt算法。

3. 重写decrypt算法

# Js版本
decrypt: function(t, e) {for (var n = t.split(""), i = e.split(""), a = {}, r = [], o = 0; o < n.length / 2; o++)a[n[o]] = n[n.length / 2 + o];for (var s = 0; s < e.length; s++)r.push(a[i[s]]);return r.join("")},

算法比较简单,我们改写成Python版本

# python版本def decrypt(t: str, e: str) -> str:n, i, a, result = list(t), list(e), {}, []ln = int(len(n)/2)start, end = n[ln:], n[:ln]a = dict(zip(end, start))return ''.join([a[j] for j in e])

4. 总结思路

思路如上面的流程图所示

代码实战

有了上面这个分析流程,我们就可以开始Coding了,以下是decrypt解密的流程。

最后我们把整个请求流程写好

复习要点

从这个复习的案例我们可以总结下思路:

  1. 当不是参数加密而是结果加密的时候,我们可以从xhr断点入手,分析是在哪个部分加密的。
  2. 当解密方法中有参数没有头绪的时候,可以在network搜搜是不是前后文中返回的
  3. 我们在分析xhr请求时,可以使用一个快捷的方法取代打xhr断点,如图所示

号主介绍

多年反爬虫破解经验,AKA“逆向小学生”,沉迷数据分析和黑客增长不能自拔,虚名有CSDN博客专家和华为云享专家。

私藏资料

呕心沥血从浩瀚的资料中整理了独家的“私藏资料”,公众号内回复“私藏资料”即可领取爬虫高级逆向教学视频以及多平台的中文数据集

小学生都推荐的好文

2019年末逆向复习系列之努比亚Cookie生成逆向分析

2019年末逆向复习系列之淘宝M站Sign参数逆向分析

2019年末逆向复习系列之百度指数Data加密逆向破解相关推荐

  1. 2019年末逆向复习系列之努比亚Cookie生成逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是<2019年末逆向复习系列>的第二篇:< ...

  2. 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是公众号<云爬虫技术研究笔记>的<2019 ...

  3. 2019年末逆向复习系列之今日头条WEB端_signature、as、cp参数逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是公众号<云爬虫技术研究笔记>的<2019 ...

  4. 2019年末逆向复习系列之淘宝M站Sign参数逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是<2019年末逆向复习系列>的第一篇:< ...

  5. 【JS 逆向百例】百度翻译接口参数逆向

    文章目录 逆向目标 逆向过程 抓包分析 获取 token 获取 sign 完整代码 baidu_encrypt.js baidufanyi.py 逆向目标 目标:百度翻译接口参数 主页:https:/ ...

  6. 详解百度指数搜索指数js逆向

    一.相关环境 开发工具:PyCharm 2022.3.1 (Community Edition) 开发环境:Python 3.9 操作系统:Windows10 二.目标数据 在百度指数首页登录,然后输 ...

  7. 2019计算机考研百度云,2019计算机考研复习时间表(全年版)

    准备期.基础期.强化期和冲刺期,每个阶段都有要做的事情,小编写的很详细哟,大家好好看看吧~小编还为大家精心准备了计算机考研复习资料还有计算机考研报考指导助力你的考研路哦! 1准备期(还未准备的现在开始 ...

  8. 爬虫天坑系列-百度指数爬虫

    原文地址:http://blog.shenjianshou.cn/?p=170 giithub:https://github.com/TTyb/Baiduindex 最近有很多朋友跟我说," ...

  9. Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数

    参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- ...

最新文章

  1. php lvs,LVS(四)LVS集群DR模式
  2. python constructor_python – 无法成功启动boa-constructor
  3. Unix环境高级编程学习笔记(七) 多线程
  4. Java基础-序列化和反序列化
  5. Oracle REGEXP_SUBSTR 字符串截取函数的使用
  6. php intval0.57100,应用NuSoap构建新型的基于PHP的Web服务
  7. php使用imagick进行图像处理
  8. Win10 UWP vs add github
  9. POJ 3667 Hotel (线段树区间合并)
  10. 基于51单片机数字电压表仿真设计_数码管显示
  11. Win10开启IPv6
  12. 【机器学习 基本概念】马尔可夫链
  13. 直播svga礼物应该如何设计,让用户更加青睐
  14. node 压缩图片_6大免费图片压缩神器你值得拥有!
  15. 线性不可分转可分----低维空间转高维空间
  16. LeetCode解题汇总目录
  17. 会计准则中借方与贷方如何理解分析
  18. Firefox插件开发-入门篇
  19. shell批量修改文件名字 重命名 MD5+文件后缀
  20. 华硕笔记本触控板有linux驱动吗,华硕笔记本怎么下载触控板驱动

热门文章

  1. 2022-11-08 cesium实现大坝放水和有流向的水
  2. 精华汇总:医学数据集及机器学习项目
  3. Linux从无到有第一课
  4. matlab 陷波器,陷波滤波器—matlab实现
  5. 清洁保养水槽洗碗机_如何在洗碗机中清洁肮脏的键盘(不破坏它)
  6. PM和PMO到底有什么区别?如何提升组织效能?
  7. 世界大学机械工程TOP10,国内大学哪家强?
  8. 粘包/拆包问题——如何获取一个完整的网络包?
  9. 商家入驻商城 多商户商城 宝塔安装搭建教程 说明 小程序、h5、pc端
  10. 测试面试,面试官问如何测试电梯