安卓编译: 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 系列函数,而非直接修改底层实现。
相关推荐
虎鲸不是鱼19 小时前
AI 自动化逆向(二十二)换行比峰值法:让 AI 自己发现图像的宽度
人工智能·自动化·大模型·逆向·ai逆向
虎鲸不是鱼19 小时前
AI 自动化逆向(二十九)受保护区间的真实形状是「夹层」
人工智能·自动化·大模型·逆向·ai逆向
虎鲸不是鱼21 小时前
AI 自动化逆向(二十五)数据表格式:一个恒等式覆盖 99% 的表
人工智能·自动化·大模型·逆向·ai逆向
虎鲸不是鱼3 天前
AI 自动化逆向(十七)解码器、反汇编器、反编译器:能力边界表
人工智能·自动化·大模型·逆向·ai逆向
感谢地心引力5 天前
Gemini 4 Argon 使用 REA 分析 Rstudio,实现简体中文支持
ai·逆向·r·汉化·rstudio·rea
虎鲸不是鱼6 天前
AI 自动化逆向(九)AI 会记住错的公共常量
人工智能·自动化·大模型·逆向·ai逆向
虎鲸不是鱼6 天前
AI 自动化逆向(十二)AI 有分类冲动:非要找二元判据
人工智能·分类·自动化·逆向·ai逆向
七夜zippoe6 天前
启元 Q1 接口地图:从 aimdk_msgs 逆向出 25 个 Service/Topic 的完整清单
ai·机器人·逆向·启元·接口地图
虎鲸不是鱼15 天前
AI 自动化逆向(三)我把一个逆向项目交给了 AI:它做到了什么程度
人工智能·自动化·大模型·逆向·ai逆向
用户21816970493018 天前
iOS 逆向 汇编代码和frida的使用
逆向