最近在找工作,写写文章记录点能力吧,要不然就真是菜鸟了,我劝以后的萌新也 没事儿研究时写写记录一下 都是吹牛的资本.
前些年在抖音做短视频小说 SD AI绘画 语音合成了 虽然全系列做成了一个统一软件可以比现在市场很多类似的优秀,但是无奈举债多,没有能力再创业了,所以分享一下内容给后来朋友们,后续可能会分享一下抖音剪映语音识别的接口流程,和抖音豆包AI 全链路API,白嫖算力,看大家热情吧,原业务是抓取知乎的盐故事实时上新内容, 来为做小说创作的朋友们提供一个小说热度帅选的功能.主要维度有两个一个是点赞 一个是评论量,很简单抓取历史和秒更上新便是.
写了个GUI 界面丑陋勿喷 但是功能实用,这里主要是为了介绍知乎的算法的.下面进入正题
知乎的app 很多内容还是直接使用的web 只是知乎在app中自定义了浏览器头,识别浏览器让一些内容显示和屏蔽
知乎的web 隐藏了很多app 的内容但是却暴漏了他们的一些算法缺陷,让我们可以借助web加密来和通过app的api
HttpCanary 俗称小黄鸟是手机端的抓包工具,有的时候比pc上的软件好用,环境证书安装 何使用啥的自己去搜吧,
VMOS Pro 是虚拟机可以模拟一个完整的手机系统 这里模拟我们需要注意选择模拟安卓7.1的 64位 这个虚拟机还支持root 一键安装xposed 再加上Frida 什么的爽的不要
为什么要这么做呢就是高版本安卓系统修改加强了ssl 体系认证 导致三方证书无法方便正常使用 ,
如果直接在原机器安装后抓包 抓包工具是无发抓取到知乎任何数据的,
上面这套下来基本市场9成的app都可以抓到了(之前我测试微信竟然可以),但是某些大厂还是抓不到的 比如抖音 他自己重写了底层网络内容在so里 包括一些ssl证书认证的内容,可以绕开虚拟机直接和外部通讯.即使你外部有抓包工具也抓不到,
所以说知乎技术有待提高. 另外再次声明一下 我抓取的知乎数据访问不高哈,不会对服务器造成影响,只是模拟人类正常访问 然后汇集信息用于热度分析,别给我发律师函
看我标题为是那么要借助浏览器插件hook呢,原因很简单,
代码成本低和逆向成本相对低,
操作成本低(有时候测试和测试逆向过成 我们可以动态修改代码 刷新一下就直接进入浏览器环境了,如果用其他方式替换js可能需要借助抓包工具,或者自己写转发抓包拦截工具,比较麻烦)
只需要一个核心插装就把问题解决了,插件本身 其实也可以直接进行数据处理和网络请求 但是为了节省资源就只有一个浏览器了.不过确实也可以这么做,根据具体场景自己选吧
还有就是为了测试这个方案的可行性,原因是知乎核心算法中包括很多浏览器环境的信息,所以这是综合选择的结果,所以提取hook他的算法做成服务器,
这样也还可以使加密解耦合 为更大范围的抓取做服务支撑如果算法有变 我们都不用改爬虫源代码只要改加密服务器就可以了,不过知乎更新并不是很勤快,用了1年多了这个方法,而且这个方法貌似防爬机制都触发的概率比较低,
来上两章手机截图吧 不一步步演示了
下边这张图就是 抓包到的数据了 我圈出的api 就是我们目标的api 我筛选的是一些点赞 评论和简洁的信息 其他自己
分析吧,我只是做信息聚会,
点进去 切换到请求那一栏 所有请求信息都能看到了 多抓几次你会发现真正需要的和变化参数没几个
第一眼肯定是懵逼,多试几次会,然后再结合分享去的web端网页比如 https://www.zhihu.com/xen/market/remix/paid_column/
最后一串是小说集 的id
你会发现请求头直接 6个参数就可以了
x-zse-96 其中 black_code 是加密值 前边2.0固定版本 我上图是版的显示是1.0 而网页时2.0
x-zse-93 的 os_vr 是环境的版本 这里由于跟的web版本不一样我们选择从浏览器那边动态获取
cookie 是web环境初始化后的识别信息,不是重点 也从浏览器环境获取就可以了
醒醒啦 主要任务来了
第一步 分析知乎的页面找到算法验证的关键点
在浏览器器调试源码里 找到 vendors.2d292cce3f0653fa0e5e.js
然后搜索 __g._encrypt 结果会出来两个 至于怎么找 不在本次教程范围内 新手可以看我一上篇
能搜索出来两个结果 这里我们只用到第一个 断点刷新一下你们就知道了,这是对上边代码中 baseurl 进行加密的算法
知乎此处比较弱了的点是把这种 关键点api 的值输入和输出 直接暴露了,虽然也是闭包存在,但是我们直接改这里代码就可以修改成全局可用的算法,其实可以学学抖音 再加密混淆一次 就不好找了 他这种应该vue编译出来直接上线了那种 毫无防护手段 作为大厂 还是很意外的写个小工具源代码都能逆向出来
我们修改方案
这样 就把加密算法 提取出来了 时间成本极低 然后 我们就可以用 window._encrypt全局方法做文章了
第二步 写一个浏览器插件 在知乎提取出关键js 放进去 修改指定关键行 然后替换
新建文件夹 zhihuchajian 这个文件夹地址 一会儿 浏览器 需要用到
然后按照上述目录建立文件结构
下面我给出文件内容
hoook_manager.js
manifest.json
vendors.2d292cce3f0653fa0e5e.js 这个太大 不粘帖了,自己去改吧 .这个方法把我们插件放在编辑器里 修改js 达到了动态修改页面js 的目的 爽的不要不要的 比追栈效率高不少
第三步 启动 web 启动浏览器远程 debuger 模式 并且加载插件
这个浏览器地址是默认安装的位置 注意修改你名字 这是一个 命令行 在桌面新建一个bat 复制进去修改 保存 再启动
–remote-debugging-port 指定浏览器开发端口 9222
–user-data-dir 指定浏览器环境存储的路径 设置这个可以把一个浏览器当作多个浏览器来用
–user-agent 自定义浏览器头
–load-extension 指定自己的浏览器插件路径
上述操作完成基本就你可以看到 自己的插件了
再去访问 知乎网址 https://www.zhihu.com/xen/market/remix/paid_column/
调试期内 查看源码 就看到
我们的代码生效了,愉快的玩耍吧, 记得我们的bat 要一直启动不能关闭
第四步 利用python web框 架 暴露一个简单服务,打通浏览器 执行js 完成我们算法认证
以上代码弄完还不能正常运行 不过大的操作环境 已经就位 为了给知乎留点面子不写了
但是给大家一点提示
def get_data(light_code):
这个方法我们接收的 light_code 是有固定算法需要计算的不需要浏览器环境 ,不过我提供的关键点 你们向上追栈是可以找到的
流程是 大概就是这几个参数 说到这里自己去搜这几个关键参数就应该找到了 这些一起计算一个明码值 再传给浏览器加密依靠一些浏览器动态信息加密给出暗码 ,再通通过浏览器头发送get 请求,这里就完成了逆向 可以愉快爬了
# os_vr = “101_3_3.1”
# story_id = “”
# url_api = f"/pluton/products/{story_id}/paid_column/section"
# authId = “7481a31d25d73bfc1edf9240df687cf9”
这样我们就可以自己动态修改请求 也可以 还不去关注浏览器内登录信息了 暴露的服务还可以解耦给其他 分布式服务使用 就是一个快乐
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/13269.html