25.18 红米手机如何root
http://scz.617.cn/android/201404041813.txt
Q:
我是移动JHACNBA13.0,如何root?
A: 2014-04-04 18:13
该版本红米后台已经有/system/xbin/su,但权限是0644,没有x权限。想办法给su加x 权限,比如修改卡刷包的"META-INF\com\google\android\updater-script":
#set_perm(0, 0, 0644, "/system/xbin/su"); set_perm(0, 0, 06755, "/system/xbin/su");
该版本红米自带root开关:
安全中心->授权管理->允许应用获取ROOT权限
用的应该是/system/app/LBESEC_MIUI.apk。
但稳定版中自带root开关是灰的,不可选。用IDA反汇编官方卡刷包中的system\xbin\su, 在"Strings window"中看到一个有意思的提示:
"SU is disabled in release version"
查看交叉引用,对其附近的ARM汇编代码反汇编后,伪代码如下,我加了点注释:
/*
- 从/system/build.prop中读"ro.build.version.incremental" / property_get( "ro.build.version.incremental", &incremental, &property ); /
- 从/system/build.prop中读"ro.build.type" / property_get( "ro.build.type", &type, &property ); /
- 组织正则表达式的模式匹配串"[0-9]+.[0-9]+.[0-9]+" / regcomp( &preg, "[0-9]+.[0-9]+.[0-9]+", 5 ); /
- 进行模式匹配,返回0表示匹配,非0表示不匹配 / regret = regexec( &preg, &incremental, 0, 0, 0 ); /
- regcomp()分配了动态内存,这里释放它,后面用不上了。
/
regfree( &preg );
if ( regret && !strcmp( &type, "user" ) )
{
/
- 翻译成大白话,如果"ro.build.version.incremental"不是形如"数字.数字.数字"
- 并且"ro.build.type"等于"user"的话,/system/xbin/su认为自己处在release
- 版中,不让用! / _android_log_print( 6, 0, "SU is disabled in release version", buf_a ); memset( &buf_b, 0, 0x400 ); /
- 灰掉"安全中心->授权管理->允许应用获取ROOT权限" */ android::String8::String8( &buf_c, "com.lbe.security.miui.su" ); sprintf( &buf_b, "content://%s/disabled", buf_c ); ... }
注释把问题都说清楚了。为了让su认为自己不在release版中,有两个办法:
- ro.build.version.incremental=4.2.1 // 满足".."即可
- ro.build.type=eng // 不是"user"即可,比如"userdebug"
这两种修改方案任选其一就可以了,两处一起改没必要,我个人建议改"type=eng"。
怎么改/system/build.prop呢?这变成鸡生蛋、蛋生鸡的问题了,目前看来比较好的 办法是:
- 用"SP Flash Tool"线刷"CWM Recovery"
- 进入"CWM Recovery",配合"adb shell"改/system/build.prop、/system/xbin/su
这种组合不需要降级安装老版本卡刷包,不需要林林总总的一键ROOT工具,程序员可 能比较喜欢。
本文有点标题党了,我是平生第一次折腾智能手机(SP),分享一下程序员视角下的瞎 折腾,边学边分享吧,希望有人喜欢。