1 逆向基本流程
2 ADB配置和使用
2.1 ADB是什么?
「adb」即 Android Debug Bridge ,亦称安卓调试桥,是谷歌为安卓开发者提供的开发工具之一,可以让你的电脑以指令窗口的方式控制手机。
可以在安卓开发者网页中的 SDK 平台工具页面下直接下载对应系统的 adb 配置文件,大小只有几十MB
https://developer.android.com/studio/releases/platform-tools?hl=zh-cn
https://androidmtk.com/download-android-sdk-platform-tools
内含:adb工具和fastboot工具
2.2 ADB版本的选择
34.0.1(2023 年 3 月)
链接: https://pan.baidu.com/s/1JxmjfGhWqWjpkprqi6GGrQ
提取码: yyhx
platform-tools_r34.0.3-windows.zip
platform-tools_r30.0.5-windows.zip
platform-tools_r30.0.5-mac.zip
platform-tools_r30.0.5-linux.zip
2.3 ADB 安装和配置
2.3.1 win 平台安装
adb version
2.3.2 mac/linux平台安装配置
vi .zprofile
export PATH=${PATH}:/Users/lqz/soft/platform-tools
source .zprofile
adb version
2.3.3 环境变量介绍
环境变量是操作系统中用于存储系统级别配置信息的一种机制,可以为应用程序提供统一的配置和运行环境
路径在环境变量下,该路径下的可执行文件,可以在任意路径下执行
2.4 ADB 操作手机
2.4.1 开启USB调试
-开启USB调试
2.5 ADB常用命令
adb start-server 启动ADB
adb kill-server 关闭ADB
adb devices 查看已连接的设备
adb -s 设备id号 push C:\demo.txt /sdcard
adb -s 设备id号 pull /sdcard/demo.txt C:\
adb install C:\2345Downloads\xianyu.apk
adb uninstall 包名称
adb shell pm list packages
adb shell pm list packages -e 关键字
adb shell -s 设备id号 getprop ro.product.cpu.abi
adb shell getprop ro.product.cpu.abi
'''
armeabi-v7a(32位ARM设备)
arm64-v8a (64位ARM设备)
'''
adb shell
taimen:/ $ su
taimen:/
'''
acct data firmware odm sdcard
apex
'''
- 查看手机设备:adb devices
- 查看设备型号:adb shell getprop ro.product.model
- 查看电池信息:adb shell dumpsys battery
- 查看设备ID:adb shell settings get secure android_id
- 查看设备IMEI:adb shell dumpsys iphonesubinfo
- 查看Android版本:adb shell getprop ro.build.version.release
- 查看手机网络信息:adb shell ifconfig
- 查看设备日志:adb logcat
- 重启手机设备:adb reboot
- 安装一个apk:adb install /path/demo.apk
- 卸载一个apk:adb uninstall <package>
- 查看系统运行进程:adb shell ps
- 查看系统磁盘情况:adb shell ls /path/
- 手机设备截屏:adb shell screencap -p /sdcard/aa.png
- 手机文件下载到电脑:adb pull /sdcard/aa.png ./
- 电脑文件上传到手机:adb push aa.png /data/local/
- 手机设备录像:adb shell screenrecord /sdcard/ab.mp4
- 手机屏幕分辨率:adb shell wm size
- 手机屏幕密度:adb shell wm density
- 手机屏幕点击:adb shell input tap xvalue yvalue
- 手机屏幕滑动:adb shell input swipe 1000 1500 200 200
- 手机屏幕带时间滑动:adb shell input swipe 1000 1500 0 0 1000
- 手机文本输入:adb shell input text xxxxx
- 手机键盘事件:adb shell input keyevent xx
3 通过ABD线刷手机及root手机
3.1 Recovery介绍
完整的触摸操作界面:TWRP提供了易于导航的触摸操作界面,用户可以使用手指滑动和点击来浏览和选择不同的选项。
完整的备份和恢复功能:TWRP允许用户对整个系统进行完整的备份,包括操作系统、应用程序、数据和设置。用户可以随时使用这些备份来恢复设备到先前的状态。
安装第三方固件和补丁:使用TWRP,用户可以安装自定义固件、ROM、补丁和MOD。这使得用户能够个性化和定制他们的设备,并享受各种功能和优化。
分区管理:TWRP提供了对设备分区的灵活管理。用户可以查看和操作不同的分区,包括系统分区、数据分区、缓存分区和恢复分区。
刷入ZIP文件:通过TWRP,用户可以轻松地刷入ZIP格式的文件,如应用程序、主题、内核等
3.2 root手机方案一(twrp recovery方式)
https://github.com/topjohnwu/Magisk/releases
adb install -r /Users/lqz/soft/Magisk-v26.1.apk
Performing Streamed Install
Success
adb push /Users/lqz/soft/Magisk-v26.1.zip /sdcard/Download
/Users/lqz/soft/Magisk-v26.1.zip: 1 fi.... 23.9 MB/s (11411692 bytes in 0.455s)
adb reboot bootloader
fastboot devices
fastboot boot /Users/lqz/soft/twrp-3.6.2_9-0-taimen.img
Sending 'boot.img' (40960 KB) OKAY [ 0.972s]
Booting OKAY [ 0.001s]
Finished. Total time: 1.013s
点击修复---》直接安装---》等待修复成功,重启手机就root了
3.2 root 手机方案二(刷机改img方式)
地址: https://github.com/topjohnwu/Magisk/releases
adb install -r /Users/lqz/soft/Magisk-v26.1.apk
Performing Streamed Install
Success
'''
bootloader-taimen-tmz30m.img
flash-all.bat
flash-all.sh
flash-base.sh
image-taimen-rp1a.201005.004.a1.zip
radio-taimen-g8998-00034-2006052136.img
'''
'''
android-info.txt
boot.img # 引导镜像
dtbo.img
system_other.img
system.img
vbmeta.img
vendor.img
'''
adb push ./boot.img /sdcard/Download
adb pull /sdcard/Download/magisk_patched-26100_0DQpw.img /Users/lqz/soft
adb reboot bootloader
fastboot devices
fastboot flash boot /Users/lqz/soft/magisk_patched-26100_0DQpw.img
adb reboot bootloader
fastboot flash boot_a /Users/lqz/soft/magisk_patched-26100_0DQpw.img
fastboot flash boot_b /Users/lqz/soft/magisk_patched-26100_0DQpw.img
fastboot reboot
4 数据包抓取
4.1 抓包工具选择
4.2 charles安装和配置
4.2.1 mac安装配置
4.2.2 win安装配置
4.2.3 sn账号
Name: Just For Testing
Serial: 230ADA2020DFBD108E
Name: TEAM MESMERiZE
Serial: FC91D362FB19D6E6CF
Name: MSJ
Serial: 1101CAF6A1989C62AC
4.3 使用charles抓取手机http包
【电脑】安装并运行抓包工具 charles
【手机】配置手机系统代理
4.3.1 配置模拟器抓包
或执行命令查看:
win:ipconfig
mac:ifconfig
4.3.2 配置真机抓包
或执行命令查看:
win:ipconfig
mac:ifconfig
4.3.3 抓取http包案例(爱学生app)
import requests
data={"code":"","password":"lqz12345","username":"18953675221","uuid":""}
res=requests.post('http://parentsystem.aixuesheng.net/app/v1/patriarchLogin/1',json=data)
print(res.text)
4.4 使用charles抓取手机https包(手机需要root)
4.4.1 模拟器安装charles证书
手机或模拟器只能抓取http请求的数据包,https无法抓取。
想要抓取,就需要在手机上安装charles的证书。
安卓7 以下设备,安装完证书就可以使用,不用移动证书
安卓7以上设备,安装完证书后,为用户证书,必须把用户证书,移动成系统证书,需要借助于magisk刷move cert模块,需要root权限
4.4.2 真机安装charles证书
-此时可以看到用户证书和系统证书
4.4.3 用户证书和系统证书解释
在 Android 系统中,有两种类型的证书:用户证书(User Certificates)和系统证书(System Certificates)。
用户证书(User Certificates):用户证书是由特定用户生成或颁发的数字证书。这些证书通常用于用户身份验证和安全通信。用户证书可以用于加密和解密数据,数字签名以及建立安全连接。用户证书通常由用户自己创建,例如,用于加密电子邮件、VPN连接或身份验证。
系统证书(System Certificates):系统证书是由 Android 系统或设备制造商预装的证书。这些证书通常用于系统级别的安全功能,如应用程序签名验证、SSL/TLS 连接等。系统证书通常用于验证应用程序的真实性和完整性,以确保它们没有被篡改或恶意修改。这些证书由 Android 操作系统或设备制造商管理和维护。
系统证书包括以下几种类型:
代码签名证书:用于验证应用程序的签名,以确保应用程序的真实性和完整性。
安全通信证书:用于建立 SSL/TLS 连接,保护设备和服务器之间的通信安全。
根证书:根证书用于验证其他证书的真实性。Android 系统预装了一组根证书,用于验证 SSL/TLS 通信中的服务器证书。
用户证书和系统证书在安全和身份验证方面扮演不同的角色。用户证书由用户自己管理,用于个人身份验证和加密通信。而系统证书由操作系统或设备制造商管理,用于验证应用程序和保护系统级别的通信安全。
4.4.4 把用户证书转成系统证书
adb push /Users/lqz/soft/movecert-1.9-4.zip /sdcard/Download
按照下图步骤
-此时可以看到用户级别证书移动到系统级别了
4.4.5 案例:抓取https包(今日南川app)
import requests
data = {
'appId': '32',
'hashSign': '133bcb5e7330257a8823747b492d28b2',
'imgUrl': '',
'lat': '29.568295',
'lng': '106.559123',
'loginName': '18953645221',
'nickName': '',
'openId': '',
'place': '重庆',
'pwd': '827ccb0eea8a706c4c34a16891f84e7b',
'sessionId': '392032c5-09c8-4c3c-bb17-16a1dc49f7fc',
'token': "",
'type': '',
}
headers = {
'appid': '32',
'sessionid': '392032c5-09c8-4c3c-bb17-16a1dc49f7fc',
'token': '',
't': '1686650472124',
'sign': '90b5afeaed045a4c5ac9b13f693c7023',
'cqlivingappclienttype': '1',
'cqlivingappclientversion': '2029',
'content-type': 'application/x-www-form-urlencoded',
'content-length': '249',
'accept-encoding': 'gzip',
'user-agent': 'okhttp/4.10.0',
}
res = requests.post('https://api.cqliving.com/login.html', data=data, verify=False,headers=headers)
print(res.text)