漏洞描述:
测试客户端程序是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。
漏洞详情:
由于未对apk进行加壳,可以通过工具反编译出源码
使用apktool对apk进行反编译
java -jar .\apktool.jar d -f apk .\cargo.apk -o cargo
得到以下文件,这里可以篡改源码内容,并加一些恶意的代码进去,再将源码文件重新打包成apk文件,伪装成正常app传播使用。

这里以修改程序名来做示例
打开AndroidManifest.xml文件
找到定义程序名的位置,将cargo改为hack,保存退出

然后再使用apktool工具对程序进行编译
java -jar .\apktool.jar b -f .\cargo\ -o hack.apk
编译好之后,我们使用signapk工具对hack.apk进行签名
java8 -jar .\signapk.jar .\testkey.x509.pem .\testkey.pk8 .\hack.apk .\newhack.apk
这样我们就得到了一个篡改以后的newhack.apk了,放到模拟器进行安装,成功安装
打开运行,正常运行,篡改成功
修复建议:
在应用启动的时候进行签名的判断,首先写死一个签名,这签名是正式版本apk的签名(你可以通过在正式包上打log然后运行在手机上获得该签名然后写在application里)
在application的oncreate方法中:
if ("your sign".equals(getSignture((this)))) {//your sign 是你的签名,这里用这个取代下
initMTA();
} else {
System.exit(0);
}
评论 (0)