Android APP逆向分析工具和方法汇总

news/2024/11/9 1:44:08/

一、概述

受益于移动设备的广泛普及,移动应用近年来得到了蓬勃发展。基于移动设备集成的各类传感器,众多功能丰富的移动应用被开发出来,聚集了大量高价值用户隐私数据,包括用户身份信息、地理位置信息、账户资料信息等。用户在享受移动应用带来便利的同时,其隐私安全也受到了重大威胁。在这样的背景下,移动应用隐私合规检测应运而生。同时在云游戏新业态新业务场景下,通常由于云游戏容器不具备移动设备那么丰富的传感器,但 同时又需要运行诸多的游戏应用,但很多移动应用基于移动设备开发,在云游戏容器下将使得某些功能不能正常工作或者运行行为怪异,因此和移动应用隐私合规检测如出一辙的逆向分析技术也显得尤为重要。虽然一个为攻一个为守,但两者使用的基础分析技术——移动应用隐私合规检测却是相同的。
本文简要介绍移动应用逆向分析工具和方法,帮助相关的同学进行移动应用隐私合规检测来分析云游戏或者移动应用的使用了那些系统API,从而帮助更好的解决现实场景下的问题。

二、现有技术

隐私合规检测(或者称为逆向分析方法),从技术形态上可以分为静态检测方案与动态检测方案。由于本文只会重点介绍一种技术,先对现有技术做一个简单的介绍,然后会详细的介绍一种方法或者工具的使用方法。

2.1 静态检测

静态检测方案通过对移动应用的安装包进行反编译,进而通过静态数据流、控制流分析等技术,检测移动应用中可能存在的隐私泄露问题。在该领域中,常用到以下工具:

Apktool [1]: 反编译安卓Apk,可以反编译资源,并在进行修改之后重新打包Apk

dex2jar [2]: 将Apk反编译成Java源码(classes.dex转化成jar文件)

Jadx[3] :JADX是一款优秀的Android反编译工具,支持命令行和图形化界面,能为我们省下大量的反编译时间

Soot [4]:Soot最初是Java优化框架,发展至今已广泛应用于分析优化和可视化Java和Android应用程序。

Flowdroid [5]: 基于IFDS算法实现的针对Android的静态污点分析框架
利用上述工具,开发者可以制定相应的规范检测项, 从而检测到应用中存在的隐私泄露隐患。本文不对相关的技术细节和使用方法进行详细介绍,感兴趣的同学可以自行找寻相关资料进行研究。

2.2 动态检测

动态检测方案通过运行待检测应用于真实手机或者模拟器沙箱,通过监控移动应用对系统内敏感资源的访问,结合移动应用的隐私政策声明分析,检测移动应用是否包含隐私违规行为。应用运行则可以由人工进行或者UI自动化。

2.2.1 敏感API调用行为监测

敏感API调用行为监测或者说运行时敏感行监测实时监控应用对用户隐私敏感数据的访问。在实现上分为两种:一种是直接在源码中添加监控代码。如在AOSP代码中的WifiManager的wifi是否使能API中直接添加代码,记录API访问行为。另一种则是通过hook方案,不直接修改源码,而是在系统运行APP时添加逻辑钩子,在APP调用特定敏感API时,先跳转至hook函数,最后再返回调用原敏感API。其中,hook函数负责记录应用的API访问行为(本文第三节中将详细介绍此类方法)。

2.2.2 UI自动化

移动应用自动化即通过程序控制移动应用UI交互。该领域典型的工具有: monkey [6],进行UI界面随机点击以及系统级事件。第三方UI自动化工具:uiautomator2 [7]和AndroidViewClient [8], 基于系统工具uiautomator实现,能够实现基本的自动化UI测试功能编程。

三、Camille工具

为了解决云游戏场景下,API调用的行为分析,有一个工具Camille较好的实现了逆向分析的功能。本小结想详细的介绍他的使用方法。
Camille工具git地址:https://github.com/zhengjim/camille
它依赖python、frida和frida-tools等工具。

3.1 Camille依赖环境安装和使用方法

步骤1、安装python3环境
可以参考python3安装参考菜鸟教程[9].
步骤2、安装frida、frida-tools
frida官网:https://frida.re
frida github地址:https://github.com/frida/frida
pip3 install frida-tools # CLI tools
pip3 install frida # Python bindings
npm install frida # Node.js bindings
步骤3、ROOT板卡
例如865板块可以使用adb命令来root
adb root
步骤4、安装frida-server

参看本机frida安装版本及CPU版本
frida --version
adb shell getprop ro.product.cpu.abi
本机电脑上frida安装的版本是:V15.2.2,CPU为:arm64-v8a

根据所安装frida版本下载对应的frida-server版本
frida-server下载地址:https://github.com/frida/frida/releases
本机安装的frida版本为:V15.2.2,CPU为:arm64-v8a,所以下载的frida-server版本为:frida-server-15.2.2-android-arm64.xz

将下载的frida-server文件push到手机目录
adb push 本地frida-server文件路径 /data/local/tmp/

通过命令进入安卓手机并切换root用户
adb shell
su

进入frida-server文件目录,同时更改frida-server文件的权限
cd /data/local/tmp/ chmod 755 文件名

运行frida-server
./frida-server-15.2.2-android-arm64
步骤5、运行camille工具检测APP
python3 camille.py APP包名

3.2 camille定制

一般情况下camille自带来许多的API hook,可以清楚的看到app调用了情况,如下表所示为自带的模块分析:
模块名
备注
permission
申请权限
phone
电话、基站
system
系统信息(AndroidId/标识/content敏感信息)
app
其他app信息
location
位置信息
network
getNetwork
camera
照相机
bluetooth
蓝牙
如果有需要,可以自行修改script.js增加、删除、改动相关的部分来定制化自己的场景要求,从而实现更多的逆向分析行为。
同时camille也支持将分析结果自动生成excel表格,可以使用下面命令来使能该方法。
python3 camille.py APP包名 -ns -f demo.xls

-ns:不显示日志。默认显示

-f: 保存app行为轨迹到到execl里。默认不保存。
更多的方法请参考文献[10].

四、参考文献和开源链接

[1] Apktool:https://ibotpeaches.github.io/Apktool/
[2] Dex2jar:https://github.com/pxb1988/dex2jar
[3] Jadx : https://github.com/skylot/jadx
[4] Soot:http://soot-oss.github.io/soot/
[5] Flowdroid: https://blogs.uni-paderborn.de/
[6] Monkey:https://developer.android.com/studio/test/monkey?hl=zh-cn
[7] uiautomator2:https://github.com/openatx/uiautomator2
[8] AndroidViewClient:https://github.com/dtmilano/And
[9] 《Python3 环境搭建》 https://www.runoob.com/python3/python3-install.html
[10] https://github.com/zhengjim/camille


http://www.ppmy.cn/news/713550.html

相关文章

Mac如何输入特殊符号

在Mac默认的英文输入法下 按住Option键或者ShiftOption键,再加其它键,可以快速的输入某些常用的特殊符号,例如•, , , ≠, ∑, Ω, ≈,,≤,等等,具体列表如下 原始按键’1234567890-Option ¡™£¢∞•–≠Option …

十一、Docker网络(Docker network)

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 一、什么是docker network1.1 介绍1.2 docker 启动后的网络情况1.3 能干什么? 二、Docker网络相关命令2.1 查看网络2.2 查看网络源数据2.3 创建网络2.4 删除网络…

发布/上传Jar包到Maven中央仓库

1.注册Sonatype账号 2.项目申请,创建工单 2.1回复 groupId 域名 可以使用github, io.github.账号 创建工单根据评论回复,需要创建临时仓库,验证账户所有权。 3.gpg4win 地址:https://www.gpg4win.org/download.html &…

计算1+3+5+...+99的和

function oddSum() { var he 0 //记值器 for (var i 1; i < 100; i) { if (i % 2 ! 0) { //2取余不等于0&#xff0c;就是奇数&#xff0c;就打印 he i //把奇数累加在记值器内 } } document.write(he) }

计算1+3+5+...+99 的和

public static void main(String[] args) { int sum 0; for (int i 1; i < 99; i 2) { sum i; } System.out.println("135...99 的和为&#xff1a;" sum); }

1-99求和

sum 0 count 1 while count < 100:sum sum countcount 1 print(sum) 转载于:https://www.cnblogs.com/puyitian/p/9349063.html

1/1+1/3+1/5+……+1/99的和

昨天笔试写了一个小程序。 public class A{ public static void main aa(String[] args){ double sun0; for (i1;i<100;ii2){ sumsum1/1 } system.out.println(“sum"sum) } }

计算1-1/2+1/3-1/4+……+1/99-1/100的值

#include <stdio.h> #include <stdlib.h> int main() { int i 0; double sum 0; //因为输出的结果是浮点数&#xff0c;所以要以double的形式输入 int flag 1; for (i 1; i < 100; i) { sum sum flag*1.0 / i; //这…