android ro属性调试修改(mprop逆向)

     大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出现安装包异常。第二种由于一般的手机发布时ro.debuggable一般是0 也就是不允许调试,通过修改rom的办法在手机上比较麻烦,需要刷机等等,模拟器上一般是vmdk的虚拟机,也没法修改rom。这样我们就无法调试应用了,比如使用DDMS时,只能看到手机,看不到进程信息。

转:android ro.debuggable属性调试修改(mprop逆向)_第1张图片

 

        后来发现有人提供了一个软件叫做mprop,但是只有二进制的文件arm架构的,没有源码,一个问题是在有些手机上测试是无效的,第二个问题是在X86模拟器上调试就不可能了。所以尝试一下逆向mprop并且解决这个调试问题。

         打开mprop发现主要是附加了1号进程也就是init进程。通过对/dev/__properties__属性段执行修改来修改对应的数值。

转:android ro.debuggable属性调试修改(mprop逆向)_第2张图片

 

转:android ro.debuggable属性调试修改(mprop逆向)_第3张图片

 

针对于android4.4版本的x86模拟器。

我们进入源码中看看为何在init进程这里修改就可以了。在

system/core/init/property_service.c

system/core/init/init.c

Main执行时

property_init->init_property_area-> __system_property_area_init函数(位于bionic/libc/bionic/system_properties.c)->map_prop_area_rw  fd = 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(key, value);将对应的键值设置好。

在 property_set 函数中 ro.开头的函数只能设置一次。否则就返回失败。所以我们后续调用setprop就是无效的。否则将调用__system_property_update执行更新。因此我们可以模拟__system_property_find 得到prop_info结构

__system_property_update prop_info结构中的数据

(bionic/libc/bionic/system_properties.c)实现。

关键就是 这个结构。name中是ro.debuggable value中是0

 

1

2

3

4

5

6

struct prop_info 

{

unsigned volatile serial; 

char value[PROP_VALUE_MAX]; 

char name[0]; 

};

 

因此我们只要在 /dev/__properties__ 段中找到 对应的name然后向上移动PROP_VALUE_MAX(android4.4中是96)个字节。修改value为对应的值即可。我们dump可以看出来.

转:android ro.debuggable属性调试修改(mprop逆向)_第4张图片

剩下就是编码 主要是通过ptrace进入init然后修改memory具体可以下代码

 

 

后续的操作如下

编译modprop

 

 

 

Push到/data/local/tmp

修改可执行

 

查看当前值

执行修改

修改完毕\

转:android ro.debuggable属性调试修改(mprop逆向)_第5张图片

获取修改后的值

运行微信。可以调试了

转:android ro.debuggable属性调试修改(mprop逆向)_第6张图片

进程需要杀掉重启才行。

 

 

更多相关文章

  1. AIDL实现进程间通信
  2. Android进程的内存管理分析
  3. Android 图片缩放-Matrix
  4. 【Android开发高级系列】Android多进程专题
  5. Android中通过Messenger与Service实现进程间双向通信
  6. android进程在管理器中被杀死
  7. Android menu android:showAsAction 属性值详解
  8. Android 获取远程图片与本地图片缓存
  9. android 异步获取图片

随机推荐

  1. Android(安卓)实现联网——在线程中联网
  2. Android网络连接处理学习笔记
  3. Android多屏幕适配
  4. Android(安卓)SQLite Shell
  5. Android中文API(143) —— CountDownTimer
  6. Android中使用查找提示
  7. Android(安卓)Juint环境配置
  8. Android(安卓)adb 模拟滑动 按键 点击事
  9. Android(安卓)保存图片到相册无法显示的
  10. 如何通过代码更改ANDROID的UI布局