Android安卓-app之1篇and2篇

环境
SDK: Java JDK, Android SDK。
工具: 7zip, dex2jar, jd-gui, apktool, IDA pro(6.1), ApkAnalyser, Eclipse,
dexopt-wrapper,
010 editor, SQLite Studio, ApkIDE。
apk 工具: android 组件安全测试工具, activity 劫持测试工具, android 击键记录
测试工具,
代理工具(proxydroid), MemSpector, Host Editor
客户端安全测试
数字签名:
C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify APK 文 件 路 径-verbose –certs
当输出结果为“jar 已验证”时,表示签名正常
检测签名的 CN 及其他字段是否正确标识客户端程序的来源和发布者身份
是cn...说明测试结果为安全。
要说明的是,只有在使用直接客户的证书签名时,才认为安全。 Debug 证书、第三方(如开发方)证书等等均认为风险。
反编译
把 apk 当成 zip 并解压,得到 classes.dex 文件(有时可能不止一个 dex 文件,但文件名大多类似)
使用 dex2jar 执行如下命令:
dex2jar.bat classes.dex 文件路径
得到classes.dex.jar
然后使用 jd-gui 打开 jar 文件,即可得到 JAVA 代码。
注: 直接使用 smali2java 或者 APKAnalyser 打开 apk 文件,也可反编译回 Java 代码
【注:有时用 apktool 能够解包并查看 smali,但 dex2jar 却不行。如果 dex2jar 反编译失败,可以试试看能不能恢复 smali 代码。】逆向后发现是没混淆的情况,是不安全的。如果代码经过混淆,或者有加壳措施,不能完整恢复源代码的,都可以认为此项安全,混淆后的代码样例,除了覆写和接口以外的字段都是无意义的名称。
反编译为 smali 代码
使用 apktool 工具可以对 apk 进行解包。具体的解包命令格式为:apktool d 文件路径 .apk 文件路径 。
1.如果只需要修改 smali 代码,不涉及资源文件的修改,可以在解包时加入 -r 选项(也可以直接使用 baksmali 将 dex 反编译为 smali 代码,不解码 apk 中的资源。在打包时可以避免资源方面的问题(如 aapt 报的各种错误)。
2. 如果只需要反编译资源文件,可以在解包时加入-s 选项,不对 classes.dex 进行反编译。
3. 如果在 5.6.1 使用 apktool 打包 smali 代码中出现资源相关的错误,可能是需要较新的framework 文件。可参考此处,添加 framework 文件。例如,添加 Android 4.4.2 SDK 中的 framework 文件
解包时指定相应的 framework(可以对framework做标记)
解包完成后,会将结果生成在指定的输出路径中,其中,smali 文件夹下就是最终生成的Dalvik VM 汇编代码,AndroidManifest.xml 文件以及 res 目录下的资源文件也已被解码。
处理odex文件
odex 是 android 系统中对 dex 文件优化后生成的文件。如果要使用上述反编译方法,需要先将 odex 转换成 dex。
1. 下载 smali 工具(https://code.google.com/p/smali/)。
2. 将虚拟机中/system/framework/中的 jar 文件复制出来,放到一个文件夹中。所需的虚拟机版本可参考 odex 生成的环境(如 odex 是在 android 4.4 中生成的,就复制 4.4 虚拟机,如果在真机中生成,则可以复制真机的)。
3. 运行 baksmali.jar,将 odex 解析为 smali 代码。-x 选项表示输入是 odex 文件,-d 选项指定上个步骤中复制出来的 jar 文件路径,当命令成功执行后,在当前目录会创建一个 out 文件夹,里面就是 smali 代码。
eg:java -jar (路径)baksmall-jar -x -d (framework路径) “路径.odex”
4. 运行 smali.jar,可生成 dex。
java -jar (路径)small-jar -x “路径out” -o dd.dex
反编译so库
apk 解压缩后,将 lib\armeabi\目录下的 so 文件直接拖入 IDA 中,可以对 so 文件进行静态分析。可以看到 so 文件中包含的函数,ARM 汇编代码,导入导出函数等信息。
处理xml
apk 中的 xml 大部分是经过编译的,无法直接查看和修改。
如果需要查看 xml 文件,可以反编译为 smali 代码部分,使用 apktool 将整个 apk 解包。或者是使用 AXMLPrinter 或 APKParser 工具对要查看的 xml 进行解码。如果需要将修改后的 xml 重新打包到 apk 中,则可以参考第五篇,使用 apktool 打包。目前还没有发现可以单独编译一个 xml 文件的方法。对于已经解包的 apk,也可以直接使用 android SDK 中的 aapt 直接编译资源文件(包括 xml)。命令格式如下,apk-src 是 apk 的解包目录,output.zip 是输出的 zip 文件(编译好资源文件都会打包到里面),- I 选项指定相应版本的 android.jar。
“ANDROID-SDK\build-tools\20.0.0\aapt.exe" package -f -M
[apk-src\AndroidManifest.xml] -I
"ANDROID-SDK\platforms\android-19\android.jar" -S [apk-src\res] -F [output.zip]

注:上述 aapt 和 android.jar 的路径为安装 android SDK build-tools rev.20,android
4.4.2 SDK platform 后才存在。如果没有安装上述版本的组件,可将路径改为其他版本相
应的路径。(通常较新版本的 SDK 出错的可能性会小一些。)

完整性检验
测试客户端程序是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。
用 ApkTool 将目标 APK 文件解包,命令如下;
java -jar apktool.jar d -f apk 文件路径 -o 解包目标文件夹
随便找一个解包目录里的资源文件,修改之,推荐找到 logo 之类的图进行修改(因为容易确认结果);
用 ApkTool,将解包目录重新打包成未签名的 APK 文件,命令如下:
java -jar apktool.jar b -f 待打包的文件夹 -o 输出 apk 路径
用 SignApk,对未签名的 APK 文件进行签名,命令如下:
java -jar signapk.jar testkey.x509.pem testkey.pk8 待签名 apk 文件路径 签名后输出
apk 路径
将签了名的 APK 安装、运行、确认是否存在自校验;
需要注意的是,如果之前安装的 APK 和修改后的 APK 签名不同,就不能直接覆盖安装,一般来说,先卸载之前安装的 APP 即可。
【注: APK 必须进行签名后,方可安装和运行。如果开启了“允许未知来源的应
用”,那么 Debug 证书、自签名证书、过期证书的签名都是可以的,但是不可以不签名。】

将客户端程序文件反编译,修改源码或资源文件后重新打包安装运行
推荐修改 apk 中 assets 目录下或 res/raw 目录下的文件。将修改后的 apk 文件导到/data/app 目录下,覆盖原文件,然后重启客户端,观察客户端是否会提示被篡改
debug
客户端软件 AndroidManifest.xml 中的 android:debuggable="true"标记如果开启,可被Java 调试工具例如 jdb 进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑,我们经常使用 android.util.Log 来打印日志,软件发布后调试日志被其他开发者看到,容易被反编译破解。
检查 AndroidManifest.xml 文件中的 debuggable 属性(MobSF) -- 检查是否能被调试 https://github.com/MobSF/Mobile-Security-Framework-MobSF
应用程序数据可备份
Android 2.1 以上的系统可为 App 提供应用程序数据的备份和恢复功能,该由AndroidMainfest.xml 文件中的 allowBackup 属性值控制,其默认值为 true。当该属性没有显式设置为 false 时,攻击者可通过 adb backup 和 adb restore 对 App 的应用数据进行备份和恢复,从而可能获取明文存储的用户敏感信息。
检查 AndroidManifest.xml 文件中的 allowBackup 属性(MobSF) -- 检查是否显式
设置为 false
打开 AndroidManifest.xml 文件;检查应用 AndoridManifest.xml 文件中的配置是否为:
android:allowBackup="true",即为 allowBackup 开启,记录漏洞,停止测试
应用权限测试
应用权限分配不合理
1、使用反编译工具反反编译
2、打开源码后,检查应用 AndoridManifest.xml 文件,将应用权限和业务功能需要权限
做对比,检查申请应用权限是否大于业务需要权限,有即存在安全隐患。或者
python manitree.py -f AndroidManifest.xml

posted @ 2025-04-10 14:34  小yangzz  阅读(29)  评论(0)    收藏  举报