Android mprop逆向研究:调试与ro属性修改

需积分: 0 7 下载量 52 浏览量 更新于2024-08-04 收藏 234KB DOCX 举报
"深入理解Android系统中的ro属性调试及mprop工具逆向分析" 在Android系统中,调试应用程序通常需要开启调试模式。有两种常见的方法:一是通过修改apk的AndroidManifest.xml文件,将`android:debuggable="true"`设置在应用的配置中;二是修改系统的/default.prop文件,将`ro.debuggable`设置为1。然而,前者在面对加壳或安全验证的apk时可能无法正常工作,后者则需要对设备进行刷机操作,这对于普通用户和开发者来说并不方便。特别是在X86架构的模拟器上,直接修改ROM更是困难重重。 在这种情况下,mprop工具应运而生。mprop是一个用于动态修改Android系统ro属性的工具,它可以直接在运行时改变`ro.debuggable`的值,从而实现调试目的。然而,mprop仅提供了ARM架构的二进制文件,且在某些设备上可能不起作用,同时在X86模拟器上也无法使用。 为了应对这些问题,我们对mprop进行了逆向工程分析。逆向过程中发现,mprop主要通过附加到系统1号进程——init进程,来访问并修改`/dev/__properties__`属性段,从而实现对ro属性的修改。在Android 4.4的X86模拟器环境中,我们可以查看`system/core/init/property_service.c`和`system/core/init/init.c`这两个关键源码文件。 在`init`进程启动时,`property_init`函数会调用一系列过程,包括`init_property_area`和`__system_property_area_init`,这些函数位于`bionic/libc/bionic/system_properties.c`。`open(property_filename,O_RDWR|O_CREAT|O_NOFOLLOW|O_CLOEXEC|O_EXCL,0444)`函数被用来打开`/dev/__properties__`,随后`property_load_boot_defaults`加载了default.prop,并通过`load_properties`和`property_set`设置键值对。值得注意的是,在`property_set`函数中,以`ro.`开头的属性只能设置一次,后续尝试修改将失败。 因此,逆向mprop并理解其工作原理后,我们可以尝试找到一种方法,使得在X86模拟器上也能动态修改`ro.debuggable`。这可能涉及到对mprop的重新编译以支持X86架构,或者寻找其他绕过`property_set`限制的手段,例如在更底层的系统服务中注入代码来实现属性的动态修改。 了解Android系统ro属性的调试机制以及mprop工具的工作原理,对于开发者来说具有重要意义。这不仅可以帮助我们更灵活地调试应用,也为我们提供了深入理解Android内核机制的机会。在实际操作中,逆向工程和源码分析是解决问题的有效途径,尤其是在面临既有工具无法满足需求的情况下。