Frida Hook(七)- 安卓接口与抽象类Hook

admin 2024年7月14日10:56:26评论208 views字数 2814阅读9分22秒阅读模式

0

1

简介

Frida Hook(七)- 安卓接口与抽象类Hook

本文详细介绍了接口、抽象类的实现类hook方式;在开发中,有些类会实现接口/抽象类并实现其中的方法在逆向分析中,单击这些方法跳转到定义处时,可能会跳转到接口/抽象类中声明的方法上,而不是跳转到该接口/抽象类的实现类的方法上;因此往往很难快速定位到具体实现类的方法,通过frida hook的方式可以快速定位出具体实现方法

Frida Hook(七)- 安卓接口与抽象类Hook

0

2

概念

Frida Hook(七)- 安卓接口与抽象类Hook


抽象类:可以包含抽象方法(没有方法体的方法)和具体方法,不能被实例化,用于为子类提供通用的属性和方法定义。
接口:只包含抽象方法和常量,用于定义一组规范,实现接口的类必须实现其中的所有方法。

0

3

接口实现类Hook

Frida Hook(七)- 安卓接口与抽象类Hook

代码示例



//定义接口public interface PikasecInterface {  void test1();  void test2(String a, String b)

}

//定义接口的实现类

public class PikasecClass implements PikasecInterface {    public void test1() {      System.out.println("hi, i am test1")    }    public void test2(String a, String b) {        String c = a + b        System.out.println("hi ,i am test2 method,i will"+c)    }}

Hook 脚本

setImmediate(function () {  Java.perform(function () {    console.log("(*) Enumerating classes...");

    // 使用 enumerateLoadedClasses 枚举所有已加载的类    Java.enumerateLoadedClasses({      onMatch: function (className) {        // 筛选出路径以 "com.pika" 开始的类        if (className.startsWith("com.pika")) {          console.log("(*) Found instance of '" + className + "'");

          // 使用 Java.use 获取 Frida 包装后的类          const clazz = Java.use(className);

          // 获取该类实现的所有接口          const interfaces = clazz.class.getInterfaces();

          // 遍历接口          for (const iface of interfaces) {            // 检查是否包含指定接口            if (iface.toString() === "com.pika.app.PikasecInterface") {              console.log("(*) Found class implementing PikasecInterface: " + className);            }          }        }      },      onComplete: function () {        console.log("(*) Class enumeration complete");      },    });  });});


本解析

  • setImmediate:将一个函数注册到 JavaScript 运行时,使其尽快执行。
  • Java.perform:表示在 Java 运行时环境中执行后续的代码。
  • Java.enumerateLoadedClasses:用于枚举所有已加载的类。它有两个回调函数,onMatch 会为每个匹配的类名被调用,onComplete 在枚举完所有类后被调用一次。
  • className.startsWith("com.pika"):筛选出类名以 "com.pika" 开始的类。
  • Java.use(className):通过类名获取 Frida 包装后的类对象。
  • clazz.class.getInterfaces():获取该类实现的所有接口数组。
  • 通过遍历接口数组,检查是否包含指定的接口com.pika.app.PikasecInterface。如果包含,则打印出相关信息。


0

4

抽象类实现类Hook

Frida Hook(七)- 安卓接口与抽象类Hook


代码示例

//定义接口public interface PikasecAbstractClass {  abstract void test3();  abstract void test4(String a, String b)

}

//定义接口的实现类

public class PikasecClass extends PikasecAbstractClass {    public void test3() {      System.out.println("hi, i am test3")    }    public void test4(String a, String b) {        String c = a + b        System.out.println("hi ,i am test4 method,i will"+c)    }}


Hook 脚本

Java.perform(function () {    // 枚举所有已加载的类    Java.enumerateLoadedClasses({        onMatch: function (className) {            // 筛选出路径以 "com.pikasec" 开始的类            if (className.startsWith("com.pikasec")) {                 var clazz = Java.use(className);                 // 获取父类                var superClass = clazz.class.getSuperclass();                 // 判断父类是否为 "com.pikasec.app.PikasecAbstractClass"                if (superClass && superClass.getName() === "com.pikasec.app.PikasecAbstractClass") {                     console.log("找到接口的实现类: " + className);                 }            }        },        onComplete: function () {}    });});

脚本解析:

  • Java.perform(function () {...}):确保在 Java 环境中执行后续代码。
  • Java.enumerateLoadedClasses({...}):枚举所有已加载的类。
  • onMatch: function (className) {...}:对于每个匹配的类名,执行其中的代码。
  • if (className.startsWith("com.pikasec")):筛选出路径以 "com.pikasec" 开始的类。
  • var clazz = Java.use(className):使用 Java.use 获取 Frida 包装后的类对象。
  • var superClass = clazz.class.getSuperclass():通过 Java 反射机制获取该类的父类。
  • if (superClass && superClass.getName() === "com.pikasec.app.PikasecAbstractClass"):检查父类是否为指定的抽象类,如果是,则打印出该类名。

原文始发于微信公众号(暴暴的皮卡丘):Frida Hook(七)- 安卓接口与抽象类Hook

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月14日10:56:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Frida Hook(七)- 安卓接口与抽象类Hookhttps://cn-sec.com/archives/2951786.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息