安卓编译: 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 系列函数,而非直接修改底层实现。
相关推荐
安全小王子8 小时前
nssctf_easyapp
网络安全·逆向·ctf·nssctf
安全小王子2 天前
nssctf_sign-ezc++
网络安全·逆向·ctf·nssctf
网安蟹佬霸2 天前
Android安全攻防实战:从APK逆向到Frida动态Hook全流程详解(附脚本)
android·前端·安全·web安全·逆向·csrf·网安
刘晴8305 天前
游戏逆向实战:我会梯云纵
逆向
k3x1n8 天前
三星安卓系统BUG排查记录:云闪付、铁路12306、个人所得税、中国移动等App,长期闪退的根本原因分析
android·逆向
_Achelous9 天前
BlueArchive蔚蓝档案国际服剧情文本取得
逆向
玫幽倩16 天前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证
小小工匠19 天前
当 Agent 遇上逆向:拆解 reverse-skill 的技能路由架构
架构·逆向·reverse-skill
枝头玉2 个月前
新160个CrackMe048-monkeycrackme1、049-THraw-crackme8、050-daxxor逆向分析
安全·逆向·crackme·reserve
夜猫逐梦2 个月前
【UE基础】01.环境与引擎心智模型
游戏·逆向·ue·unreal·actionrpg