爬虫练习案例实战:从 JS 逆向到 Android 逆向文章合集 && 总结
大家好,爬虫练习平台实战文章目前除了验证码部分和有问题的题目都更新完成了,本篇文章来对前面的所有案例做一个总结,并附上文章链接。同时也作为一篇索引文章,方便查询需要的文章内容。
平台介绍
爬虫练习平台中所有的案例均来自于《Python3 网络爬虫开发实战(第二版)》这本书,文章中所用到的解法均来自于自己学习总结的内容。
文章介绍 &&目录
SSR1-SSR4
这四个网站主要是学习 Scrapy 的使用,先安装 Scrapy,然后初始化爬虫,学习如何从网页的 html 中提取出对应的数据,并且将爬取到的数据保存到数据库中,并且还要了解如何使用 Scrapy 的中间件,以自动添加 HTTP 认证请求头,适合初学者入门学习 Scrapy 和爬虫技术。
spa1-spa6
这六个网站主要使用了 Ajax 渲染技术,网页上的数据是动态加载的,而不是直接放到 html 中,可以学习如何定位 Ajax 接口所在位置,根据 Ajax 请求数据转换成对应的 Scrapy 代码,并自动翻页。还有部分网站使用了简单的 JS 混淆,适合学习 JS 混淆代码的逆向相关知识。
spa7-spa9
这三个网站主要是前端渲染相关内容,网站将内容直接放到了 JS 文件中,在 JS 运行的时候将数据动态的填充到对应的 html 标签上。因为数据在 JS 中,所以需要将混淆的 JS 代码处理以后拿到需要的数据,此阶段需要掌握如何处理经过不同方法混淆的 JS 代码。
spa10-spa12
JS逆向实战:JJEncode与JSFuck混淆编码全解析!
这三个网站主要是对不同变种的 JS 编码进行解析和反混淆,JS 编码技术实际上对代码的保护力度稍弱,不过对于第一次接触 JS 编码技术的小伙伴来说可能无从下手。这三个网站可以学习到如何分析被编码后的 JS 代码的执行流程,从而可以实现快速解析 JS 代码,并且输出对应的源码。
spa13
这个网站使用了 OB 混淆技术对 JS 代码进行了一定的混淆,可以借此学习如何使用 AST 技术来反混淆 JS 代码。
spa14
这个网站将加密算法放到了 wasm 中,通过这个网站,可以知道 JS 如何与 wasm 进行相互调用,也可以学到如何使用 Python 本地调用 wasm。
spa15
这个网站同样是将算法放到了 wasm 中,但是 wasm 导出函数的两个参数都是字符串类型,wasm 本身并不支持字符串类型的参数,需要将其转换为 wasm 内存指针才能正常传入,这个时候使用 Python 本地调用就不太方便了,我这里使用了另一种方案来调用 wasm。将 WASM 转换为 C 语言代码后,编译生成动态链接库(.so),使 Python 可直接调用其导出函数,这样可以兼顾性能和效率,是比较通用的解法。
spa16
JS逆向实战:如何利用httpx与Scrapy突破HTTP2协议
这个网站没有反爬,但是网站使用了 HTTP2 协议,Python 的 Requests 并不支持。文章中提供了两种方案来请求仅支持 HTTP2 协议的网站,分别是 httpx 和 Scrapy。httpx 天生支持 HTTP2 协议,Scrapy 可以通过中间件的方式来支持 HTTP2 协议。
login1-login3
这三个网站使用了多种登录方式来登录网站,可以用来学习 Scrapy 模拟登录操作,同时可以学习 Scrapy 的中间件在登录时的用法。
websocket1
websocket 聊天室,相对比较简单,加上使用 websocket 加载数据的网站不是很多,这里先跳过。
antispider1-antispider4
Scrapy实战:在Scrapy中集成selenium采集数据
这四个网站使用了多种反爬方式,文中使用 Scrapy 集成 selenium 来爬取数据,selenium 可以控制真实的浏览器来获取 html,加载执行 JS,输出最终的 html 代码,这样只需要从 html 中解析需要的数据即可。但是这种方式因为要加载,解析,执行 html 和 JS,所以在爬取效率上会不如直接请求 html 高。可以从两篇文章中学习如何集成 selenium,当然了,同样也可以集成其他中间件来获取解析后的 html 源代码。
antispider5-antispider7
Scrapy 中 '返回 request 对象' 如何引发死循环?一个简单实验解答
这三个网站使用了不同的 ip 和账号封禁方案来禁止爬虫,从文章中可以学习如何动态的切换代理 ip 和账号 Cookie,同样都是操作 Scrapy 的中间件。
antispider8
这个网站使用了无限 debugger 的方案来禁止调试。文章中提到了一个一劳永逸的方案,那就是更换成 Firefox 浏览器,Firefox 可以通过设置来暂时屏蔽掉 debugger,让它不生效,这样就不会影响调试了。
antispider9
难度稍高的 OB 混淆,增加了格式化检测和一些无效代码,但是本质上还是 OB 混淆,可以使用 AST 技术来反混淆。
antispider10
这个题目现在还有问题,无法正常显示数据,暂时跳过。
appbasic1-appbasic2
特别简单的一个 APP,无实际业务逻辑,只有一个按钮,实现了相加操作,分别在 Java 层和 so 层实现。简单的反编译即可看到实现代码,方便学习反编译,对 APP 逆向有一个初步的了解。
APP1-APP3
这三个 APP 只检测了系统代理,可以学习如何过掉系统代理检测,同时可以学习 frida 的基本使用。
APP4
这个 APP 设置了 SSL Pining,在客户端固定了证书,正常的抓包软件无法和 APP 握手成功,文章中使用了 frida 来解除 SSL Pining,让 APP 不进行证书校验,从而正常抓包。
APP5
APP 增加了加密参数,不过加密逻辑在 Java 层,反编译即可。
APP6-APP7
两个 APP 分别使用了混淆和加固的方案。加固还是一个大厂的加固方案,使用 DexHunter 工具导出解密后的 dex 文件,逆向加密逻辑。
APP8
加密逻辑在 Native 层实现,但是没有对 so 文件进行混淆,使用 ida 反编译后代码可读性还是很好的,加密逻辑也比较清晰。
APP9
Android 逆向实战|手把手实现RPC+so自动化解决方案
Android逆向实战:模拟调用解决Native+LLVM混淆
加密逻辑在 Native 层实现,并且 so 文件使用 LLVM 技术进行了混淆,无法静态分析,文章中使用 unidbg 模拟执行的方案来调用 so 中的加密算法,也可以使用开源代码将 unidbg 暴露 HTTP 接口,让 Python 可以直接调用。
总结
通过以上案例的系统性实战,可建立起从 JS 逆向到 Android 逆向较为完整的知识体系。建议按照文章顺序循序渐进学习,遇到问题时善用开发者工具调试,同时保持对新技术方案(如 WASM、HTTP/3 等)的关注。
本文章首发于个人博客 LLLibra146's blog
本文作者:LLLibra146
更多文章请关注公众号 (LLLibra146):
![]()
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
版权声明: 本文为 InfoQ 作者【LLLibra146】的原创文章。
原文链接:【http://xie.infoq.cn/article/d898cd55304f5e3c5078b207b】。未经作者许可,禁止转载。
评论