Android系统修改/system/build.prop后开不了机的问题

本文介绍了当修改Android系统的/system/build.prop文件后导致设备无法开机的问题,并提供了详细的解决步骤,包括如何检查和修正文件权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Android系统修改/system/build.prop后开不了机的问题


一、当你adb pull 把/system/build.prop 文件pull 出来修改后再adb
 push到设备里面reboot后,你会发现设备不能开机了。

二、查看该文件的权限,你会发现修改后再次重新push到设备里面的文件权限已经不一样了。原因是system/build.prop的文件权限已经变动,导致系统不能正常启动,需把权限修改回0644。

三、出于安全原因,禁止有的文件设置全域可写,相关的代码在system/core/init/util.cpp里面

<think>好的,我现在需要帮助用户解决如何通过Xposed框架Hook RandomAccessFile类的readline方法,从而在读取/system/build.prop文件时过滤掉包含'vmos'的字符串。首先,我需要回顾一下Xposed框架的基本工作原理和Hook的方法。 Xposed框架允许发者通过编写模块来修改Android应用程序或系统服务的行为,主要是在方法执行前后插入自定义代码。用户的目标是修改RandomAccessFile类的readline方法,特别是当该方法读取特定文件时进行过滤。 首先,我需要确认RandomAccessFile类中的readLine方法是否可以被Hook。根据Java文档,RandomAccessFile确实有一个readLine()方法,用于读取下一行文本。因此,使用Xposed的findAndHookMethod来拦截这个方法应该是可行的。 接下来,用户希望只在读取/system/build.prop文件时应用这个过滤。因此,在Hook的回调中,需要判断当前操作的文件路径是否是目标文件。但RandomAccessFile的构造函数接受文件路径或File对象,所以可能需要先Hook构造函数,获取文件路径,并保存起来,然后在readLine的时候检查是否是目标文件。 可能的步骤是: 1. Hook RandomAccessFile的构造函数,获取传入的文件路径,并保存到某个上下文中,比如一个ThreadLocal变量或者使用Xposed的额外参数。 2. 在Hook readLine方法时,检查当前实例对应的文件路径是否是/system/build.prop。 3. 如果是,则对readLine的结果进行处理,过滤掉包含'vmos'的行。 不过,需要注意的是,RandomAccessFile可能有多个构造函数,例如接受File和String模式的,或者String路径和String模式的。需要确保Hook所有可能的构造函数,以正确捕获文件路径。 另外,线程安全问题需要考虑,比如不同的RandomAccessFile实例可能同时被不同的线程使用,所以保存文件路径时需要确保每个实例的数据独立。可以使用Xposed提供的辅助方法,如param.thisObject来获取当前实例,并将文件路径与实例关联起来,例如使用WeakHashMap来存储实例和对应的文件路径。 在实现过滤时,当调用readLine得到原始结果后,检查是否包含'vmos',如果包含,则返回null或者跳过该行继续读取下一行,直到找到不包含的行,或者到达文件末尾。需要注意的是,直接修改返回值可能会导致后续读取的位置不正确,可能需要更复杂的处理,比如在读取时动态过滤,同时调整文件指针的位置,但这样可能会比较复杂,尤其是RandomAccessFile允许随访问,处理起来可能比较困难。 另一个可能的办法是替换整个readLine方法,或者返回处理后的字符串,但需要确保不影响其他文件的操作,仅在目标文件时进行过滤。例如,在afterHookedMethod回调中,获取原始结果,如果该行包含'vmos',则返回null或者空字符串,或者继续读取下一行,但这样可能会改变原方法的行为,导致调用者出现异常,特别是如果应用依赖于特定的行内容的话。 因此,可能需要更谨慎的处理,例如,当读取到包含'vmos'的行时,返回修改后的内容,或者直接跳过该行,继续读取下一行。不过,这需要在不破坏文件指针的情况下实现,可能需要Hook更底层的方法,或者结合其他Hook点。 此外,还需要考虑Android版本的不同,某些方法可能有不同的实现,需要进行测试。同时,需要处理不同模式的构造函数,确保正确获取文件路径。 总结步骤: 1. Hook所有RandomAccessFile的构造函数,记录实例对应的文件路径。 2. Hook readLine方法,在afterHookedMethod回调中,检查当前实例是否关联到/system/build.prop文件。 3. 如果是,则检查返回的字符串是否包含'vmos',如果包含,则可能返回处理后的结果,如null或修改后的字符串,或者继续读取直到找到不含'vmos'的行。 在代码实现中,需要注意Xposed API的使用,如XposedHelpers.findAndHookMethod,正确指定类名和方法参数类型。此外,处理字符串时应考虑编码问题,因为readLine返回的是使用ISO-8859-1解码的字符串,可能需要正确的转换。 最后,测试模块时,需要确保只在目标文件上生效,不影响其他文件的操作,同时正确处理各种边缘情况,比如多行包含'vmos'的情况,或者文件末尾的处理。</think>要实现通过Xposed框架Hook `RandomAccessFile`类的`readLine`方法,在读取`/system/build.prop`时过滤包含`vmos`的内容,需按以下步骤操作: ### 1. Hook构造函数以捕获文件路径 首先需拦截`RandomAccessFile`的构造函数,以确定当前实例是否操作目标文件: ```java XposedHelpers.findAndHookConstructor(RandomAccessFile.class, File.class, String.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { File file = (File) param.args[0]; if (file.getAbsolutePath().equals("/system/build.prop")) { // 标记该实例关联目标文件 XposedHelpers.setAdditionalInstanceField(param.thisObject, "targetFile", true); } } }); XposedHelpers.findAndHookConstructor(RandomAccessFile.class, String.class, String.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { String path = (String) param.args[0]; if (path.equals("/system/build.prop")) { XposedHelpers.setAdditionalInstanceField(param.thisObject, "targetFile", true); } } }); ``` ### 2. Hook readLine方法并过滤内容 对`readLine`方法进行Hook,并在返回前修改结果: ```java XposedHelpers.findAndHookMethod(RandomAccessFile.class, "readLine", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { Boolean isTarget = (Boolean) XposedHelpers.getAdditionalInstanceField(param.thisObject, "targetFile"); if (isTarget != null && isTarget) { String line = (String) param.getResult(); if (line != null && line.contains("vmos")) { param.setResult(null); // 过滤该行,返回null表示行结束 } } } }); ``` ### 关键点说明 1. **多构造函数处理**:需Hook所有`RandomAccessFile`构造函数(`File`和`String`路径类型)[^3] 2. **实例标记**:通过`setAdditionalInstanceField`绑定实例与目标文件状态 3. **行过滤逻辑**:在`afterHookedMethod`中修改返回值,避免影响文件指针位置 ### 注意事项 - 需系统分区可写才能修改框架行为[^1] - 建议在模拟器或已root设备测试 - 过滤后可能导致依赖该行的应用异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值