Frida 使用指导

本文介绍了Frida框架,用于动态hook,无需源码即可查看函数行为。适用于逆向工程、安全分析和调试。文章涵盖Frida的安装、用法,包括hook函数、构造参数对象、安全编码建议,以防止被hook,并提供了相关API和资源链接。
摘要由CSDN通过智能技术生成

1. Frida概况

  • frida 是一个 hook 框架
    • 可以在不改动目标源码的情况下,动态查看函数运行入参,返回值,注入代码,更程序逻辑。
    • 黑客可以用hook框架做逆向,分析和利用应用漏洞,进行非法操作。
    • 开发者可以hook自己的应用进程,查看API接口入参,返回值。如果应用出现问题可以通过此方法打印信息,不需要额外增加日志,简单方便。
    • hook代码使用 js 脚本实现,借助 python 执行(也可以使用C, Node.js, Swift, .NET等等)。
  • 覆盖平台:Android, iOS, Windows, Linux, OSX
  • 覆盖语言: c/c++, Java, Object-C
  • 优势
    • 覆盖平台广;
    • 采用google v8 engine,较为稳定(Android 需要使用Google原生系统);
    • 更新hook代码,不需要重启系统(安卓常用的xposed框架,iOS常用的Cydiasbustrate, hook插件更新,需要重启系统);
    • 对于手机应用 hook,即使不 root(jailbreak),也提供了方案,其他常用的如 xposed(Android)和Cydia substrate(iOS,Android)是不行的。

2. 安装 & 环境配置

分为pc端的环境和移动端的frida-server进程(如果是用于手机端的hook)。

  • PC端

install Python 3.x
pip install frida
pip install frida-tools

安装测试, 命令行执行 frida-ps,输出系统运行的所有进程及pid

  • 移动端
    • Android
      先root, 再配置 frida-server (下载并push到/data/tmp/local, 以root权限执行, 下载地址 https://github.com/frida/frida/releases)
    • iOS
      先 jailbreak,再从cydia下载frida插件。
    • 如果没法root或越狱,可简单的修改应用,在应用初始化时,主动加载frida组件,相当于进程内部hook。详见:https://frida.re/docs/gadget/ (强烈建议设备root或越狱)

安装测试, 命令行执行 frida-ps -U,输出系统运行的所有进程及pid

3. frida 具体用法

hook最终使用 js 脚本,而脚本是通过外部环境和frida-core交互,这里使用python作为外部环境。

(a) hook脚本模板(python代码)
########################### main.py ###########################
import frida, sys, os
import traceback

def on_message(message, data):
    if message['type'] == 'send':
        print(message['payload'])

def hook(proc_name, target_js):
    print('proc name ='+proc_name)
    with open(target_js) as fin:
        script_source = fin.read()

    process = frida.get_usb_device().attach(proc_name)
    script = process.create_script(script_source)
    script.on('message', on_message)
    script.load()

    try:
        while True:
            if sys.stdin.read().strip() == 'stop':
                print('Get stop signial, and going to clean frida.')
                script.unload()
                process.detach()
                break
    except Exception:
        script.unload()
        process.detach()
        traceback.print_exc()


if __name__ == "__main__":
    js_dir = os.path.dirname(os.path.realpath(__file__))
    # 将 js 放入单独的文件,便于写代码,检查js语法,此外还可模块化管理脚本
    target_js = os.path.join(js_dir, 'scripts', 'libc.js')
    hook("processname",  target_js)
    
    
########################### scripts/libc.js ###########################
try {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值