【移动安全高级篇】————11、Frida篇

0X01 Frida框架安装详解

1.简述:
Frida是以Python为载体,注入Javascript作为Android中执行代码的一款Hook框架,可用Android、ios、linux、win等平台。

2.安装客户端:
在已有python和pip环境的系统下安装frida,如windows则使用pip install frida-tools命令安装frida包。

使用frida命令查看版本(成功查看到frida版本表示安装成功)。

2. 安装服务端:

首先到github上下载frida-server,网址为https://github.com/frida/frida/releases
下载与客户端相同版相同的frida-server(注意位数)。
在客户端(windows)上使用adb push命令将frida-servser传到Android设备目录中。

修改frida-servser权限,让frida-servse拥有可执行权限。

运行frida服务器。

在客户端开启端口转发。

adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

使用frida-ps -U或者frida-ps -R命令查看手机端进程(成功查看到进程表示Frida环境搭建成功)。

0X02 Frida框架的初步使用

将frida服务器运行起来后,客户端就可以利用frida API对Android设备中的进程以及APP应用进行操作。

例一:

使用Frida获取android手机当前最前端Activity所在的进程。

例二:

查看手机所有已安装的android APP应用。

例三:

frida自带的Messages机制与进程交互模板。

0X03 Frida框架解题技巧

Frida可以用来解决CTF中移动安全题,如Frida官网的一个APP例子,就是一道CTF题。以如下的CTF题为例,通过解题过程深入了解Frida的使用。

1. 题目描述:

寻一名可以拿到20000分的高手,在线等很急!

2. 寻找hook点:

MainActivity部分代码如下:
静态分析得到getScore()方法是记录分数的关键。

public final void invoke(@NotNull Score arg6) {
   Intrinsics.checkParameterIsNotNull(arg6, "$receiver");
   if(arg6.getScore() > 20000) {
       Game.access$getView$p(Game.this).setScore(0xFFFFFFFF);
   }
   else {
       Game.access$getView$p(Game.this).setScore(arg6.getScore());
   }

   if(Game.access$getView$p(Game.this).getLevel() < arg6.getLevel() && Game.access$getView$p(Game.this).getLevel() != 0 && (Game.this.getSoundEnabled())) {
       DefaultImpls.play$default(Game.access$getSoundtrack$p(Game.this), Sound.LEVEL_UP, 0, 2, null);
   }

   Game.access$getView$p(Game.this).setLevel(arg6.getLevel());
}

Hook点:setScore方法值置为-1,程序将就会自动为我们解密flag。

3. 解题过程:
静态分析完应用逻辑后可知只要将 MainActivity 中的 setScore方法参数值设为-1,程序就会自动为我们解密flag,所以可以通过Frida框架重写setScore方法将值直接设为-1。

用frida-ps -R发现应用进程。

Javascript脚本如下:

运行服务器frida-server,客户端使用Frida运行以下命令:

点击游戏开始,程序会解密并弹窗。

完整的python代码如下:

 

### 安装和配置 Frida Server #### 在 Android 设备上的安装与配置 对于希望简化操作流程的情况,在安卓设备上可以考虑将 `frida-server` 和 `frida-inject` 集成至系统内部,从而允许通过专门的应用来管理 `frida-server` 的启停及端口设置[^1]。另一种更为常见的做法涉及手动部署: - **获取适合版本的 `frida-server`**:访问官方资源页面下载对应架构(ARM, ARM64 等)和服务端版本的二进制文件。 - **传输并放置于目标位置**:利用ADB工具或其他方式上传所获得的服务端程序到Android终端,并赋予其执行权限。 - **启动服务**:借助adb shell 或者直接在设备终端输入命令以激活该服务,通常情况下会指定监听特定IP地址与端口号以便后续连接[^2]。 针对更深入定制需求,则可以在构建自定义ROM时预先嵌入必要的组件,比如修改build.prop 文件或是在产品包列表里增加相应的条目,像下面的例子所示那样处理[^3]。 ```bash PRODUCT_PACKAGES += \ myfridaserverarm64 \ ... ``` #### Windows/Linux/macOS 上的准备 尽管上述讨论集中在移动平台上,但在桌面环境中同样需要做好准备工作才能顺利操控远程的目标进程。这主要涉及到Python环境下的库安装过程: - 使用pip工具快速完成依赖项引入工作,确保本地计算机能够同远端保持良好交互。 ```shell pip install frida-tools ``` 以上步骤完成后即可着手编写用于控制目的应用程序行为的具体逻辑——即所谓的挂钩(hooking)代码;这部分一般采用JavaScript书写形式,作为参数传递给CLI客户端或是嵌入到图形界面解决方案当中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值