之前经常出差,公司要求用水印相机拍照打卡,为了考勤的便利,我便从某宝上购得某相机的APP,购买后商家会发给你一个APP和注册码,输入注册码才能使用APP,而且注册码是有时效性的,失效后得再次购买。
出于研究学习的目的,便有了以下文章。
APP分析过程如下
1.打开APP,发现需要输入注册码后,方可使用。

2.什么都不管,先抓个包。从下图可以看出c2的值就是我输入的内容。(心中窃喜,竟然连最基本的加密都没有,应该很好搞)


3.用jadx查看源码,分析这个弹出框的代码逻辑。
结合代码与数据包可以知道,trim是从文本框获取的值,而c2等于trim.
if (post.indexOf("<|>1") == -1)语句用于验证用户 ,如果Respone中含有字符串<|>1,则为真弹出返回的信息,为假就”激活成功”。

4.手动看看这个函数的调用栈,从图中可以看出弹框的执行流程为
OnResume()->startshow()->Verification()->popup().



弹框解决方案
删除startShow()。在dex文件中找到该函数的调用语句,并删除。
方案实现过程如下
1.用MT管理器打开Dex文件,找到红框中的语句删除掉,在重打包APK。

2.最终效果(黑屏是因为这是模拟器,模拟器没有摄像头)
总结
这个APP比较简单,没有做如何防护措施,可以轻易破解。
为了防破解,可以实现签名校验在JAVA或So中,当检测到被篡改就关闭程序,这样能有效的提高APP的安全性,保护开发者的利益。
还应对网络请求中的Request&Respone的Body使用对称加密算法后在进行传输,而不是直接明文传输。
仅提供技术交流,不对任何成员利用技术文章或者检测工具造成任何理论上的或实际上的损失承担责任。
更多【某相机APP分析】相关视频教程:www.yxfzedu.com