Frida的安装与使用

  • Post author:
  • Post category:其他




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成功

在这里插入图片描述



版权声明:本文为weixin_44001905原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。