安卓编译: 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 系列函数,而非直接修改底层实现。
相关推荐
介一安全3 天前
【Frida Android】实战篇17:Frida检测与绕过——基于inline hook的攻防实战
android·网络安全·逆向·安全性测试·frida
嫂子的姐夫3 天前
008-字体反爬:猫眼
爬虫·逆向·混淆·字体反爬
apcipot_rain7 天前
汇编语言与逆向分析 一轮复习笔记
汇编·笔记·逆向
这样の我7 天前
某海外 _signature签名分析
逆向
Aerelin7 天前
《静态分析:GUI程序的明码比较》
逆向·ctf
奋飞安全7 天前
给你的Ida插上翅膀
安全·逆向
恶猫7 天前
ImHex 十六进制编辑器 v1.38.0 多语便携版
编辑器·逆向·十六进制·模式匹配·imhex
Aerelin7 天前
Windows GUI 逆向分析题(CrackMe)
逆向·ctf
逆向新手7 天前
js逆向-某省特种设备aes加密研究
javascript·爬虫·python·逆向·js
介一安全10 天前
【Frida Android】实战篇15:Frida检测与绕过——基于/proc/self/maps的攻防实战
android·网络安全·逆向·安全性测试·frida