美文网首页Crack
Frida Hook 快速开始

Frida Hook 快速开始

作者: 2h0n9 | 来源:发表于2019-06-08 19:29 被阅读0次

    前言

    我也不知道我多久没更新博客了

    官网:frida.re

    frida 是我用过最好用的hook框架没有之一,最喜欢的就是不需要重启手机,而且不会造成想xp框架那样手机开机很慢,因为frida在你手机上只运行了一个服务

    屁话就少说点吧,进入正题

    E-mail:zckuna@163.com

    正文

    一、安装Frida

    install.png

    1、这是官网给的快速开始教程,就像安装一个python模块一样安装就好,安装就不多说了,这个没法自己解决不需要看下去了。

    2、然后你还需要去Frida Github官方开源项目处下载最新的 frida-server,这个玩意儿是关键,用来连接手机的一个服务,点我下载,打开页面有很多包,目前我看到的最新版本是12.6.5的版本

    frida-server-install.png

    你需要找到 frida-server-2.6.5-<system>-<version>.xz,其中

    • system 是指你手机的系统,比如Android、IOS,没错,frida支持ios,这个以后等我有ios手机再说(逃;、linux、windows。

    • version 代表你手机处理器架构:

      • IOS有 armarm64

      • Android有 x86x86_64armarm64

      • Linux有 8686_64

      • Windows有 8686_64

    3、下载好了后用adb或者其他方式弄到手机的 /data/local/tmp/ 目录下,然后运行(别说你不解压直接运行)

    二、运行

    下载好了,也运行了后打开终端使用命令 frida-ps -U 获取手机进程来测试是否正常,这一切的前提都是你运行了frida-server并且手机打开了开发者模式连接上了电脑,如果输出了进程信息就说明成功了,如果提示说frida没有连接(英文大概这么说:not connected,大概就这样,自己翻译吧)那就说明你下载的架构与你的手机不相符,或者你没有用数据线连接手机,再或者就是你没有打开开发者模式等等,实在没法解决可以百度、google,当然你也可以把问题已邮件的方式发给我(小声逼逼:我大概能帮你解决)。

    frida命令行有很多工具可以用,这些我都不会,因为我用不到。。。给你们个网站吧: www.frida.re,自己看文档,虽然文档不咋地

    三、Example

    bb了那么多贼鸡儿聊,不弄点东西说的那些跟放屁一样,首先献上官网的一个例子:我是例子,直接 Ctrl C-V 完事...

    我这里用mt管理器来示范一下,我来告诉你们为什么要用mt,因为mt的混淆看得我特么要把bin拖出来打一顿,mt目前就我所知,用了代码混淆、res混淆、字符串加密、id加密(这就是字符串加密),而且其中的字符串加密还特么用了好几种方式,我***。既然你要加密字符串,那我就非要把你字符串hook出来,虽然hook了也没什么屌用,因为你还是找不到是哪里加密的。

    不管你怎么加密,你总得用到 Stirng、StringBuilder、getString 等这些方法,怎么干,直接hook,新建一个py脚本,如下是我的项目结构:

    ➜ Mt tree
    .
    ├── mt.py # py脚本
    └── script.js # js 脚本

    0 directories, 2 files
    ➜ Mt

    输入如下代码(我有注释来解释每一句代码的作用):

    mt.py

    import frida
    import sys
    ​
    ​
    PACKAGE = 'bin.mt.plus'
    ​
    ​
    if __name__ == '__main__':
     jscode = open('script.js', 'r').read() # 获取js脚本内容
     # get_usb_device获取设备(就是你手机)
     # attach(翻译:链接)我所理解是连接给定包名的app的进程,为什么是我所理解,因为官网没有写
     process = frida.get_usb_device().attach(PACKAGE) # 获取给定包名的app进程
     print(process) # 打印看看是嘛玩意儿
     script = process.create_script(jscode) # 这里是把你的js脚本给塞进了process,源码在这https://github.com/frida/frida-python/blob/master/frida/core.py#L147
     # script.on('message', on_message)
     print('[*] Running CTF')
     script.load() # 加载脚本,https://github.com/frida/frida-python/blob/master/frida/core.py#L191
     sys.stdin.read()
    

    script.js

    // 这个方法是为了辅助我输出用的,和python的字符串.format差不多的用法
    String.prototype.format = function () {
     var values = arguments;
     return this.replace(/\{(\d+)\}/g, function (match, index) {
     if (values.length > index) {
     return values[index];
     } else {
     return "";
     }
     });
    };
    ​
    ​
    // Resources 类hook
    Java.perform(function() {
     var Resources = Java.use('android.content.res.Resources'); // 获取Resources类
     // 因为getString方法重载,有几个我也没数,我只知道我需要用到的是接收一个id作为参数的方法
     //.overload填上你要hook的方法的参数类型,如果不知道直接不写,frida会报错提示你
     Resources['getString'].overload('int').implementation = function(id) { // id是接收到的参数
     console.log('\n----- [Resources.getString] -----');
     var str = this.getText(id); // 这里通过this调用了Resources类中的getText方法
     console.log('resId:{0} => string:{1}'.format(id,str)); // 输出
     return str // 返回
     }
    });
    ​
    ​
    // Toast 类hook,和上面一样
    Java.perform(function() {
     var Toast = Java.use('android.widget.Toast');
     Toast['makeText'].overload('android.content.Context', 'java.lang.CharSequence', 'int').implementation = function(context, text, duration) { // 三个参数
     console.log('\n----- [Toast.makeText] -----');
     console.log('[Context]');
     console.log('\n\tContext:', context);
     console.log('\n\tClass:', context.getClass());
     var clazz = String(context.getClass()).split('.');
     console.log('\n\t\tClass Package:', clazz[0]);
     console.log('\n\t\tClass Name:', clazz[1]);
     console.log('Text:', text);
     console.log('Duration:', duration);
     return this.makeText(context, null, text, duration);
     }
    });
    

    运行

    ➜  Mt python3 mt.py
    Traceback (most recent call last):
     File "mt.py", line 10, in <module>
     process = frida.get_usb_device().attach(PACKAGE)
     File "/usr/local/lib/python3.7/site-packages/frida/__init__.py", line 83, in get_usb_device
     return get_device_matching(lambda device: device.type == 'usb', timeout)
     File "/usr/local/lib/python3.7/site-packages/frida/__init__.py", line 113, in get_device_matching
     raise InvalidArgumentError("device not found")
    frida.InvalidArgumentError: device not found
    ➜  Mt
    

    报错,没找到设备,数据线连上电脑后把mt软件给打开,不然又要报错,我就不演示了,正常运行:

    run.jpg

    如果没东西输出,就检查代码,百分之99是你的问题

    总结

    总结就算了,就到这吧,饿死我了

    下篇预定:frida使用技巧

    相关文章

      网友评论

        本文标题:Frida Hook 快速开始

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