Python爬虫第五部分:抓包工具使用与App逆向解析

66 阅读12分钟

一、抓包工具的使用

1.Charles的使用

Charles 是一个 网络抓包工具

可以用它来做 App 的 抓包分析,得到 App 运行过程中发生的所有网络请求和响应内容

相比 Fiddler,Charles跨平台支持更好

原理

 · 首先将 Charles运行在自己的PC上,Charles运行的时候会在PC的8888 端口开启一个代理服务,这个服务,实际上是一个 HTTP/HTTPS 的代理
 · 确保手机和 PC在同一个局域网内,我们可以使用手机模拟器通过虚拟网络连接,也可以使用手机真机和 PC通过无线网络连接
 · 设置手机代理为 Charles的代理地址,这样手机访问互联网的数据包就会流经CharlesCharles 再转发这些数据包到真实的服务器,服务器返回的数据包再由 Charles 转发回手机Charles 就起到中间人的作用,所有流量包都可以捕捉到,因此所有 HTTP 请求和响应都可以捕获到同时 Charles 还有权力对请求和响应进行修改
123

2.mitmproxy的使用

Charles可以帮助我们抓取 HTTP 和 HTTPS 的数据包

抓到请求之后,我们如果能够分析出接口请求的一些规律,就能轻松通过 Python 脚本来进行改写

当请求里面包含一些无规律的参数的时候,可能就束手无策了

所以需要使用叫作 mitmproxy 的工具,它可以对抓包的结果通过脚本进行实时处理和保存

mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序

有类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作

mitmproxy 有两个关联组件

一个是 mitmdump,它是 mitmproxy的命令行接口

利用它可以对接 Python 脚本,用 Python 实现实时监听后的处理

另一个是 mitmweb,它是一个Web 程序,通过它可以清楚观察 mitmproxy捕获的请求

抓包原理:和 Charles一样, mitmproxy运行于自己的PC上,mitmproxy会在PC的8080 端口运行然后开启一个代理服务,这个服务实际上是一个 HTTP/HTTPS 的代理

手机和 PC 在同一个局域网内, 设置代理为 mitmproxy 的代理地址,这样手机在访问互联网的时候流量数据包就会流经 mitmproxy,mitmproxy再去转发这些数据包到真实的服务器,服务器返回数据包时再由 mitmproxy转发回手机,这样 mitmproxy 就相当于起了中间人的作用,抓取到所有 Request 和 Response

另外这个过程还可以 对接 mitmdump,抓取到的 Request和 Response 的具体内容,都可以直接用 Python 来处理,比如得到 Response 之后我们可以直接进行解析,然后存入数据库,这样就完成了 数据的解析和存储过程

mitmdump是mitmproxy 的命令行接口,同时还可以对接Python 对请求进行处理,这是相比 Fiddler、Charles 等工具更加方便的地方。有了它我们可以不用手动截获和分析 HTTP 请求和响应, 只需写好请求和响应的处理逻辑即可,它还可以实现数据的解析、存储等工作,这些过程都可以 通过Python 实现

除了Charles和mitmproxy,Sniffmaster是另一款全平台抓包工具,支持iOS、Android、Mac和Windows设备,无需代理、越狱或root即可进行HTTPS、TCP和UDP抓包。它提供暴力破解HTTPS、数据流抓包和代理抓包等功能,方便开发者快速捕获和分析网络流量。

3.Appium的使用

Appium 是一个跨平台移动端自动化测试工具

可以非常便捷地为 iOS 和 Android 平台创建自动化测试用例

它可以模拟 App 内部的各种操作,如点击、滑动、文本输入等

Selenium 是一个网页端的自动化测试工具

Appium 实际上继承了 Selenium

Appium 也是利用 WebDriver来实现 App 的自动化测试的

对于i0S 设备,Appium 使用 UlAutomation 来实现驱动

对于Android ,它使用 UiAutomator和Selendroid 来实现驱动Appium 相当于一个服务器,向 Appium 发送一些操作指令Appium 就会根据不同的指令对移动设备进行驱动,完成不同的动作

4.airtest的使用

Airtest

是一个跨平台的、基于图像识别的 U 自动化测试框架

适用于游戏和 App,支持平台有Windows、Android和i0S,基于 Python 实现

Poco

是一款基于 U1控件识别的自动化测试框架

目前支持 Unity3D/cocos2dx/Android 原生 App/i0S 原生 App/微信小程序

也可以在其他引擎中自行接入 poco-sdk来使用,同样是基于Python 实现的

Airtest概况

AirtestlDE

提供了一个跨平台的 U自动化测试编辑器,内置了 Airtest和 Poco 的相关插件功能能够使用它快速简单地编写Airtest和Poco代码

AirLab

真机自动化云测试平台,目前提供了 TOP100 手机兼容性测试、海外云真机兼容性测试等服务

私有化手机集群技术方案

从硬件到软件,提供了企业内部私有化手机集群的解决方案

5.Xposed使用

Xposed 框架(Xposed Framework)

是一套开源的,在 Android 高权限模式下运行的框架服务,可以在不修改 App 源码的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作

Xposed 框架(Xposed Framework)

原理是通过替换系统级别的/system/bin/app_process 程序控制 zygote 进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,这个jar 包里面定义了对系统方法、属性的一系列 Hook 操作,同时还提供了几个 HookAPI供我们编写 Xposed 模块来使用

二、App逆向的常见技巧

1.App逆向介绍

很多 App 在请求 API的时候都有加密参数

前面介绍了一种利用 mitmdump 来实时抓取数据的方法

如果要想拿到 App 发送的请求中包含哪些加密参数

就得剖析本源,深入到 App 内部去找到这些加密参数的构造逻辑

这其中就需要一定的 逆向操作

可能需要对 App 进行反编译,然后通过分析源码的逻辑找到对应的加密位置

逆向相关的操作::

· 通过逆向操作获得 apk 反编译后的代码

· 然后追踪这个 token 的生成逻辑是怎样的

· 最后再用代码把这个逻辑实现出来

App 逆向实多数情况下就是 反编译得到 App 的源码,然后从源码里面找寻特定的逻辑

2.逆向工具

逆向工具叫 JEB

JEB 是一款专业的安卓应用程序的反编译工具

适用于逆向和审计工程,功能非常强大,可以帮助逆向人员节省很多逆向分析时间

利用这个工具能方便地获取到 apk 的源码信息

JEB 支持 Windows、Linux、Mac 三大平台,其官网地址为 www.pnfsoftware.com/

得到了这些反编译的内容,该从哪个地方入手去找入口呢?

通过 API的一些标志字符串 来查找入口

三、智能化解析

1.基本原理

爬虫的智能化解析,就是不再需要我们针对某一些页面来专门写提取规则了

利用一些算法来计算出页面特定元素的位置和提取路径

比如一个页面中的一篇文章,我们可以通过算法计算出来

它的标题应该是什么,正文应该是哪部分区域,发布时间等等

智能化解析是非常难的一项任务

比如说你给人看一个网页的一篇文章,人可以迅速找到这篇文章的标题是什么

发布时间是什么,正文是哪一块,或者哪一块是广告位,哪一块是导航栏,但给机器来识别的话它面临的是什么?仅仅是一系列的 HTML代码而已

那究竟机器是怎么做到智能化提取的呢?

· 比如标题。。一般它的字号是比较大的,而且长度不长位置一般都在页面上方,而且大部分情况下它应该和 title标签里的内容是一致的

· 比如正文。它的内容一般是最多的,而且会包含多个段落p或者图片img标签另外它的宽度一般可能会占用到页面的三分之二区域,并且密度(字数除以标签数量)会比较大

· 比如时间。不同语言的页面可能不同,但时间的格式是有限的,如2024/8/30 或者 2024/08/31 等等也有可能是美式的记法,顺序不同,这些也有特定的模式可以识别。

· 比如广告。它的标签一般可能会带有 ads 这样的字样,另外大多数可能会处于文章底部、页面侧栏并可能包含一些特定的外链内容

这其中包含了区块位置、区块大小、区块标签、区块内容、区块疏密度等等多种特征

另外很多情况下还需要借助于 视觉的特征,结合了算法计算、视觉处理、自然语言处理等各个方面

如果能把这些特征综合运用起来,再经过大量的数据训练,是可以得到一个非常不错的效果的

2.智能化解析工具使用

智能文本提取可以分为三类:

基于网页文档内容的提取方法

将 HTML 文档视为文本进行处理

适用于处理含有大量文本信息且结构简单易于处理的单记录网页,或者具有实时要求的在线分析网页应用

通过理解文本语义、分析上下文、设定提取规则等,实现对大段网页文档的快速处理

较为知名的方法有TSIMMIS、Web-0QL、Serrano、FAR-SW和 FOREST

但这些方法通常需要人工的参与,且存在耗时长、效率低的弊端

基于 DOM 结构信息的提取方法

将 HTML 文档解析为相应的 DOM 树,然后根据 DOM 树的语法结构创建提取规则

W4F和XWRAP 将HTML文档解析成 DOM 树

然后通过组件化引导用户通过人工选择或者标记生成目标包装器代码

Omini、IEPAD 和ITE提取 DOM 树上的关键路径,获取其中存在的重复模式

MDR 和 DEPTA 挖掘了页面中的数据区域,得到数据记录的模式

CECWS 通过聚类算法从数据库中提取出自同一网站的一组页面,并进行DOM 树结构的对比删除其中的静态部分,保留动态内容作为信息提取的结果

此类方法相对于上一类方法具有较高的提取精度,且克服了对大段连续文本的依赖

基于 DOM 结构信息的方法具有较高的时间和空间消耗

大部分原理还是基于 DOM 节点的文本密度、标点符号密度等计算的

基于视觉信息的提取方法

通过浏览器接口或者内核对目标网页预渲染,然后基于网页的视觉规律提取网页数据记录

经典的 VIPS 算法首先从 DOM 树中提取出所有合适的页面区域

然后根据这些页面和分割条重新构建 Web 页面的语义结构

ViNT、ViPER、ViDE 成功利用了网页的视觉特征来实现数据提取

CMDR为通过神经网络学习多记录型页面中的特征,结合基于DOM结构信息的MDR方法

挖掘社区论坛页面的数据区域

VIBS 将图像领域的 CNN 卷积神经网络运用于网页的截图,同时通过类VIPS 算法生成视觉块

最后结合两个阶段的结果识别网页的正文区域

最新的国内提出的 VBIE方法,基于网页视觉的基础上改进,可以实现 无监督的网页信息提取

3.Readability和Newspaper

Readability 实际上是一个算法,其主要原理是 计算了 DOM 的文本密度

根据一些常见的 DOM 属性如 id、class 等计算了一些 DOM 的权重

最后分析得到了对应的 DOM 区块,进而提取出具体的文本内容

现在 Readability被取而代之的是一个 JavaScript工具包,即 mercury-parser

pip install readability-lxml
1

Newspaper库分为 Python2Python3 两个版本

Python2 下的版本叫作 newspaper

Python3 下的版本叫作 newspaper3k

pip install newspaper3k
1

四、Scrapy的使用

1.Scrapy的介绍

基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其 架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求只需定制开发几个模块就可以轻松实现一个爬虫

2.Spider的用法

Spider 运行流程

对于 Spider 类来说,整个爬取循环如下所述

· 以初始的 URL初始化 Request,并设置回调函数当该 Request 成功请求并返回时,将生成Response,并作为参数传给该回调函数

· 在回调函数内分析返回的网页内容,返回结果可以有两种形式

① 解析到的有效结果返回字典或 ltem 对象,下一步可经过处理后(或直接)保存

② 解析到的下一个链接,可以利用此链接构造 Request 并设置新的回调函数,返回 Request

· 如果返回的是字典或 ltem 对象,可通过 Feed Exports 等形式存入文件如果设置 Pipeline ,可以经由 Pipeline 处理(如过滤、修正等)并保存

· 如果返回的是 Reqeust,那 Request执行成功得到 Response 之后会再次传递给 Request 中定义的回调函数,可以再次使用选择器来分析新得到的网页内容并根据分析的数据生成 Item