最近发现了打车软件。APK非常火,听说他们做了非常严格的保护,防止用户二次打包。今天我们来分析一下他的安全性。
经过严密的分析发现:该打车APP主要保护在两个地方
***一是登录过程中通过传输context对象到so拿到库中的方法apk签名信息md5上传签名信息。
第二:在主界面中,每次onResume在中间,调用私有类进行验证。如果验证失败,则弹出“卸载软件后请使用~”提示。强迫点击确定的退出方式app。
先说吧***个人验证:自用so相应的比例作为获取签名信息的地方java以安全的方式获取签名信息。so获得签名信息必须传递给底层context对象。所以保护弱点也主要在这方面。context对象的传递。
在com.sdu.didi.net包的c方法中
里面的SecurityLib.getUUID(this.b)便是调用so库的getUUID并传递方法context。
其中UUID是在so图书馆通过签名信息转换,this.b是application的getContext。
那么我们在application中添加重写getPackageManager方法,修改返回值。返回我们自己写的PackageManager。如下
修改其中的getPackageInfo方法,返回我们自己的方法,返回我们自己的方法packageInfo对象。
ChangesSignture方法如下:其中Signature值为司机正版签名信息MD5值。
通过上述修改和测试。登录过程的验证没有效果。
让我们谈谈第二次验证:
在com.sdu.didi.gui.main包下的MainActivity中
其中checkCheatTool();将进行如果是盗版,会弹出提示:“卸载软件后请使用”,这种保护更不安全。我们只需要注释或删除此行代码。这种验证没有效果。
笔者***想说:
加密技术也是一个需要深入研究的项目。如果你感兴趣,你可以看看其他人使用的加密方法,或者研究一些专门提供加密服务的第三方平台。当然,如果你懒惰,你可以直接使用它。