Android APP安全测试——客户端程序安全

释放双眼,带上耳机,听听看~!

0x01 数字签名检测

C:Program FilesJavajdk1.8.0_221binjarsigner.exe -verify APKPATH  -verbose
当输出结果为“Jar 已验证”时,表示签名正常。
检测签名的CN及其他字段是否正确标识客户端程序的来源和发布者身份。
注:只有直接使用客户的证书签名时,才认为安全。Debug证书、第三方(如开发方)证书等等都认为风险。

0x02 反编译检测

  1. 【Dex2jar + JD-GUI】打开apk文件
注:Dex2jar是将classes.dex文件转化成.jar文件,但是这直接使用dex2jar.bat将apk文件转成.jar文件
d2j-dex2jar.bat appName.apk
打开JD-GUI,把jar文件拖进去就可以得到JAVA代码。
  1. Android Killer打开APK文件,直接分析即可
  2. ApkAnalyser分析APK文件
ApkAnalyser是一个静态的虚拟分析工具,支持打印输出修改二进制应用程序,然后可以重新打包,安装,运行并验证logcat的结果。此外还支持资源分析、解析XML,查找资源并且检测应用程序潜在问题。
注:使用之在file-seting 中设置adb的位置
点击【ok】,然后点击【Analyser】
  1. 利用apktool工具对apk进行解包反编译成smali代码
解包命令格式为:apktool d[ecode] [OPTS]<file.apk> [<dir>]
apktool反编译后得到smali文件
apktool.jar d  E:xxxxx.apk
APK反编译后的文件

注:主要是通过Apktool得到未编译的xml文件,apk文件更改后缀为zip解压也可以得到,但xml为编译乱码,为二进制数据。

  • 若只修改smali代码不涉及资源文件的修改,可以在解包时加入 -r选项(也可以直接使用baksmali将dex反编译成smali代码),不解码apk中的资源,在打包时可以避免资源方面的问题(如aapt报各种error)
  • 如果只需要反编译资源文件,在解包时加入-s选项,不对classes.dex进行反编译。
  • 解包完成后,结果会生成在指定的输出路径中,其中smali文件夹下就是最终生成的Dalvik VM汇编代码,AndroidManifest.xml文件以及res目录下的资源文件已经解码。
  1. 处理odex文件
odex是android系统中对dex文件优化后的生成的文件。如果要使用上述反编译方法,需要将odex转换成dex

  1. 下载smali工具 ( https://github.com/JesusFreke/smali
  2. 将jar文件复制出来,然后所需虚拟机版本参考odex生成的环境
  3. 运行baksmali.jar,将odex解析成smali代码。-x选项是表示输入的是odex文件, -d选项子hiding上个步骤复制出来的jar文件路径。
  4. java -jar baksmali.jar -x -d filepath.odex,会自动创建一个out文件夹
  5. 运行smali.jar,生成dex
  6. java -jar smali.jar -x out -o dd.dex
  1. 反编译so库
apk解压缩,将libarmeabi目录下的so文件直接拖进IDA中,可以对so文件进行静态分析。可以看到so文件中包含的函数,ARM汇编代码,导入导出函数等信息。
so文件

0x03 应用完整性校验

测试客户端是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自身校验机制的话,攻击者可能会通过纂改客户端程序窃取手机用户的隐私信息。
用APKTool将目标APK文件解包,命令如下:
java -jar apktool.jar d -f apk apk_PATH -o 解包目标文件夹
任意去修改解包目录里的资源文件,推荐修改APP logo之类的图进行修改(容易确认结果)

用ApkTool,将解包目录重新打包成未签名的APK文件,命令如下:

java -jar apktool。jar b -f 待打包的文件夹 -o  输出APK_PATH
用SignApk,对未签名的APK文件进行签名,命令如下:
java -jar signapk.jar testkey.x509.pem testkey.pk8 待签名APK—PATH  签名后输出APK—PATH
将签名后的APK进行安装、运行、确认是否存在自校验;
注意:如果之前安装的APK和修改后的APK签名不同,就不能直接覆盖安装,解决办法,卸载之前安装的APP即可。
【注:APK必须进行签名后,方可安装和运行。】

0x04 DeBug调试

客户端软件 AndroidManifest.xml 中的 android:debuggable="true"标记如果开启,可被 Java 调试工具例如 jdb 进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑,我们经常使用 android.util.Log 来打印日志,软件发布后调试日志被其他开发 者看到,容易被反编译破解。 
  检查 AndroidManifest.xml 文件中的 debuggable 属性(MobSF) -- 检查是否能被调试 
【注:前面大概总结了五种查看AndroidManifest.xml文件的方法,但仍推荐使用MobSF】
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

0x05 应用程序可备份

Android 2.1以上的系统可为APP提供应用程序数据的备份和恢复功能,该由AndroidManifest.xml文件中的allowBackup属性值控制,其默认值为true.当该属性没有显示设置为false时,攻击者可通过adb backup和adb restore对App的应用数据进行备份和恢复,从而可能获取明文存储的用户敏感信息。
检查AndroidManifest.xml文件中allowBackup属性(MobSF) --检查是否显示的设置成false。

打开AndroidManifest.xml文件,检查应用AndroidManifest.xml文件中的配置是否为:android:allowbackup="true",即为AllowBackup开启,记录漏洞,停止测试。
【注:ADB命令】
adb backup    #备份数据
adb restore   #复原设备

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新消息 消息中心
有新私信 私信列表
搜索