• APP 爬虫


    APP 爬虫

    Application(以下称App)主要指安装在智能手机上的应用程序。APP 运行在相应的操作系统上,
    如苹果公司的 iOS 系统或谷歌公司的 Android 系统。

    App 和网站都是 Web 应用,它们与服务器通信时使用的协议是相同的。

    与网站不同的是,App 的网络传输和数据收发相对隐蔽,用户既无法直接查看客户端发出的请求信息和服务器端返回的响应内容,也无法直接查看 App 的代码。

    虽然有些牵强,但这的确构成了被动型反爬虫。

    在之前的案例中,在爬取列表页中的商品数据前,需要对元素进行定位。

    但在面对 App 时,要做的第一件事就是找到该页面对应的 URL。

    相对于网站来说,App 较为封闭,用户无法直接看到网络请求和响应信息。

    要想查看这些内容,就需要对 App 抓包,常用的抓包软件有 Charles、 Fiddler 和 Wireshark

    Charles 扮演的是中间人的角色,我们需要更改手机网络的代理设置,将安装有 Charles 的计算机作为网络跳板,这样 Charles 才能读取手机的网络传输信息。

    要注意的是,被抓包的手机必须和计算机在同一个网络中。

    首先查看计算机的 IP 地址,然后打开手机的 WiFi 设置,并进入网络设置界面

    因为手机的版本高的问题,我们这里选择 安卓模拟器

    Charles 添加手机 IP 地址



    京东商城案例(HTTPS)

    我们可以借助抓包工具查看 App 的网络请求信息,前提是 App 使用的网络传输协议是HTTP。

    如果 App 使用的网络传输协议是 HTTPS,那情况就复杂多了。

    没有证书是无法查看请求信息的,好在 Charles 为用户提供了有效的 SSL 证书,我们只需要按照官网的介绍进行证书的安装即可

    接下来我们以京东商城为例,演示基于 Https 协议的网络通信抓包过程。

    计算机端和手机端证书安装完毕且设置证书信任后,在系统中安装京东商城 App。

    在抓包之前,我们还需要对 Charles 进行一些设置,以抓取基于 Https 协议的网络(请求与响应)信息。

    在 Charles 菜单栏中找到 Proxy 选项,并在下拉列表中选择 SSL Proxying Settings。

    点击界面中的 Add 按钮,然后在Host栏中填入“*”

    在 Port栏中填入 443,这代表监听所有网址的 443 端口

    手机设置好网络代理配置后,我们就可以在模拟器中下载对应的 SSL 证书了

    打开浏览器访问 http://chls.pro/ssl 该页面是 Charles SSL 证书的下载项

    下载后点击文件安装即可

    打开京东 APP 搜索 MAC 电脑

    App 只是比网站多了一层保护壳,这个保护壳将 App 发出的请求和得到的响应包裹起来,不让用户轻易看到

    抓包软件实际上是 App 和服务器端的中间人,设置代理后,网络传输的信息就会经过中间人

    这就是我们能够在抓包软件中查看 APP 发出的网络请求和服务端响应信息的原因



    APK 文件反编译

    签名验证是防止恶意连接和避免服务器端被数据欺骗的有效方式之一,也是后端 API 最常用的防护手段之一。

    相对于 Web 网站中的签名验证来说,App 中的签名验证手段更为安全。

    这是由于 App 的代码不会直接暴露给外部,而查看 JavaScript 代码则容易得多。

    我们之前了解了签名验证在 Web 网站中的应用,本节我们将讨论它在 App 中的应用。

    我们再请求总览中找到 url ,在浏览器中打开

    我们复制该 URL 并用浏览器访问,但服务器端返回的状态码并不是 200,而是 403。

    根据 URL 中的请求正文,我们可以猜测 App 详情页的接口使用了类似于签名验证反爬虫

    我们在签名验证反爬虫中通过查看网站的 JavaScript 代码整理出请求正文的加
    密逻辑,但 App 的代码如何查看呢?



    APK 文件反编译实战

    高级语言的源程序需要通过编译生成可执行文件,编译就是将编程语言翻译成计算机能够识别和
    处理的二进制数据的过程。反编译又名计算机软件反向工程,指的是将软件应用还原成开发语言代码

  • 相关阅读:
    JavaScript | 闭包
    Photoshop | 快速抠头发(调整边缘/选择并遮住)
    JavaScript | 基础表单验证(纯Js)
    JavaScript | 事件
    JavaScript | 数组
    JavaScript | 对象与属性
    JavaScript | 基础(变量/引用/转换/函数)
    Altium Designer 10 | 常用库及部分元件名中英文对照表
    电路 | 基本概念
    读点什么 |《把时间当作朋友》李笑来
  • 原文地址:https://www.cnblogs.com/kai-/p/12621213.html
Copyright © 2020-2023  润新知