反编译
测试客户端安装程序,判断是否能反编译为源代码,java 代码和 so 文件是否存在代码混淆等保护措施。未作保护的 java 代码,可以轻易分析其运行逻辑,并针对代码中的缺陷对客户端或服务器端进行攻击。
工具:
Android Killer
下载地址:https://www.jianshu.com/p/61a93a6c0c1b
jadx
下载地址:https://github.com/skylot/jadx
jadx是图形化工具直接打开apk文件即可
经过混淆保护的代码,其最明显的特征是大部分类和变量名都被替换为简单的 abcd 字母。
客户端程序可以把关键代码以 JNI 方式放在 so 库里。so 库中是经过编译的 arm 汇编代码,可以对其进行加壳保护,以防止逆向分析。参考 5.1apk 解包,打开 apk 文件。如果客户端程序使用了 JNI 技术,在“lib\armeabi\”文件夹下会有相应的 so 库文件,如图所示:
安装包签名
使用JDK中/jre/bin
目录中的jarsigner
和keytool
jarsigner
如图,当输出结果为“jar 已验证”时,表示签名正常。
jarsigner.exe -verify -verbose .\test.apk
keytool
有apk的情况,查看证书信息,将apk文件复制一份,然后重命名为zip,将zip文件解压,拿到\META-INF\CERT.RSA
文件
keytool -printcert -file CERT.RSA
有keystore的情况,查看证书信息
keytool -list -v -keystore xxx.keystore
自己给apk签名
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
# 说明:-genkey 产生密钥
# -alias demo.keystore 别名 demo.keystore
# -keyalg RSA 使用RSA算法对签名加密
# -validity 40000 有效期限4000天
# -keystore demo.keystore
jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
# 说明:-verbose 输出签名的详细信息
# -keystore demo.keystore 密钥库位置
# -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.
完整性检验
测试方法:
反汇编Apk(参考反编译保护测试项)
修改资源或代码文件
重打包签名安装(正常运行则说明有问题)
修复方法
代码中对代码文件(classes.dex)做完整性校验
代码中对Apk包做完整性校验
代码中对签名文件(META-INF/MANIFEST.MF)中classes.dex哈希值的校验
组件导出安全
什么是组件导出安全
别的app也可以访问该app
危害
因为权限声明是以组件为单位的,A组件调用B组件的功能来访问操作系统API时,适用于B组件的权限声明。
如果B作为导出组件,没有进行严格的访问控制,那么A就可以通过调用B来访问原本没有声明权限的功能,构成本地权限提升。
敏感信息泄露
查看应用程序所在目录(需root权限)
—般为:/data/data/{APP包名)/
如遇.db文件,多为SQLite数据库。
用logcat查看app日志
发布app前,应该去掉日志
# 实时查看
logcat
# 一次性输出
logcat -d
# 清空日志
logcat -c
# 输出到文件
adb shell logcat -d > xxx.txt
配置不当
AllowBackup属性为true
Debuggable属性为true
在线网站
摸瓜:https://mogua.co
自动分析app