记录一次逆向搭载科大讯飞智屏系统的旧长虹智慧班牌并获取其密码
前言
由于学校环境限制,本文章部分所示内容为复现,并非真实环境截图。本文部分敏感内容已抹去。
思路
利用adb的远程调试,在内网中连接到班牌并获取到班牌管理系统的安装包,通过逆向安装包获得密码。
过程
连接校园网络
*已消除*
连接班牌
班牌设置界面如下:
经测试,设备码处长按可弹出设备配置信息:
根据IP地址的显示,在电脑上使用adb连接即可。
adb connect <IP地址>
弹出connected to xxx.xxx.xxx.xxx:5555
即表示连接成功,如下图:
获取班牌安装包
首先查询所有包
adb shell pm list packages
然后观察可能有班牌相关字样的包名,如下图红框标出:
然后查询安装包所在路径:
adb shell pm path com.iflytek.banpai
拉取安装包:
adb pull /data/app/com.iflytek.banpai-1/base.apk
安装包大约有100+MB,拉取需要一定时间。
反编译获取密码
获取到安装包之后反编译,根据输入错误密码时的错误提示,搜索“密码错误”
定位到如下处:
可以看到,这里判断密码的关键方法是PasswordManager
的checkPassword
方法
checkPassword
方法逻辑如下:
首先获取了密码,随后判断获取的密码是否为空,如果为空则设置为程序中的一个默认密码。这里只有在管理后台没有设置密码,才会获取到空密码。
默认密码为:*已消除*
最后的判断条件中,三个条件满足其一即可返回密码正确
- 是否处于开发状态(发布后写死为否)
- 输入内容与密码是否相同
- 输入内容是否与一个常量相同
这里可以从第三个条件下手,这个常量是写死在程序中的,内容如下:
管理密码为:*已消除*
因此,不管管理后台设置何密码,该密码一直有效。
其他思路获取密码
注意到 意见反馈 的二维码长按会变化,观察反编译代码:
可以看到这里将密码加密后生成了二维码:
因此扫码得到加密后的密码文本。
复现
如下图所示:
扫码后得到内容:52c8199afeb69707f58f95d39846a989
观察加密类:
可知使用了DES加密,密钥为常量PW_DES_KEY
getKey
方法负责截断密钥前8位
利用CyberChef解密扫码所得文本
得到密码。