记录一次逆向搭载科大讯飞智屏系统的旧长虹智慧班牌并获取其密码

前言

由于学校环境限制,本文章部分所示内容为复现,并非真实环境截图。本文部分敏感内容已抹去。

思路

利用adb的远程调试,在内网中连接到班牌并获取到班牌管理系统的安装包,通过逆向安装包获得密码。

过程

连接校园网络

*已消除*

连接班牌

班牌设置界面如下:

image-20250112140057933

经测试,设备码处长按可弹出设备配置信息:

image-20250112140152859

根据IP地址的显示,在电脑上使用adb连接即可。

adb connect <IP地址>

弹出connected to xxx.xxx.xxx.xxx:5555即表示连接成功,如下图:

image-20250112140329744

获取班牌安装包

首先查询所有包

adb shell pm list packages

然后观察可能有班牌相关字样的包名,如下图红框标出:

image

然后查询安装包所在路径:

adb shell pm path com.iflytek.banpai

image-20250112141121656

拉取安装包:

adb pull /data/app/com.iflytek.banpai-1/base.apk

image-20250112141202692

安装包大约有100+MB,拉取需要一定时间。

反编译获取密码

获取到安装包之后反编译,根据输入错误密码时的错误提示,搜索“密码错误”

定位到如下处:

image-20250112142559278

可以看到,这里判断密码的关键方法是PasswordManagercheckPassword方法

checkPassword方法逻辑如下:

image-20250112142933338

首先获取了密码,随后判断获取的密码是否为空,如果为空则设置为程序中的一个默认密码。这里只有在管理后台没有设置密码,才会获取到空密码。

image-20250112143353198

默认密码为:*已消除*

最后的判断条件中,三个条件满足其一即可返回密码正确

  1. 是否处于开发状态(发布后写死为否)
  2. 输入内容与密码是否相同
  3. 输入内容是否与一个常量相同

这里可以从第三个条件下手,这个常量是写死在程序中的,内容如下:

image-20250112143153724

管理密码为:*已消除*

因此,不管管理后台设置何密码,该密码一直有效。

其他思路获取密码

注意到 意见反馈 的二维码长按会变化,观察反编译代码:

image-20250112152407639

可以看到这里将密码加密后生成了二维码:

image-20250112152424243

因此扫码得到加密后的密码文本。

复现

如下图所示:

image-20250112153247898

扫码后得到内容:52c8199afeb69707f58f95d39846a989

观察加密类:

image-20250112153551853

可知使用了DES加密,密钥为常量PW_DES_KEY

image-20250112153704193

getKey方法负责截断密钥前8位

利用CyberChef解密扫码所得文本

image-20250112153801423

得到密码。