美文网首页
hook 工具 frida 的使用

hook 工具 frida 的使用

作者: that_is_this | 来源:发表于2018-07-04 20:54 被阅读237次

    1. 环境搭建

    在 windows 下安装 frida

    frida 是对应 python 内的文件,是将文件安装在 python 对应的目录中

    C:\Users\Administrator\Desktop>pip install frida
    

    执行上个命令首先需要安装 pip 工具。对应的地址 : Windows 安装 pip

    在 pip 安装过程中可能处理的比较慢,但第一行会看到下载文件对应的 url , 示例如下:

    https://files.pythonhosted.org/packages/dd/11/6cb0ccf6d1dbc75c1957f27a09830769b4b6320c7605348cfbf761efdb30/frida-11.0.13.tar.gz
    
    https://files.pythonhosted.org/packages/87/80/e6118e8641398cb6bfa7238b4cc9137db1efe1cbe2a6c83ea4db5c26fd9f/frida-11.0.13-py2.7-win-amd64.egg
    

    安装成功检测:

    C:\Users\Administrator\Desktop\fridastart>python
    Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import frida
    >>>
    

    然后是下载 frida-server android 文件,对应的 github 地址是: frida
    对应的文件名称示例: frida-server-11.0.13-android-arm.xz

    2. 使用

    1. 将 frida-server push android 手机内。然后 chmod 后执行。
    2. 在 PC 断进行端口转发
    C:\Users\Administrator\Desktop>adb forward tcp:27042 tcp:27042
    C:\Users\Administrator\Desktop>adb forward tcp:27043 tcp:27043
    
    1. 编写 py 脚本
    import frida
    rdev = frida.get_remote_device()
    front_app = rdev.get_frontmost_application()
    print front_app
    
    1. 执行脚本,观察数据
    C:\Users\Administrator\Desktop\fridastart>python get_front_app.py
    Application(identifier="com.google.android.googlequicksearchbox", name="Google 搴旂敤", pid=1928)
    

    3. 进阶

    1. hook 类里面的函数

    示例:hook 掉 native 方法,打印原始返回数据,并返回自定义的字符串

    import frida, sys
     
    def on_message(message, data):
        if message['type'] == 'send':
            print("[*] {0}".format(message['payload']))
        else:
            print(message)
     
    jscode = """
    Java.perform(function () {
        var MainActivity = Java.use('com.saliey.twobutton.MainActivity');
        MainActivity.getClc.implementation = function () {
            send("Hook getClc Start...");
            this.a = 88;
            this.b = 99;
            send("success !! ");
            return 777;
        }
        MainActivity.getStrFromJNI.implementation = function () {
            send("Hook getStrFromJNI Start... ");
            var retStr = this.getStrFromJNI();
            send("raw ret : " + retStr);
            return "asdfgggggggggggggggg";
        }
    });
    """
     
    process = frida.get_usb_device().attach('com.saliey.twobutton')
    script = process.create_script(jscode)
    script.on('message', on_message)
    script.load()
    sys.stdin.read()
    

    上面可以看到,首先是获取类实例,然后 hook 类方法。

    可参考博客:
    https://blog.csdn.net/zouyuanxc/article/details/80492465
    https://blog.csdn.net/zouyuanxc/article/details/80527522
    https://blog.csdn.net/zouyuanxc/article/details/80900808

    1. 函数传参

    implementation = function () {...} 的 小括号内,就是要 hook 的函数传递的参数。

    相关文章

      网友评论

          本文标题:hook 工具 frida 的使用

          本文链接:https://www.haomeiwen.com/subject/qmpyuftx.html