本帖最后由 bgwu666 于 2023-6-22 13:09 编辑
前言
学校的APP前后端分离,所以有很多API接口在APP数据交换过程中可以被记录分析,本文讲述了使用Charles软件配合安卓模拟器进行抓包分析,经过一系列简单操作实现无需密码强制登录APP。
注:本文已经过脱敏处理。
工具安装及环境配置
所需工具
Charles 4.5.6、Openssl3.1.1、雷电模拟器 9.0.16(安卓9)
环境配置
Charles环境配置
因为大部分API接口都通过HTTPS进行数据传输,所以需要进行HTTPS抓包相关配置。
-
打开Charles软件,依次点击帮助-SSL代{过}{滤}理-安装Charles根证书,安装进受信任的根证书颁发机构。
-
依次点击代{过}{滤}理-SSL设置,勾选启用SSL代{过}{滤}理设置,并在下面点击添加,主机:"*",端口:"443",点击确定添加。
-
点击帮助-SSL代{过}{滤}理-保存Charles根证书,选择一个位置保存即可。
为什么不选择为移动设备安装Charles证书? 简单尝试后发现模拟器无法下载Charles证书,故放弃。猜想因为自带浏览器问题。
-
打开导出文件夹可以看到导出的证书后缀为.pem格式的,Android系统证书后缀为.0格式,所以接下来对证书进行Hash计算。
-
右键导出文件夹空白处打开终端, 输入指令开始校验Hash值。
openssl x509 -inform PEM -subject_hash_old -in Charles.pem
- 使用上面Hash的值对pem证书进行重命名,命名格式为:值.0,Charles配置完毕。
雷电模拟器配置
雷电模拟器是Android9版本,系统在模拟器中较新,可以很好的支持校园APP运行。雷电模拟器需要配置以下几点:Root权限开启、证书导入、网络桥接、网络代{过}{滤}理设置。
Root权限开启
进入雷电模拟器设置,点击其他设置-ROOT权限,勾选开启确认保存。
证书导入
模拟器中安装好并打开MT管理器,授予Root权限,进入/etc/security/cacerts/ ,将上述第5步生成并修改好名字的证书直接拖入模拟器窗口,记好路径,在MT管理器中将证书复制到cacerts 文件夹中,修改权限为644。
网络桥接
进入雷电模拟器设置,点击网络设置-网络桥接模式,勾选开启,点击安装驱动,选择你现在的上网卡,我的是笔记本,所以选择默认无线网卡,IP设置无特殊要求默认DHCP即可,保存设置。
网络代{过}{滤}理
回到Charles,点击帮助-本地IP地址,查看本机无线网卡IP,进入WIFI设置,为WIFI设置代{过}{滤}理,IP填写你的网卡IP,端口填写8888,确认保存。注意,IP会因为网络硬件配置以及软件配置不同而不同,注意自行辨别你的网卡IP。
该贴主要为分享,故工具配置,环境搭建没有详写,如果需要更详细的教程,可以自行bing,关键词:Charles、抓包、Android、https
推荐一篇论坛上的帖子:抓包神器之Charles配置和使用手册 - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
分析APP请求
- Charles开始记录,打开APP,先输入错误的密码测试登录接口,发现一条Path为/api/user/login的POST请求,查看内容断定这条是登录API。
-
分析Body表单
Key |
Value |
note |
userid |
*******136 |
学号 |
getuicid |
ee6cafdbfc0af224b17fce5ebd01462c |
未知 |
systemtype |
android |
系统类型 |
password |
******* |
密码 |
-
尝试将POST的Body表单删减,仅留下userid,发现状态码为200,查看响应,返回了个人信息,登录接口调用成功。
-
APP登录有自己的一套算法,想要登录APP,需要进行断点调试,右键单击login请求-断点,在软件上方启动断点,重新在模拟器中登录。
-
在Charles页面中弹出断点页面,将POST的Body部分中除userid部分都删除,单击执行,惊奇地发现APP登录上了,至此,实现了无需密码强制登录APP。
未来遐想
在调用login登录接口时,在一段时间内重发该请求,可以正常响应,超出时间就会返回请求参数错误,尝试将Header中的时间戳进行替换,问题依旧。Header有Timestamp、AuthoritySign、AccessTokenId,目前已知Timestamp是带毫秒的时间戳,AuthoritySign和AccessTokenId暂时不知作用,多次尝试逆向APP,想求得相关加密算法,奈何才疏学浅,未果。
还曾想过使用Frida Hook相关加密函数,也没有找到应该Hook的位置,草草结束了逆向,未来还是有很长的路要走啊。
|