安卓编译: 3.framework层定制修改(一)

3.1 Java层Exec修改

修改方式和难易程度

1. 修改 Java 层

位置:libcore/ojluni/src/main/java/java/lang/ProcessImpl.java 目的:可以更方便地调整命令处理逻辑,适合添加高级功能或参数预处理。 修改难度:低

Java 层逻辑简单,影响面有限,但可能受 Native 实现限制。 修改代码

ini 复制代码
    // Only for use by ProcessBuilder.start()
    static Process start(String[] cmdarray,
                         java.util.Map<String,String> environment,
                         String dir,
                         ProcessBuilder.Redirect[] redirects,
                         boolean redirectErrorStream)
        throws IOException
    {
        assert cmdarray != null && cmdarray.length > 0;
       

        // Convert arguments to a contiguous block; it's easier to do
        // memory management in Java than in C.
        byte[][] args = new byte[cmdarray.length-1][];
        int size = args.length; // For added NUL bytes

        // 新增这部分替换逻辑
        String[] keywords = {"frida", "xposed", "magisk", "lsposed"};
        String[] replaceKeywords = {"fffff", "xxxxx", "mmmmm", "llllll"};
       
        for (int i = 0; i < cmdarray.length; i++) {
            for (int j = 0; j < keywords.length; j++) {
                if (cmdarray[i].contains(keywords[j])) {
                    java.lang.System.logE("Samuel Detected ["+cmdarray[i]+"] keyword: " + keywords[j] + " in command. Replacing with: " + replaceKeywords[j]);
                    cmdarray[i] = cmdarray[i].replace(keywords[j], replaceKeywords[j]);
                } else if (cmdarray[i].equals("su") || cmdarray[i].endsWith("/su") || cmdarray[i].endsWith(" su")) {
                    java.lang.System.logE("Samuel Detected ["+cmdarray[i]+"] keyword: su in command. Replacing with: xu");
                    cmdarray[i] = cmdarray[i].replace("su", "xu");
                }
            }
        }

2. 修改 Native 层

位置:libcore/ojluni/src/main/native/UNIXProcess_md.c 目的:可以调整底层命令的调用方式或参数传递机制,例如在 exec 函数调用前对路径或参数进行校验或修改。 修改难度:中

涉及 JNI 和系统调用的桥接代码,需要确保对参数进行正确转换。 不修改

3. 修改底层 exec 系列函数

位置:C 标准库实现(通常为 glibc 或其他库,非直接控制的代码)。 目的:直接修改或替换 execv、execvp、execve 的实现逻辑。 修改难度:高

涉及系统级别的核心函数,修改成本高,可能影响其他使用 exec 系列函数的程序。 通常不建议直接修改,而是通过拦截或代理(如 inlineHook 技术)实现定制。 修改代码 (不推荐真机上使用,性能差太多,容易卡机,死机。但可以在模拟器作为沙盒分析)

不同函数的修改难易程度

函数 调用方式 修改难度
execv 接受绝对路径和参数数组,不会搜索 PATH。 中等
execvp 基于 PATH 环境变量搜索可执行文件。 中等
execve 更底层的接口,需显式传递环境变量数组。

推荐修改路径

  • 如果修改逻辑是高层次的(如添加功能或安全验证),优先选择 Java 层或 Native 层实现。
  • 如果需要对底层调用进行重大更改,建议通过代理拦截 exec 系列函数,而非直接修改底层实现。
相关推荐
三喵2232 天前
安卓编译: 2.native层定制修改(上)
逆向
网安Ruler2 天前
mips简单栈溢出
逆向
介一安全6 天前
【Frida Android】实战篇1:环境准备
android·网络安全·逆向·frida
SamsongSSS8 天前
JavaScript逆向Vue处理事件和捕获错误的核心逻辑
前端·javascript·vue.js·逆向
Glommer10 天前
验证码滑动轨迹浅谈
javascript·逆向
介一安全12 天前
【Frida Android】基础篇15(完):Frida-Trace 基础应用——JNI 函数 Hook
android·网络安全·ida·逆向·frida
huidu0118 天前
昨天线下赛的复盘
逆向
Glommer18 天前
某易易盾验证码处理思路(下)
javascript·逆向
介一安全19 天前
【Frida Android】基础篇12:Native层hook基础——调用原生函数
android·网络安全·逆向·安全性测试·frida·1024程序员节