记一次抓包实现校园APP无视密码强制登录
本帖最后由 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抓包相关配置。
1. 打开Charles软件,依次点击帮助-SSL代{过}{滤}理-安装Charles根证书,安装进受信任的根证书颁发机构。
2. 依次点击代{过}{滤}理-SSL设置,勾选启用SSL代{过}{滤}理设置,并在下面点击添加,主机:"*",端口:"443",点击确定添加。
3. 点击帮助-SSL代{过}{滤}理-保存Charles根证书,选择一个位置保存即可。
*为什么不选择为移动设备安装Charles证书? 简单尝试后发现模拟器无法下载Charles证书,故放弃。猜想因为自带浏览器问题。*
4. 打开导出文件夹可以看到导出的证书后缀为.pem格式的,Android系统证书后缀为.0格式,所以接下来对证书进行Hash计算。
5. 右键导出文件夹空白处打开终端, 输入指令开始校验Hash值。
```sh
openssl x509 -inform PEM -subject_hash_old -in Charles.pem
```
6. 使用上面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](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1478496&highlight=charles)
# 分析APP请求
1. Charles开始记录,打开APP,先输入错误的密码测试登录接口,发现一条Path为/api/user/login的POST请求,查看内容断定这条是登录API。
2. 分析Body表单
| Key | Value | note |
| ---------- | ------------------------------------------------------------ | -------- |
| userid | \*\*\*\*\*\*\*136 | 学号 |
| getuicid | ee6cafdbfc0af224b17fce5ebd01462c| 未知 |
| systemtype | android | 系统类型 |
| password | \*\*\*\*\*\*\* | 密码 |
3. 尝试将POST的Body表单删减,仅留下userid,发现状态码为200,查看响应,返回了个人信息,登录接口调用成功。
4. APP登录有自己的一套算法,想要登录APP,需要进行断点调试,右键单击login请求-断点,在软件上方启动断点,重新在模拟器中登录。
5. 在Charles页面中弹出断点页面,将POST的Body部分中除userid部分都删除,单击执行,惊奇地发现APP登录上了,至此,实现了无需密码强制登录APP。
# 未来遐想
在调用login登录接口时,在一段时间内重发该请求,可以正常响应,超出时间就会返回请求参数错误,尝试将Header中的时间戳进行替换,问题依旧。Header有Timestamp、AuthoritySign、AccessTokenId,目前已知Timestamp是带毫秒的时间戳,AuthoritySign和AccessTokenId暂时不知作用,多次尝试逆向APP,想求得相关加密算法,奈何才疏学浅,未果。
还曾想过使用Frida Hook相关加密函数,也没有找到应该Hook的位置,草草结束了逆向,未来还是有很长的路要走啊。 bgwu666 发表于 2023-6-25 16:29
感谢评分!
之前用过算法助手,不过勾选APP闪退,不知道您有什么好办法?
那再把防止应用闪退的功能勾选上 一般来讲生成的对应加密参数会保存在服务器端,由服务器端设置的过期时间来定,要直接显示里边的内容就是强制显示某一页让应用不在判断是否登录,但是相同情况在请求对应数据的时候也可能会因为没有权限导致异常,可能有一些会有refreshToken,这样可以每次使用这个东西来刷新登录token的时间 先算法助手hook一下,看看是不是常规加密,能省很多事 正己 发表于 2023-6-25 15:56
先算法助手hook一下,看看是不是常规加密,能省很多事
感谢评分!
之前用过算法助手,不过勾选APP闪退,不知道您有什么好办法? 也有可能session本身有时效 学习了.咋的了 这APP是学生自己做的吧{:1_926:} {:301_1009:}这有点离谱啊 本帖最后由 梦未回还 于 2023-6-26 02:04 编辑
我也想成为这样的大神