Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4caca11 authored by Alex Light's avatar Alex Light
Browse files

Add agent startup-attach

Add ability to give 'startup-agents' that are automatically loaded
when a (debuggable) app starts. These agents are any files in the
'code_cache/startup_agents' directory. The agents are started with the
apps data_directory as an argument.

Test: Install debuggable apk (here com.antonioleiva.bandhookkotlin)
  walleye:/ $ run-as com.antonioleiva.bandhookkotlin sh
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ mkdir code_cache/startup_agents
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ cp /data/local/tmp/libtifasts32.so code_cache
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ cp /data/local/tmp/libtifasts64.so code_cache
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ cp /data/local/tmp/libchainagentss32.so code_cache/startup_agents/
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ cp /data/local/tmp/libchainagentss64.so code_cache/startup_agents/
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ echo $PWD/code_cache/libtifasts32.so=log,ClassLoad > chain_agents.txt
  walleye:/data/data/com.antonioleiva.bandhookkotlin $ echo $PWD/code_cache/libtifasts64.so=log,ClassLoad >> chain_agents.txt
  Start bandhookkotlin
  Examine logcat

Bug: 135627501

Cherry-picked from commit c0fce111c8b due to merge conflict.

Change-Id: Ib82b27df90c7964a995288d8b2b3d348a11cdd80
Merged-In: Ib82b27df90c7964a995288d8b2b3d348a11cdd80
parent 5f00bf12
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -6365,6 +6366,26 @@ public final class ActivityThread extends ClientTransactionHandler {
        NetworkSecurityConfigProvider.install(appContext);
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);


        if (isAppDebuggable) {
            try {
                // Load all the agents in the code_cache/startup_agents directory.
                // We pass the absolute path to the data_dir as an argument.
                Path startup_path = appContext.getCodeCacheDir().toPath().resolve("startup_agents");
                if (Files.exists(startup_path)) {
                    for (Path p : Files.newDirectoryStream(startup_path)) {
                        handleAttachAgent(
                                p.toAbsolutePath().toString()
                                + "="
                                + appContext.getDataDir().toPath().toAbsolutePath().toString(),
                                data.info);
                    }
                }
            } catch (Exception e) {
                // Ignored.
            }
        }

        // Continue loading instrumentation.
        if (ii != null) {
            ApplicationInfo instrApp;