hook JS 简单入门 python脚本

5 篇文章 0 订阅

首先搭框架+hook普通方法

import frida,sys

# 写js代码hook java代码
java.perform(function(){
    var utils = Java.use('要hook的类名');
    var class = Java.use('java.lang.Class')
    
    # hook 普通方法
    utils.类的方法名.implementation = funtion( 方法的参数a,b ){
        console.log(a); # 输出信息 参数a 也可使用 arguments[0] 输出方法的参数
        send();  # 也可输出信息
        # this 表示当前类
        return this.xxx方法; # 为hook的代码返回值,可以是当前方法,也可以是其他
    }
}

hook构造方法

    # hook 构造方法
    utils.$init.implementation = funtion( 方法的参数a,b ){
        console.log(a); # 输出信息 参数a 也可使用 arguments[0] 输出方法的参数
        send();  # 也可输出信息
        # this 表示当前类
        return this.xxx方法; # 为hook的代码返回值,可以是当前方法,也可以是其他
    }

hook 重载方法

# hook 重载方法
    utils.类的方法名.overload(填写重载方法参数类型(若非常规类型,需填写该类型完整位置,如com.xx.xx.自定义类)如:"int","java.lang.String").implementation = funtion( 方法的参数a,b ){
        console.log(a); # 输出信息 参数a 也可使用 arguments[0] 输出方法的参数
        send();  # 也可输出信息
        # this 表示当前类
        return this.xxx方法; # 为hook的代码返回值,可以是当前方法,也可以是其他
    }


    
    hook 构造对象参数(即创建一个对象)

# hook 构造对象参数(即创建一个对象)
    utils.$init.implementation = funtion( 方法的参数a,b ){
        console.log(a); # 输出信息 参数a 也可使用 arguments[0] 输出方法的参数
        send();  # 也可输出信息
        
        # 创建utils对象,可将该对象传递给hook的方法,有些方法的参数是对象类型,需要创建对应的对象
        var cls = utils.$new(参数);
        
        # this 表示当前类
        return this.xxx方法; # 为hook的代码返回值,可以是当前方法,也可以是其他
    }


    
     hook 类属性
   

# hook 类属性
    utils.$init.implementation = funtion( 方法的参数a,b ){
        console.log(a); # 输出信息 参数a 也可使用 arguments[0] 输出方法的参数
        send();  # 也可输出信息
        
        # 获取类属性的值
        var val = $utils.属性.value;
        $utils.属性.value = val
        
        # 也可通过反射的方法获取类属性的值
        var val = Java.cats(获取到对应的类utils.getClass(),clazz).getDeclaredField(要hook的属性);
        # 设置属性可访问
        val.setAccessible(true);
        var value = val.get(从哪个类中获取utils);
        val.set(为哪个类中设置utils,value);
        
        
        
        # this 表示当前类
        return this.xxx方法; # 为hook的代码返回值,可以是当前方法,也可以是其他
    }


   执行框架

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


# attach apk进程,也可使用firda.get_usb_device()
process = frida.get_remote_device().attach('填写程序包名,可通过frida --ps -U 获取,或者其他程序获取apk信息 apkmsg')

# 为apk进程创建执行脚本
script = process.create_script(jscode)

script.on('message',message)
script.load()
script.read()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值