都5202年,有公司的app还在果奔!
说实话,很难想象,这都2025年了,有公司的APP一点儿安全措施都没做!我用十年前的AndroidKiller扒了个精光!
由于APP涉及到部分敏感信息就不过多放图了。
该APP打开就需要登录激活。我用AndroidKiller反编译后,用AndroidStudio打开smali,安装smalidea,该插件github上只有源码没有分发二进制,由于我不熟悉java,也懒得编译,就随便找了个0.0.6的安装了(0.0.5不支持2024.1.2的AndroidStudio),安装后就能正常调试smali代码了。
先是用Qoder大概分析了下流程,毕竟这个APP代码量还是比较大的,好几个dex,让它帮我找到登录相关代码。
然后是用AndroidStudio动态调试。说实话,网上的教程真的不太负责,而且很多都过时了。AndroidStudio动态调试Smali不需要ROOT手机!。
该APP大概流程是这样的:
- 启动APP,进入登录页面
- 向服务器发送请求,校验用户及密码(应该是需要购买登记),这里的密码用RSA加密算法加密了,没有明文传输,防止被抓包。
- 服务器校验后返回一系列的内容,具体内容就不说了。
- APP对服务器返回的内容进行检查,没问题就进去APP,有问题就给出提示,在这过程中会在本地(手机上)用数据记录或更新许可信息。
感觉过程没太大问题,不过我不是做这块的,不好评判流程有没有问题。
用adb启动:
adb shell am start -D -n package/package.MainActivity
package需换成具体包名。
说实话,很久没碰这块,确实不太熟了,但是基本能看懂。在AndroidStudio中,在登陆关键地方打断点了,想看下怎么进APP主界面,然后查看怎么处理服务器返回的结果,结果一看,吓了一跳:
服务器返回的最终结果
是一个名为 ClientInfo的类:
//其他内容
result = "账号密码不匹配"
//其他内容
然后检测代码是判断result是否为"ok",如果为"ok"则更新许可信息并进入app,这也太简单了吧,直接把smali代码中ClientInfo构造函数的result改为"ok"。

编译,重装,运行,结果就是进去了。。。
结果app里啥也没有。。。
卸载,删除数据代码,打完收工,毫无营养!
总结
说实话,真的很难想象,这都什么年代了,做APP啥防护都不做, 不说加壳加固,至少做个混淆吧。要么是老板完全不懂技术,要么是被忽悠了,要么是技术人员技术真不过关! 我甚至都在想该公司代码是否有版本控制了😂。
想当初我读大学那会儿不知道有版本控制这个东西,改一版代码后就用1,2这样的数字表示版本,用个记事本大概记录下改了哪些。