Android 静态分析实验记录——软件安全(一)

一、实验目的

·学习逆向分析技术,了解 Android 平台静态分析和动态分析原理;

·通过 Android 平台逆向分析实战,加深对 AndroidKiller、GDA 等工具使用方法的了解;

·理解 Android 静态分析破解概念;

·掌握 Android 平台基础知识如:系统架构、组件、Binder 机制、Intend 机制、smali 语法等。

二、实验内容

实验:利用 Android 静态分析工具分析 AddNumber.apk 文件,并找到 flag。

三、实验设备

本电脑操作系统:Win10

Android 模拟器:夜神模拟器

JDK 版本:本机安装有 jdk-1.8.0 及 jdk-14,须修改环境变量配置路径为前者

分析工具:AndroidKiller_v1.3、GDA3.68(两者均为 APK 综合分析工具、集成了了解包、

反编译、重打包等功能)

四、实验步骤

实验:利用 Android 静态分析工具分析 AddNumber.apk 文件,并找到 flag。

打开 Android 模拟器并尝试安装初始版本 APK,报错 1007:安装应用程序失败。

可能是因为这个 APK 文件有损坏、缺少签名、打包方式有问题等、或者此应用/游戏厂商出安装包的时候没对模拟器做兼容。

                          图 1 初始 APK 安装失败

打开 AndroidKiller 并加载 AddNumber.apk,对源码进行提取和反编译:

                           图 2 成功提取源码并反编译

直接尝试重新编译 apk 文件,提示 APK 编译失败,无法继续下一步签名:

                            图 3 原始 APK 编译失败

使用 GDA 工具查看一下该 APK,加载后如下所示:

                                                         图 4 GDA 加载原始 APK 文件

(  附加说明:主界面以不同颜色展示了 Dex 头,右边栏自上而下依次含义为:1.查看所有字符

串;2.查看所有使用过的字符串;3 查看所有 API;4.查看 AndroidManifest 文件;5.十六进制浏览

数据;6.可疑(恶意行为分析);7.类及方法,如果出现多个 DexClass 表示 apk 采用 mulitdex 技术:

点击选项栏中的查看签名按钮,查看该 APK 的签名信息,发现内容为空,所以该 APK 无法成功安装在模拟器上以及无法重新编译的原因应该是未签名:

                   图 5 利用 GDA 查看原始 APK 的签名

使用 AndroidKiller 对原文件进行签名,这里的签名方式有 Default 和 AndroidKiller,我两种都进行了尝试,发现只有后者能成功:

                                               图 6 AndroidKiller 对原始 APK 签名

再次用 GDA 查看被签名后新生成的文件,查看该 APK 的签名信息,出现如下内容:

                                                   图 7 利用 GDA 查看签名后的新 APK

在 Android 模拟器中安装签名后新生成的 APK 文件,成功安装。同时我们可以发现,初始环节是一个数字累加的关卡,显然手动点击通关不现实:

                                                  图 8 成功安装 APK 后程序的首界面

使用 AndroidKiller 查看 smali 文件夹下的文件,并 Java 反编译,找到 MainActivity.class文件,了解主要功能。

                                                  图 9 利用 AndroidKiller 查看 MainActivity.class

查看点击监听函数部分的内容,可知每点一次按钮,mynumber 加一,而当当前数目大于某一数值的情况下,跳出循环,使用显示 Intent(意图,描述的是应用的动作及其对应的数据;起到通信载体作用)的方式启动 succcess.class;

                                                                  图 10 查看监听函数内容

参考模拟器中 APK 的内容可知,设置的数比较大,人工点击效率过低,因而我们首先应该跳出点击按钮的循环。通过在对应 smali 文件中查找条件判断语句,定位跳出循环的判断,进而修改判断逻辑,使得能够在点击一次后跳出循环。

                                                       图 11 smali 文件定位判断语句

(if-eq等于(equal);-ne不等于(no equal);-gt大于(greater than);-ge大于等于;-lt小于(less than);-le小于等于)

修改后点击编译,编译成功后在 Android 模拟器上安装新编译好的 apk 文件,得到提示:

                                          图 12 跳出循环后的提示界面

尝试回退到上一页面,得到 True Flag:0218d33b334a0a15260d149db58a6e50:

                                                      图 13  得到flag

可以查看一下 success.class 对应的操作逻辑,能与我们获取 flag 的操作对应起来。跳出循环后,程序首先执行 onCreate 函数跳转到新页面,只有在用户点击返回上一页面后才会出现 flag:

                                      图 14 success.class 对应操作逻辑分析

五、注意事项
 

1、重编译前注意查看 APK 版本与本机 JDK 是否一致,如果不一致可能是无法编译的;

2、安卓静态分析破解的大致思路大致如下:

·安装 apk 后进行使用和观察;

·使用工具反编译 apk,了解主程序大概逻辑,查看关键词含义,并定位对应 smali 文件;

·在对应 smali 文件找逻辑判断语句及跳转等关键内容,分析代码后手动修改逻辑,从而控制我们想要执行的语句;

·完成后保存,再编译,运行破解后的 app 应用,查看是否成功。

3、对抗 Android 静态分析方法:

·使用代码混淆技术,例如 google 提供了 ProGuard 代码混淆工具,开发人员可以对自己的代码进行混淆;

·加壳,目前市面上常见的有爱加密,360 的壳;

·调试检测,如安卓调试检测函数、IDA 调试端口检测等。

发布了2 篇原创文章 · 获赞 0 · 访问量 549

猜你喜欢

转载自blog.csdn.net/weixin_42056969/article/details/105541259