1. 大纲
APK 解包与逆向
客户端程序安全
敏感信息安全
部分测试会用到 jdk Eclipse+ADT+Android SDK 这开发平台弄会比较麻烦 可能会放到后面讲
如果你只是想快速测试某 APP 不妨用阿里云 MQC 以及网易易盾
特别需要说的 :建议移动安全适合专人来做,因为需要专门的电脑环境配置也比较麻烦。
2. 需要的环境以及工具
SDK:Java JDK,Android SDK。
apk 工具:android 组件安全测试工具,activity 劫持测试工具,android 击键记录测试工具,
代理工具(proxydroid),MemSpector,Host Editor。
工具:7zip,dex2jar,jd-gui,apktool,IDA pro,ApkAnalyser,Eclipse,dexopt-wrapper,010 editor,SQLite Studio,ApkIDE。
3.apk 解包与逆向
APK 解包和逆向是所有 APP 安全分析的开始。当然我这里说的比较浅显。
一般 APK 用压缩包软件即可打开解压 我这里使用的 7zip 好处无广告无捆绑速度还行,这里随便找的一个游戏 APP 具体就不透露了
工具 dex2jar jd-gui
3.1 下载与使用 dex2jar
下载地址:https://sourceforge.net/projects/dex2jar/
使用:
解压之后输入 d2j-dex2jar.bat 文件名 一般为 classes.dex (见上图) APK 解压放到了桌面 test 文件夹中
会在 dex2jar 目录生成一个这个文件
那么如何查看该 jar 文件的内容呢?此时就需要安装 jd-gui。
3.2 下载与使用 jd-gui
下载地址: http://jd.benow.ca/
使用没什么好说 windows 就一个 exe 打开之后就这样 下图中打开 classes.dex2jar-jar 代码是经过混淆处理的 最明显就是其中有 a.b.c.d 这样的内容。
如果没有混淆处理这里应该明文,混淆处理是一种防止逆向的手段,混淆处理后虽然也有逆向分析手段但是这里不具体分析了。
没有混淆处理基本说明 apk 发开人员安全意识不够。
3.3 反编译 so 库
工具 IDA PRO 大名鼎鼎的工具 – – 下载地址应该不需要了
APK 解压之后在 lib/armeabi 有个.so 文件 用 IDA pro 打开 可以看到 so 文件中包含的函数,ARM 汇编代码,导入导出函数等信息
4. 客户端程序安全
4.1 安装包签名
检测客户端是否经过恰当签名(正常情况下应用都应该是签名的,否则无法安装),签名是否符合规范。
工具 jarsigner
jarsigner 这个是命令行执行工具 只要安装了 jdk 会在 jdk 中的 bin 目录里 用来执行(具体 JDK 安装要配置环境变量不赘述)
C:\Program Files\Java\jdk1.8.0_121\bin>jarsigner.exe
用法: jarsigner [选项] jar-file 别名
jarsigner -verify [选项] jar-file [别名…]
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 私有密钥的口令 (如果不同)
[-certchain <文件>] 替代证书链文件的名称
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose[:suboptions]] 签名/验证时输出详细信息。
子选项可以是 all, grouped 或 summary
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳颁发机构的位置
[-tsacert <别名>] 时间戳颁发机构的公共密钥证书
[-tsapolicyid <oid>] 时间戳颁发机构的 TSAPolicyID
[-tsadigestalg <算法>] 时间戳请求中的摘要数据的算法
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库具有受保护验证路径
[-providerName <名称>] 提供方名称
[-providerClass <类> 加密服务提供方的名称
[-providerArg <参数>]]… 主类文件和构造器参数
[-strict] 将警告视为错误
警告
第一条 是因为签名密钥不在本地密钥库中
第二条 没有时间戳
再执行命令
jarsigner.exe -verify -verbose -certs C:\Users\Administrator\Desktop\test.apk
显示内容比较多看部分就可以 红框部分有地点:成都 名称为 darknights
若客户端安装包签名有异常(例如签名证书为第三方开发商而不是客户端发布方),此时高风险;若无异常则无风险。
4.2 客户端程序保护
反编译 使用 apktool
章节 3 基本讲的反编译内容。这里在补充一个 apktool 反编译为 smali 代码
工具 apktool
根据实际情况选择
我这里只下载 jar 放到 windows 目录
然后会生成一个 跟 apk 同名的文件夹 下面会有一个 smali 的文件夹
因为这个应用在之前做了混淆 现在看 在 alipay(支付宝接口) 关键部分也是做了混淆
判定:此时应用为低风险
大部分代码(包括核心代码)经过混淆,此时低风险。
部分代码混淆,关键代码(加密或通信等)可以获知其关键代码,此时中风险
客户端全部进行加壳保护,此时认为无风险。
5. 敏感信息安全
5.1 数据文件
主要的是在安卓环境中测试,安装解包后的文件是否权限合理,这里需要用到 Eclipse+ADT+Android SDK 但是作为简单简介可以用任意一个安卓模拟器来做
这里我使用的是逍遥模拟器(安卓)新装的一个 ES 文件浏览器 最左边是测试的 APP
ES 文件浏览器 的好处
1:安卓处于保护自己的目的,一般系统自带文件管理是看不到所有文件的。
2:有些文件修改需要 ROOT 权限 es 文件浏览器有 ROOT 工具
打开 ES 文件浏览器点击应用 可以看到这样应用 package Name 可以根据这个关键字去目录里搜索
ROOT 工具箱打开不然你看不到隐藏的文件
根据关键字搜索找到文件
基本权限跟 LINUX 表示方法是一样 关键要观察这个应用所在目录下的所有文件权限(除 LIB 目录下外)
判断:
正常的文件权限最后三位应为空(类似「rw-rw—-」),即除应用自己以外任何人无法读写;
目录则允许多一个执行位(类似「rwxrwx—x」)。如果文件任何人可写就存在安全问题。
如下图(开头字母是 D 的目录) 安卓也有命令行具体调用这里不多说了 因为模拟器我搞半天没调用出来
特别说明的:
当客户端使用 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 模式创建文件时,shared_prefs 目录下文件的权限也会多出一些,这不一定是安全问题(Google 已不推荐使用这些模式)
先到这里吧 估计要写拆成三个文章来写。
来源:freebuf.com 2019-03-08 15:12:02 by: redhatd
请登录后发表评论
注册