安卓编译: 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 系列函数,而非直接修改底层实现。
相关推荐
sam.li1 天前
GhidraMCP 原理与使用部署
ai·逆向·插件·mcp·ghidra
逆向新手3 天前
chrome-devtools-mcp不能远程调试的问题与解决方法_2026-03-25
爬虫·ai编程·逆向
林鸿群5 天前
.NET 逆向工程实战:将 Game.Utils 和 Game.Kernel 从 .NET 2.0 升级到 .NET 10
逆向·.net10·.net2.0
NPE~6 天前
[App逆向]环境搭建上篇——抓取apk https包
android·教程·逆向·android逆向·逆向分析
嫂子的姐夫8 天前
042-spiderbuf第C7题
爬虫·python·逆向
嫂子的姐夫8 天前
041-全扣补环境:同花顺
爬虫·python·js逆向·逆向
嫂子的姐夫8 天前
040-spiderbuf第C8题
javascript·爬虫·python·js逆向·逆向
嫂子的姐夫8 天前
043-spiderbuf第C3题
爬虫·python·js逆向·逆向
嫂子的姐夫8 天前
039-DES:gov招标(解密)
爬虫·python·js逆向·逆向
深念Y8 天前
光猫改桥接模式实战:通过Telnet获取超级管理员密码
ssh·路由器·桥接模式·逆向·光猫·telent·管理员密码