爬虫逆向 - 分析思路
背景:
网站分析思路
笔记1:
案例: 1.乌海市公共资源: http://www.whggzy.com/home.html 数据加密案例 2.福建省公共资源交易电子公共服务平台:https://ggzyfw.fujian.gov.cn/index/new 头部信息加密案例 获取爬取数据的流程: 一 不加密: - 在页面中找到需要下载的数据“内蒙古自治区政府采购全流程电子化交易管理办法” - 打开“开发者工具” - 在“网络”下搜索 “内蒙古自治区政府采购全流程电子化交易管理办法” - 找到对应的API 二 加密: - 在页面中找不到需要下载的数据 - 拉到页面最下方看看是否有分页器 - 在“网络”下对应的页面返回中查看返回data是否“加密” - 确认“启动器(启动程序)”是否混淆(乱码就是混淆) 排错: - 接口正确性 请求对象的发送(查看过程) - 源代码下 - XHR/提取断点 - 添加断点(跳转路径:front/search/category) - 刷新页面 - 点调用堆栈下send 跳转对应源码处 - 查看相关详情 速记: decrypt 关键字搜索时 必须为一个方法,同时,还需要有内容 工具: 1.将curl转为你想要的语言:https://curlconverter.com/ 2.算法库:crypto-js(js算法库) 3. FD(fiddler抓包工具)工具 今日重点: 1.JS定位 -》 数据加密(关键字定位)(无混淆的JS) 2.对于扣JS 的方法(找到主要的核心加密或者解密的方法或函数) 提示:搜索关键字 出现很多的JS文件 填充该接口的路径 再次搜索 找重复出现的JS 文件 作业: 1. https://36kr.com/p/2043190896037128 数据加密(提示: 搜索关键字decrypt) 2. https://webapi.cninfo.com.cn/#/marketData 头部参数加密(提示:搜索关键子mcode)
笔记2
1.跟值技巧(通过调用堆栈调试) 取值范围: 16进制: 0-9 A-F bs64: A-Z a-z 0-9 + / = 微信公众号平台JS算法改写 - JS调式工具: - 发条JS调式工具 - PyExecJs - 实现使用python 执行JS代码 - JS算法改写 - 打断电 - 代码调试时, 如果发现了相关变量的缺失, 一般给其定义成空字典即可。 示例: - 试客联盟 - url: http://login.shikee.com/ - serializeArray(): js函数的作用使用来实现序列化(对登录页面的表达式中的值进行序列化, 序列化成一个数组, 数组元素就是表单中的数据【用户名和密码】) - key表示的是公钥, 公钥的生成需要用rsa_n: - 基于抓包工具对rsa_n 进行全局搜索 - 空中网逆向 - url: https://passport.kongzhong.com/ - JS混淆: - 将js核心的相关代码进行变相的加密, 加密后的数据就是js混淆后的结果 - js反混淆 - 反混淆的线上工具(不理想) - 浏览器自带的反混淆工具设置(推荐)(chrome) - 开发者工具的source -> settings -> sources -> 第一项选中(打上对勾) - 进行关键字的全局搜索 -> VMxx(就是反混淆后的代码) - 发现了一个data['dc']不知道是什么, 后续处理: - 全局搜索, 直接搜索data, 结果太多不便定位 - 抓包所有请求,一个个查看(考验耐心) - 搜索dc - 长房网 -url: https://www.fang0355.com/login
笔记3
------------hook ------------ 1、hook的时机: 1)在控制台注入的hook,刷新网页就失效; 在网页加载第一个js的位置,第一个断点,然后在控制台手动注入hook (有可能注入hook的时机还是会晚一点) 2)利用FD的替换响应 注入hook 这种的时机比较靠前 3)油猴(第三方插件)--不推荐 4)new proxy(使用代理) 2、hook 主要的应用是获取session加密数据hook函数模板: (function () { var info = ""; Object.defineProperty(document, 'cookie', { set: function (val) { console.log(val) info = val; return val; }, get: function () { return info; } }); })(); ------------end ------------