Frida的安装与使用

Frida介绍

Frida 是一款基于 Python + JavaScript的 Hook 与调试框架,可运行在Win、Mac、Linux、Android、iOS等平台

它是一款易用的跨平台Hook工具,主要被用作动态二进制插桩技术

Frida安装

1.安装Frida模块,命令为pip install frida

2.安装frida-tools模块,命令为pip install frida-tools

3.根据android cpu版本去下载相应frida-server,然后去下载https://github.com/frida/frida/releases相应的版本

我这里使用的是模拟器,选择frida-server-14.2.15-android-x86.xz

在这里插入图片描述

4.解压后将文件传输到模拟器中的/data/local/tmp目录下,设置可执行权限并运行

5.输入frida-ps -U命令后输出模拟器进程,说明frida安装成功

在这里插入图片描述

Frida Java层Hook

使用一个Crackme进行Hook

已经找到Crackme关键函数在calcSN中

在这里插入图片描述

运行apk程序,随意输入用户名和注册码会有toast弹框注册码错误

在这里插入图片描述

编写Hook脚本,脚本如下:

# -*- coding: utf-8 -*-
import frida, sys


jscode ="""
Java.perform(function () {
    var utils = Java.use('com.droider.sn.MainActivity');
    utils.calcSN.implementation = function (username) {
        var res = this.calcSN(username)
        console.log("Hook Start...");
		send(arguments[0]);
        send(res);
        return res;
    }
});
"""


def message(message, data):
    if message["type"] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)

process = frida.get_remote_device().attach('com.droider.sn')
script= process.create_script(jscode)
script.on("message", message)
script.load()
sys.stdin.read()

运行模拟器中的frida_server,设置端口转发

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

在这里插入图片描述

运行Hook代码,点击注册按钮,用户名和注册码被打印出来

在这里插入图片描述

Frida Native层Hook

编写demo

在这里插入图片描述
在这里插入图片描述

运行后效果如下图

在这里插入图片描述

点击按钮

在这里插入图片描述

显示3

开始使用Frida进行hook,前面用的模拟器做的java层hook,native层hook需要使用真机

首先查看真机版本,然后选择对应frida_server进行下载

下载好后,运行frida_server_arm,设置端口转发

开始编写hook代码

关键的是so模块名(libnative-lib.so)与函数名(Java_com_example_myapplication_MainActivity_add),通过ida查看函数名

在这里插入图片描述

hook代码如下

import frida
import sys

jscode = """
Java.perform(function(){
    Interceptor.attach(Module.findExportByName("libnative-lib.so","Java_com_example_myapplication_MainActivity_add"),{
        onEnter: function(args) {
            send("Hook start");
            send("args[2]=" + args[2]);
            send("args[3]=" + args[3]);
        },
        onLeave: function(retval){
            send("return:"+retval);
            retval.replace(17);
        }
    });
});
"""


def message(message, data):
    if message["type"] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)

process = frida.get_remote_device().attach('com.example.myapplication')
script= process.create_script(jscode)
script.on("message", message)
script.load()
sys.stdin.read()

运行代码

在这里插入图片描述

发现显示的为17,说明hook成功

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值