フックしたい Java コード
package com.test.testapplication;
import android.content.Context;
import android.webkit.ValueCallback;
import android.webkit.WebView;
public abstract class TXOut extends WebView {
public TXOut(Context context) {
super(context);
}
private class TXIn implements Runnable {
String a;
ValueCallback b;
TXIn(String str) {
this.a = str;
}
private void b() {
int temp = 0;
temp = temp + 3;
}
public void run() {}
}
}
ここで、Frida を使用してTXOut.TXIn.bをフックし、内部で evaluateJavascript メソッドを実行します。このメソッドには結果を受け取るコールバック メソッドが必要なので、匿名クラス オブジェクトを新しく作成する必要があり、Frida でこれを行う必要があります。
Frida が注入された後、TXOut.TXIn.bは次のように動作するはずです
private void b() {
int temp = 0;
temp = temp + 3;
TXOut.this.evaluateJavascript(
"(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String html) {
print(html);
}
});
}
これは、匿名クラス オブジェクトを新規作成し、このオブジェクトの onReceiveValue メソッドをフックして、その html 引数を取得する私の frida JavaScript コードです。しかし、私はそれをコーディングする方法がわかりません。誰でも私を助けることができますか、前もって感謝します。
var TXOut_TXIn_class = Java.use('TXOut$TXIn');
var TXOut_TXIn_class_b = TXOut_TXIn_class.b.overload();
TXOut_TXIn_class_b.implementation = function ()
{
var returnValue = TXOut_TXIn_class_b.apply(this, arguments);
//new ValueCallback<String>() and hook onReceiveValue method and print html argument
//Don't know how to write it here
return returnValue;
}