首頁
社區(qū)
課程
招聘
frida中要怎么獲取(構(gòu)建)jclass的類引用
ChuXin?. 2022-11-15 1751

有一個(gè)native方法如下

1
2
3
4
5
6
Java_com_xxxxxxxxxx_xxx_xxxxxxxxx_add(
JNIEnv* env,
jclass clazz,
int a3,
int a4,
int a5)

函數(shù)很簡單,內(nèi)容就是三個(gè)數(shù)相加,并返回

 

目的:想通過調(diào)用new NativeFunction來主動(dòng)調(diào)用這個(gè)native方法
(我知道可以通過Java層來主動(dòng)調(diào)用)

 

問題:怎么獲得jclass或者構(gòu)建jclass?

思路:

1.通過Java.vm.tryGetEnv()來得到env,然后主動(dòng)調(diào)用封裝好的findClass來獲得類引用jclass

結(jié)果:報(bào)錯(cuò),提示找不到類。通過了解以后知道frida-java所在的線程是通過pthread_create創(chuàng)造的,然后通過AttachCurrentThread獲取的JNIEnv,此時(shí)FindClass只會(huì)從系統(tǒng)的classloader開始查找,所以app自身的類是無法通過env->findClass來獲取

2.通過Java.vm.tryGetEnv()來得到env,然后主動(dòng)調(diào)用封裝好的getObjectClass來獲得類引用jclass

那么我們就需要先獲得jobject,jobject的獲取比較簡單

1
2
var jobject = Java.use("com.xxxxxxxxxx.xxx.xxxxxxxxx").$new().$h;
console.log("jobject => " + jobject);

實(shí)例化一個(gè)對(duì)象,然后得到的直接就是一個(gè)地址,然后用env.getObjectClass來調(diào)用

 

結(jié)果:崩潰,直接進(jìn)程崩潰了,有沒有佬知道什么原因的?

3.通過Java.use來獲取類引用

Java.use本身返回的應(yīng)該就是一個(gè)類引用,返回的是一個(gè)js的object

 

結(jié)果:通過Java.cast將js的object轉(zhuǎn)換成Java的Object后,想著通過寫入內(nèi)存來得到pointer,但是寫入的過程中發(fā)現(xiàn)兩個(gè)問題

 

一個(gè)就是Memory.alloc()需要長度,而現(xiàn)在的數(shù)據(jù)類型是一個(gè)Java的Object,怎么確定長度呢?

 

另一個(gè)就是怎么寫入?frida提供的API里面并沒有直接可以將一個(gè)Java的Object寫入的方法

最后

(研究這個(gè)jclass只是為了學(xué)習(xí)一下,滿足一下好奇心,大佬勿噴)
有沒有巨巨知道的,不吝賜教一下

收藏
1條回答
Sonshines 2022-12-6

在 Frida 中,您可以使用 Java.use 函數(shù)來構(gòu)建一個(gè) jclass 的類引用。這個(gè)函數(shù)的參數(shù)是您要構(gòu)建類引用的類的名稱,例如:

1
var MyClass = Java.use("com.example.MyClass");

上面的代碼將會(huì)構(gòu)建一個(gè)名為 MyClass 的 jclass 類引用。您可以使用這個(gè)類引用來訪問該類的屬性和方法,例如:

1
2
3
4
5
// 訪問屬性
console.log(MyClass.someField);
 
// 調(diào)用方法
MyClass.someMethod();

此外,您還可以使用 Frida 的 enumerateLoadedClasses 函數(shù)來枚舉所有已加載的類,并獲取它們的 jclass 類引用。例如:

1
2
3
4
5
6
7
8
9
Java.enumerateLoadedClasses({
  onMatch: function(className) {
    var clazz = Java.use(className);
    // 在這里處理 clazz
  },
  onComplete: function() {
    // 枚舉完成后的處理
  }
});

上面的代碼會(huì)枚舉所有已加載的類,并對(duì)每個(gè)類調(diào)用 onMatch 函數(shù)。您可以在 onMatch 函數(shù)中獲取每個(gè)類的 jclass 類引用,并進(jìn)行相應(yīng)的處理。當(dāng)枚舉完所有類后,會(huì)調(diào)用 onComplete 函數(shù),您可以在這里處理枚舉完成后的邏輯。

回復(fù)
frida jclass 類引用
  參與學(xué)習(xí)     人
  提問次數(shù)     100 個(gè)
0
我的提問
0
我的回答
0
學(xué)習(xí)收益