一、破解原理

Android手机获得Root权限,其实就是让/system和/data分区获得读写的权限。这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限。

众所周知,市面上绝大部分的Android手机文件系统有三个分区,分别是/,/system,/data。根分区(/)是打包为ramdisk.img后,再与kernel的zImage打包为boot.img。boot.img在EMMC/NAND中以RAW DATA的形式存在,且除使用烧写工具外,无法读写。正因如此,根分区(/)在每次开机时都会从存储器中加载到RAM, 所以根分区(/)是难以不刷机破解的。

如何破解呢? 我们推荐的办法是:获得boot.img,解压boot.img得到ramdisk.img, 再由ramdisk.img解压得到root目录(/),修改其中的init.rc文件,再打包,最终得到新的boot.img。最后利用烧写工具将boot.img烧写到手机即可。

注: 现在的手机厂商都有提供升级软件包,获得boot.img和scatter file不是一件难事,。加之所有MTK手机厂商都采用flash tools工具。此方法具有较高的实战性。

二、必备工具

1. linux运行环境。所有破解操作都是在linux下完成的。

2. split_bootimg.pl。 该工具用来分解boot.img

3. mkbootfs。 用来生成bootfs。

4. minigzip。 轻量级ZIP压缩工具。

5. mkimage。用来生成带标识头(512字节)的工具,有些厂家不使用该工具,如高通。

6. mkbootimg。用来生成boot.img的工具。

三、破解步骤

1.获得boot.img.

2. 执行$./split_bootimg.plboot.img, 将boot.img解压为zimage和ramdisk.img, 名字分别为boot.img-kernel, boot.img-ramdisk.gz。请记住这里的Board name,后面打包的时候需要用到。

3. 执行$dd if=boot.img-ramdisk.gz skip=1 bs=512of=ramdisk.gz, 该命令从uRamdisk中获得ramdisk镜像。

4. $mkdir root, $cd root, $gzip -dc ../*-ramdisk.gz| cpio –i, 这三条命令最终将ramdisk.img.gz解压到 root目录下。

5. 修改root目录下/system,/data分区的权限。 权限破解都在这一步。

6. $ ./mkbootfsroot | ./minigzip >new_ramdisk.img

7. $./mkimage new_ramdisk.img ROOTFS>u_new_ramdisk.img

8. $./mkbootimg --kernel boot.img-kernel --ramdisku_new_ramdisk.img --board [Board name]--output new_boot.img。注Board name见第2步描述。

9. 烧写boot.img到手机。

10. ok!

另一种root方法,Android boot.img破解的更多相关文章

  1. Android中定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runn ...

  2. Android中定时器的3种实现方法

    原文:http://blog.csdn.net/wulianghuan/article/details/8507221 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与 ...

  3. 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)

    安卓(android)建立项目时失败.出现AndroidManifest.xml file missing几种解决方法?(总结中) Eclipse新建项目.遇到这种问题.注意例如以下: 1.文件名称最 ...

  4. 【转】Android中定时器的3种实现方法

    原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的s ...

  5. 在Android开发中,定时器一般有以下3种实现方法

    在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...

  6. android studio gradle 两种更新方法更新

    android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...

  7. Android手机插上usb能充电但不能识别的一种解决方法

    设备要求 已root的Android手机. 背景 这个方法是意外发现的,最初同事有一台测试机插上usb能充电但不能识别,他让我帮他看看怎么回事,于是我就按照常规套路,开发者模式.usb调试.MTP什么 ...

  8. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  9. Android开发 ---Button的OnClickListener的三种实现方法

    button的OnClickListener的三种实现方法 onclick事件的定义方法,分为三种,分别为 1.在xml中进行指定方法: 2.在Actitivy中new出一个OnClickListen ...

随机推荐

  1. Linux系统编程(30)—— socket编程之TCP/IP协议

    在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计算机使用者意识到,计算机 ...

  2. 谈B2B电商平台与大数据

    数据为王,服务为本——谈B2B电商平台与大数据 2013-06-27 11:10:41 作者:B2B行业资讯 标签:                             大数据           ...

  3. 深入理解linux网络技术内幕读书笔记(五)--网络设备初始化

    Table of Contents 1 简介 2 系统初始化概论 2.1 引导期间选项 2.2 中断和定时器 2.3 初始化函数 3 设备注册和初始化 3.1 硬件初始化 3.2 软件初始化 3.3 ...

  4. HBase的rowkey的设计原则

    HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定 ...

  5. C#调用PowerShell脚本

    今天通过一个小例子,学习了C#如何调用PowerShell脚本文件的Function以及传参. private bool CallPowershell(string outputFile) { str ...

  6. js时间基本操作

    js 获取前一天的时 var today=new Date(); var yesterday_milliseconds=today.getTime()-1000*60*60*24; var yeste ...

  7. (转)Linux整合apache和tomcat构建Web服务器

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wenzhongxiang.blog.51cto.com/6370734/1285 ...

  8. JavaScript学习笔记(高级部分—01)

    JavaScript的核心ECMAScript描述了该语言的语法和基本对象:DOM描述了处理网页内容的方法和接口:BOM描述了与浏览器进行交互的方法和接口. 简单说,ECMAScript描述了以下内容 ...

  9. 怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

    怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repa ...

  10. gcc和g++编译c或者c++文件碰到的问题

    gcc和g++都是GNU(组织)的一个编译器.        误区一:gcc只能编译c代码,g++只能编译c++代码      两者都可以,但是请注意:      1.后缀为.c的,gcc把它当作是C ...