Application(以下称App)主要指安装在智能手机上的应用程序。APP 运行在相应的操作系统上,如苹果公司的 iOS 系统或谷歌公司的 Android 系统。
App 和网站都是 Web 应用,它们与服务器通信时使用的协议是相同的。
与网站不同的是,App 的网络传输和数据收发相对隐蔽,用户既无法直接查看客户端发出的请求信息和服务器端返回的响应内容,也无法直接查看 App 的代码。
为了能像使用浏览器开发者工具一样对APP数据进行抓包,就必须先要一个能够对app数据进行抓取的开发者工具。
reqable
是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 。它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
看到这么多的应用,是不是就迫不及待的想要开始你的抓包之旅呢,不要急,俗话说的好:工欲善其事,必先利其器,我们先来安装reqable吧。
官网下载地址:
https://reqable.com/
安装教程如下:
双击安装包,如下所示,选择想要存放的目录,如果不需要修改,使用默认的即可,然后点击Next:
会出现以下界面,继续点击 Next
点击Install,等待几秒即可安装
安装后双击运行,如下所示到这里我们就初步安装成功了
如果想要对手机上的app进行抓包怎么办呢,那么你还需要进行以下操作:
首先你的reqable所在的电脑和手机必须处在同一个局域网内(即连着同一个路由器)。
其次需要修改reqable监听的ip和端口号,如下所示:
终端 ipconfig 查看IP地址
- 这个ip和端口号就是手机app设置的代理,后续在手机端我们会设置
最后就是需要配置证书,没有证书就会导致手机没网络。配置证书在本教程中需要配置到模拟器,后续在配置模拟器的再详细介绍。证书配置的教程在reqable中也有教程,如下所示:
为了能像使用浏览器开发者工具一样对APP数据进行抓包,就必须要一个能运行APP的环境。目前主流的是使用模拟器进行抓包,原因有以下几点:
当然也可以选择使用真机进行调试。但是实际采用真机会有很多不必要的麻烦,必须重做系统、获取root权限多多少少会影响到正常的使用,如果专门购买一个真机专门用于app调试,也免不了要多踩很多坑(国内的厂商都有自己的优化,并且手机型号、系统版本等等都会影响到调试)。
官网下载地址:https://www.yeshen.com/
双击安装包,选择安装路径,点击安装即可:
工具中找到设置,在设置页面下拉找到WLAN点击
长按WiredSSID,选择修改网络
点击高级选项下拉框
代理模式选择手动,填写代理服务器主机名和代理服务器端口,点击保存
注意:
reqable中显示监听的ip和端口是什么,那么在这里就填写什么
在reqable中,找到证书安装中的Android,复制证书下载地址
将复制的证书地址,在模拟器中的浏览器打开下载证书并且安装
在地址导航栏粘贴之前复制过来的证书下载地址 : http://reqable.proxy/ssl
拖动导航栏,点击下载好的证书安装
证书命名,任意名字都行,比如咱们这里取名 reqable
设置锁屏密码
设置锁屏通知,随便选,设置好后即可配置好证书
因为在模拟器中配置了代理服务器主机名和代理服务器端口,对应的就是reqable监听的ip和端口,所有的模拟器网关都会走这里。因此当我们单独启动模拟器的时候是没有网络的。
所以每次软件的启动的顺序如下,这样启动模拟器才会有网络:
如果reqable需要抓取模拟器的请求,需要在软件界面启动抓包功能,如下所示:
但是如果直接这样启动会抓取到很多系统代理,我们不需要分析这类系统代理请求,可以关闭此功能,如下所示:
完整的面板功能介绍请参考官方文档:http://reqable.com/docs/overview
证书在模拟器配置好以后在系统浏览器请求页面任然会提示证书安全警告,此现象仅出现在系统浏览器应用中,可以安装其他浏览器App,那么就不会有此类警告弹出。
系统应用无法安装App应用,如需安装可以在豌豆荚下载App应用安装包
豌豆荚官网地址:https://www.wandoujia.com/
选择普通下载
下载的文件尾缀是apk,此格式也是安卓应用安装包格式
import csv
import requests
url = 'http://mapi7.dangdang.com/index.php?page_version=new2&access-token=&time_code=38a2af8629a8657119656d2e6a4ec9cc&img_size=e&client_version=10.12.4&pageSize=10&union_id=537-100998×tamp=1689771977&province_id=111&permanent_id=20230719210103107521432505121491489&a=all-search&global_province_id=111&page_action=search&c=search&sort_type=default_0&keyword=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C&udid=1ac073189a158030f2c050f1bcf23f27&user_client=android&page=1'
# url = 'http://mapi7.dangdang.com/index.php?passback=c5e4133e68646b00c9dfb764fe0100009e44c800c9dfb764&page_version=new2&access-token=&time_code=ef9523739c8dd3da26e8c9faa25a6ed8&img_size=e&client_version=10.12.4&pageSize=10&union_id=537-100998×tamp=1689772443&province_id=111&permanent_id=20230719210103107521432505121491489&a=all-search&global_province_id=111&page_action=search&isKeepTrace=1&c=search&sort_type=default_0&keyword=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C&udid=1ac073189a158030f2c050f1bcf23f27&user_client=android&page=2'
headers = {
'Content-type': 'application/json',
'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G988N Build/NRD90M)',
'Host': 'mapi7.dangdang.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
}
response = requests.get(url=url, headers=headers)
json_data = response.json()
# print(json_data)
# 数据提取
data_list = json_data['data']['product']
for data in data_list:
productName = data.get('productName') # 书名
"""数据包中包含了 '为您推荐' 和 '您是不是想找' 类目的数据, 可以通过判断逻辑过滤掉"""
if not productName: # 如果productName没数据就跳过这次循环
print(None)
continue
author = data.get('author') # 作者
price = data.get('price') # 价格
commentCount = data.get('commentCount') # 评价数量
goodCommentRate = data.get('goodCommentRate') # 好评率
print(productName, author, price, commentCount, goodCommentRate, sep=' | ')
with open('当当.csv', mode='a', encoding='utf-8', newline='') as f:
csv_write = csv.writer(f)
csv_write.writerow([productName, author, price, commentCount, goodCommentRate])
"""
说明:
1. 模拟器安装app有的会检测应用环境- root -其他环境
2. app请求的数据会被加密 js加密 安卓加密 --> 安卓逆向
java 汇编语言(c++) 算法 各种逆向工具的使用
开发是正向
3. 有的app会检测证书, 安卓逆向
wx, 代理走的自定义代理协议, 逆向wx
"""