package com.example.smshook; import android.app.Activity; import android.content.Context; import android.content.IntentFilter; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; import android.widget.Toast; import androidx.core.content.ContextCompat; import java.io.IOException; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; public class MessageHook { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { try { Class clazz = XposedHelpers.findClass("com.google.android.apps.messaging.home.HomeActivity", lpparam.classLoader); XposedHelpers.findAndHookMethod(clazz, "onCreate", Bundle.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) { Activity activity = (Activity) param.thisObject; Toast.makeText(activity, "message hooked", Toast.LENGTH_LONG).show(); XSharedPreferences pref = new XSharedPreferences("com.example.smshook", "sms_conf"); String sender = pref.getString("sender", "1"); String message = pref.getString("message", "1"); Class receiverClazz = XposedHelpers.findClass("com.google.android.apps.messaging.shared.receiver.SmsDeliverReceiver", lpparam.classLoader); // try { // Object receiver = receiverClazz.newInstance(); // XposedHelpers.callMethod(receiver, "onReceive", activity.getApplicationContext(), SmsUtils.getSmsIntent(sender, message)); // } catch (Throwable e) { // e.printStackTrace(); // } try { HttpServer server = HttpServer.getInstance(9898); if (!server.wasStarted()) server.start(); server.setOnRequestListener((s, m) -> { try { Object receiver = receiverClazz.newInstance(); XposedHelpers.callMethod(receiver, "onReceive", activity.getApplicationContext(), SmsUtils.getSmsIntent(s, m)); } catch (Throwable e) { e.printStackTrace(); } }); } catch (Throwable e) { e.printStackTrace(); } } }); } catch (Throwable e) { e.printStackTrace(); } } }