一目录结构

├── test.py  #py脚本
└── test.js #js脚本

一.py脚本

test.py

import frida
import sys
#连接设备app
dev=frida.get_usb_device() # get_usb_device获取设备
PACKAGE = 'cn.soulapp.android' # 包名
process = dev.attach(PACKAGE) # 获取给定包名的app进程 #运行脚本
#获取js脚本内容
with open('test.js', 'r') as fr:
js_test=fr.read()
script = process.create_script(js_test) # 这里是把你的js脚本给塞进了process #可以获取打印效果
def show(message,data):
print(message)
script.on("message",show) # 加载脚本
script.load()
sys.stdin.read()

二.js脚本

Java.perform(function(){    //固定写法所有脚本就要丢在里面
var c =Java.use('cn.soulapp.android.utils.j'); //Java.use获取cn.soulapp.android.utils.j这个类
c.e.implementation =function(a){return false}; //类的方法复制
});

三.frida相关接口

一.Java.perform(function()

返回值:空

用途:这是frida的main,所有的脚本必须放在这个里面

二. Java.use(类名)

返回值:类的对象

用途:动态获取一个类的对象

拓展:$new()实例化对象$dispose()销毁对象

三.Java.available

返回值:boolean。

用途:确认当前进程的java虚拟机是否已经启动,虚拟机包括Dalbik或者ART等。虚拟机没有启动的情况下不要唤醒其他java的属性或者方法。

四.Java.enumerateLoadedClasses(callbacks)

返回值:无

参数:回调函数

用途:列出当前已经加载的类,用回调函数处理

回调函数:

onMatch:function(className){ }

找到加载的每个类的时候被调用,参数就是类的名字,这个参数可以传给java.use()来获得一个js类包

onComplete: function ():

列出所有类之后被调用 ,也就是完成后做一些扫尾工作

五.Java.enumerateLoadedClassesSync()

返回值:所有已经加载的类的数组。

六.Java.scheduleOnMainThread(function()

返回值:无

用途:在线程上运行指定的函数

七.Java.choose(className, callbacks):

用途:查找堆中指定类的实例。获得实例后可以调用实例的函数

回调函数

onMatch: function (instance)

每次找到 指定类的实例后调用,

onComplete: function ()

完成时调用

八.Java.cast(handle, klass)

返回值:类的对象

参数:句柄(ptr),klass(use()的返回值)

用途:用来获取 指定内存地址的类的实例 的对象。这个对象有类属性,可以得到所属类的对象。还有$className属性过去类名的字符串。一个对象有可能有很多实例

例子:

var Activity = Java.use("android.app.Activity");

var activity = Java.cast(ptr("0x1234"), Activity);

四.总结

java接口的api中,perform是必须用,没什么实际作用。use是最常用的,用来获取类的对象,获取对象后就可以替换具体方法的实现了,相当于修改源码!!choose和cast是针对运行时对象的实例,相当于动态调试过程中获取信息。

hook框架-frida简单使用模板以及frida相关接口的更多相关文章

  1. hook框架frida的安装以及简单实用案例

    1.下载地址 https://github.co/frida/frida/releases 2.另外两种安装方法 1.Install from prebuilt binaries This is th ...

  2. hook框架frida添加至于安卓应用中

    转载至于https://koz.io/using-frida-on-android-without-root/ Frida is a great toolkit by @oleavr, used to ...

  3. 框架Thinkphp5 简单的实现行为 钩子 Hook

    这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...

  4. laravel5.1框架基础之Blade模板继承简单使用方法分析

    本文实例讲述了laravel5.1框架基础之Blade模板继承简单使用方法.分享给大家供大家参考,具体如下: 模板继承什么用? 自然是增强基础页面的复用,有利于页面文档的条理,也便于更改多处使用的内容 ...

  5. 如何设计Java框架----一个简单的例子【翻译】

    原文:http://www.programcreek.com/2011/09/how-to-design-a-java-framework/ 原文和翻译都只是参考,如有不对,欢迎指正. 你可能会好奇框 ...

  6. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板

    最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...

  7. Android Hook框架adbi源码浅析(一)

    adbi(The Android Dynamic Binary Instrumentation Toolkit)是一个Android平台通用hook框架,基于动态库注入与inline hook技术实现 ...

  8. android免root hook框架legend

    一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...

  9. Android中免root的hook框架Legend原理解析

    一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...

随机推荐

  1. android 6.0三星5.1.1Root

    现在google是越来越不给我们留活路了… 从android 6.0开始, 三星的5.1.1开始. 默认都开启了data分区的forceencryption, 也就是强制加密. 也开启了/system ...

  2. 感性认识JWT

    常见的认证机制 今天我么聊一聊JWT. 关于JWT,相信很多人都已经看过用过,他是基于json数据结构的认证规范,简单的说就是验证用户登没登陆的玩意.这时候你可能回想,哎哟,不是又那个session么 ...

  3. Go 中读取命令参数的几种方法总结

    前言 对于一名初学者来说,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算. 本文讲述使用三种方式讲述 Go 语言如何接受命令行参数 ...

  4. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  5. 编写优美Android注释的常用语法

    编写优美Android注释的常用语法   短期目标是定期能出一篇简文,希望自己能坚持下去~~~~( ̄_, ̄ )   附上Android君 今天要分享的是关于Android注释系统的一些强大功能!! 实 ...

  6. jmeter控制器入门笔记一

    @@@@@@@@@@@@@@@ 千里之行 今天记录一下个人才使用控制器时的一些心得.逻辑控制器在jmeter中有很多种,个人根据官方解释理解的作用就是:通过控制器可以更好地控制请求的执行顺序.jmet ...

  7. github提交报错

    github正确提交步骤 https://www.cnblogs.com/alex-415/p/6912294.html 可能的错误 提交前没有先pull,主要的原因是在创建repository的时候 ...

  8. PHP array_slice() 函数

    实例 从数组的第二个元素开始取出,并返回直到数组末端的所有元素: <?php$a=array("red","green","blue" ...

  9. MySQL(版本8.0.19)服务的启动/停止、登录/登出、修改密码

      [先说明一点 ,windows系统下,英文字母不分大小写.] MySQL 服务的 启动 / 停止 方式一: (我的系统是windows10) 找到 此电脑 图标 右键点击,选择"管理&q ...

  10. Pr剪辑

    目录 Pr剪辑教程 入门基础 创建序列类别 处理非正常序列 导出文件 导出设置 导入各类别素材 简单使用: 剪辑素材常用方法 剃刀工具 选择工具 波纹编辑工具 打入点和出点 剪辑速度 整个素材视频速度 ...