亚洲乱码一卡二卡四卡乱码新区_亚洲乱码中文字幕小综合_亚洲人成电影在线播放_亚洲性色AV一区二区三区_亚洲一区二区三区影院_亚洲中文字幕久久精品无码A_亚洲中文字幕无码专区_伊人热热久久原色播放WWW_在线观看AV永久免费_最新欧洲大片免费在线,欧美日韩成人三级免费看,久久黄色网址,欧美激情内射喷水高潮

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

有一個(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í)收益