谈谈/system/xbin/su与JHACNBA13.0的root开关

来源:互联网 发布:南京财经大学网络 编辑:程序博客网 时间:2024/06/17 04:04

好文章先转后看:http://www.miui.com/thread-1700212-1-1.html

25.18 红米手机如何root

http://scz.617.cn/misc/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版中,有两个办法:

1) ro.build.version.incremental=4.2.1   // 满足"<num>.<num>.<num>"即可
2) ro.build.type=eng                    // 不是"user"即可,比如"userdebug"

这两种修改方案任选其一就可以了,两处一起改没必要,我个人建议改"type=eng"。

怎么改/system/build.prop呢?这变成鸡生蛋、蛋生鸡的问题了,目前看来比较好的
办法是:

1) 用"SP Flash Tool"线刷"CWM Recovery"
2) 进入"CWM Recovery",配合"adb shell"改/system/build.prop、/system/xbin/su

这种组合不需要降级安装老版本卡刷包,不需要林林总总的一键ROOT工具,程序员可
能比较喜欢。

本文有点标题党了,我是平生第一次折腾智能手机(SP),分享一下程序员视角下的瞎
折腾,边学边分享吧,希望有人喜欢。

0 0
原创粉丝点击