安卓的开源使其具有很强的可定制性,对于用户来说很具有可玩性。玩机一般来说就是解锁BootLoader刷入第三方recovery,利用第三方recovery刷第三方ROM,刷supersu获取root权限,当然少不了鼎鼎大名的xposed框架……

但是很多厂商是锁定BootLoader且不提供官方解锁的,比如魅族、锤子、360……热门机型还好,或许有大神关注,破解BootLoader,从而刷入第三方recovery。如果使用了小众机型,或是官方对漏洞控制的很好,无法破解BootLoader,进而无法刷入第三方recovery呢?所以就出现了所谓的外挂recovery。

之所以称为外挂recovery,是因为我们并没有把一个recovery镜像(.img)刷入手机的recovery分区,而是利用安卓开机流程中会执行特定路径下的shell脚本,来执行自定义shell代码启动recovery。比如安卓4.4.4时的system/etc/,再如安卓5.0之后的system/su.d/(发现这一点其实是当时找关闭selinux方法时看的一些帖子)。

我手里用的是魅族的魅蓝note,因为一次系统升级时摔了手机一下,变砖了,无法进入recovery,只能进fastboot模式,可惜bootloader是锁定的。因为急需手机的数据,邮寄太慢,打车往返100多公里去售后刷机,刷机的人特多,从早上等到下午4点多,午饭都没吃,最后手机数据全清了。如果bootloader可以解锁,直接flash boot和recovery就不用清除手机数据。为此特别气愤,为什么官方不提供BootLoader解锁,甚至线刷包都刷不进去,需要加密狗。为了所谓的安全?后来在淘宝发现,解屏幕锁15块钱,线刷救砖30块钱左右,全部可远程操作,甚至很多手机维修点也提供服务……

所以,搞起了外挂recovery,现在把要点记录一下。

  1. 首先手机要能 root,最好是supersu授权;
  2. 编译机型的recovery,也可以解包同配置其他手机的recovery试试;
  3. 解包recovery得到ramdisk里的etc,res,sbin,twrps四个文件夹;
  4. 利用shell脚本或apk程序把这些目录拷贝到手机system分区,把启动recovery的shell脚本拷贝到system/su.d/;
  5. 开机时判断、拷贝etc,res,sbin,twrps到根目录并启动recovery

下面是我为魅蓝note做的一个外挂recovery,方法适用于安卓5.0以上版本已root的手机。首先编译了魅蓝note的twrp,再利用apk安装,apk提供“安装”,“重启”两个button,“安装”主要是文件拷贝,apk里assets目录下是recovery目录,recovery目录下有busybox、install-recovery.sh、recovery.img(实为zip),recovery.img里有etc,res,sbin(空目录),twrps四个目录,sbin目录打包成sbin.tar.gz(直接拷贝sbin目录可能因权限问题导致某些文件拷贝失败),三个shell脚本,“重启”执行重启手机并启动recovery,主要用到三个shell脚本。

  1. install-recovery.sh

#!/system/bin/sh

# recoverydir,apk程序会把assets/目录下的文件拷贝到recoverydir

# targetdir,这个脚本会把etc,res,sbin,twrps拷贝到targetdir

# busybox,busybox的路径

recoverydir=/data/data/com.meizu.recoveryinstaller/files/recovery

targetdir=/system/etc/recovery

busybox=$recoverydir/busybox

mount -o rw,remount /system

chmod 777 $busybox

if [ ! -f /system/xbin/busybox ];then

$busybox cp $recoverydir/busybox /system/xbin/busybox

chown 0.0 /system/xbin/busybox

chmod 777 /system/xbin/busybox

fi

if [ ! -e /system/xbin/unzip ]; then

chmod 777 /system/xbin/busybox

/system/xbin/busybox --install -s /system/xbin

fi

if [ -d $targetdir ];then

rm -rf $targetdir

fi

mkdir -p $targetdir

#解压recovery.img(实为zip)

unzip $recoverydir/recovery.img -d $targetdir

chmod -R 777 $targetdir

#解压sbin.tar.gz

tar xvzpf $targetdir/sbin.tar.gz -C $targetdir/sbin

rm -rf $targetdir/sbin.tar.gz

if [ ! -d /system/su.d ]; then

mkdir /system/su.d

chmod 777 /system/su.d

fi

cat /system/etc/recovery/start-recovery.sh > /system/su.d/start-recovery.sh

chmod 777 /system/su.d/start-recovery.sh

mount -o ro,remount /system

  2.reboot-recovery.sh

#!/system/bin/sh

if [ -d /cache/recovery ]; then

rm -rf /cache/recovery

mkdir /cache/recovery

chmod 755 /cache/recovery

else

mkdir /cache/recovery

fi

touch /cache/recovery/command

chmod 755 /cache/recovery/command

reboot

  3.start-recovery.sh

#!/system/bin/sh

#挂载可读写

mountr() {

mount -o remount,rw /

mount -o remount,rw /system

mount -o remount,rw /custom

mount -o remount,rw /data

mount -o remount,rw /cache

}

mountr

stop

kill -9 $!

#只有执行过reboot-recovery.sh之后-e /cache/recovery/command才为真

if [ -e /cache/recovery/command ];then

mountr

rm -rf /cache/keycache

rm -rf /cache/recovery/command

chmod -R 777 /system/etc/recovery

#拷贝etc,res,sbin,twrps到根目录

cp -rf /system/etc/recovery/etc  /

cp -rf /system/etc/recovery/sbin  /

cp -rf /system/etc/recovery/res  /

cp -rf /system/etc/recovery/twres  /

chmod -R 777 /sbin

chmod -R 777 /twres

chmod -R 777 /res

chmod -R 777 /etc

mkdir /tmp

chmod -R 777 /tmp

setenforce 0

mountr

#绑定/data/media/0 /sdcard

rm -rf /sdcard

mkdir /sdcard

mount -o remount,rw /sdcard

mount --bind /data/media/0 /sdcard

runcon u:r:recovery:s0

busybox killall cploadserver

/sbin/recovery

else

start

fi

记录-外挂recovery的制作(魅蓝note)的更多相关文章

  1. 魅族手机(魅蓝note)无法作为调试设备连接到mac问题的解决

    问题描述: OS X(Yosemite),ADB(1.0.32),Android Studio(1.0.1),魅蓝note手机(m1 note,Android 4.4.4,Flyme OS 4.2.0 ...

  2. 300元差价选谁好 魅蓝note对比魅蓝手机

    http://mobile.pconline.com.cn/608/6089437.html [PConline 对比评测]999元的魅蓝note和699元的魅蓝手机先后被发布,代表着魅族中低端手机已 ...

  3. 魅蓝Note有几种颜色 魅蓝Note哪个颜色好看

    http://www.pc841.com/shoujizhishi/39882.html http://news.mydrivers.com/1/359/359443.htm 魅族发布首款千元高性价比 ...

  4. 我是青年你是良品-魅蓝NOTE 2

    2" title="我是青年你是良品-魅蓝NOTE 2">   明天魅蓝即将迎来自己的新品发布会.选择儿童节的第二天后最喜爱的手机品牌.让其成为真正青年的良品. 在 ...

  5. 京东专业“卖”队友,魅族手环将亮相1206魅蓝note新品发布会

    京东一直是国内顶级的数码产品自营销售渠道,但是,正因为庞大的数据体系和平台特殊性,经常会帮我们发现一些“好玩的”保密性较高的东西,譬如价格.信息.谍照等.而在最新上线的京东超级品牌日活动页面上,专业“ ...

  6. Fakeapp2.2安装,使用简记--------------转载自iJessie

    原文:https://www.cnblogs.com/iJessie/p/8568377.html 1,硬件和操作系统,支持cuda的Nvidia显卡,8G及以上的内存,Windows10 x64(推 ...

  7. Dash文档制作教程

    前言 什么是Dash 面向程序员的文档库(Mac) 代码片段管理工具 这是强烈推荐给每天在各种API文档中摸爬滚打的程序员们的神器. 为什么要自己制作文档 官方的源中没有相关文档 文档在离线下体验更好 ...

  8. 如何用Delphi开发网游外挂

    1.动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标.键盘等,使游戏里的人物进行流动或者攻击,最早以前的“石器”外挂就是这种方式.2.本地修改式,这种外挂跟传统上的一些游戏修改器没有两样 ...

  9. 变身六次失去核心的小米Note还能火吗

    奥特曼变身有时间限制,因此我们总是希望它多变几次身,从而把小怪兽打得嗷嗷叫.但对于科技产品来说,不断推出"变身版",似乎总有江河日下.大势已去之感.三星形形色色的复仇者联盟S6版, ...

随机推荐

  1. BZOJ1195 [HNOI2006]最短母串 【状压dp】

    题目 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入格式 第一行是一个正整数n(n<=12),表示给定的字符串的 ...

  2. BZOJ3160 万径人踪灭 【fft + manacher】

    题解 此题略神QAQ orz po神牛 由题我们知道我们要求出: 回文子序列数 - 连续回文子串数 我们记为ans1和ans2 ans2可以用马拉车轻松解出,这里就不赘述了 问题是ans1 我们设\( ...

  3. 浅谈android反调试之 API判断

    反调试:利用Java层API来判断Android程序是否是处于被调试下. 1.直接调用系统的android.os.Debug.isDebuggerConnected()方法 我们进行动态调试的时候,其 ...

  4. 第一个 XMLHttpRequest 例子(API)

    [API] https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest [替代方案] 如果不想自己敲代码,可以直接访问以下URL测试 ...

  5. 【bzoj3098】Hash Killer II 生日悖论

    这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:给你一个长度为N的字符串S,求有多少个不同的长度为L的子串.子串的定义是S[l].S[l + 1].… S[r]这样连续的一段.两个字 ...

  6. FZOJ Problem 2110 Star

                                                                                                        ...

  7. 【POJ3498】March of the Penguins(最大流,裂点)

    题意:在靠近南极的某处,一些企鹅站在许多漂浮的冰块上.由于企鹅是群居动物,所以它们想要聚集到一起,在同一个冰块上.企鹅们不想把自己的身体弄湿,所以它们在冰块之间跳跃,但是它们的跳跃距离,有一个上限.  ...

  8. 转 PHP中exec、system等函数调用linux命令问题

    PHP中exec.system等函数调用linux命令问题 先小说两句:今天研究了下PHP调用LINUX命令的功能,一开始怎么做都调用不成功,试了好久才终于成功了,所以发出来分享一下.下面我将详细介绍 ...

  9. llinux 定时器 转载自 http://blog.chinaunix.net/uid-11848011-id-96374.html

    这篇文章主要记录我在试图解决如何尽可能精确地在某个特定的时间间隔执行某项具体任务时的思路历程,并在后期对相关的API进行的归纳和总结,以备参考. 问题引出 很多时候,我们会有类似“每隔多长时间执行某项 ...

  10. fork()函数的执行过程、孤儿进程和僵尸进程

    说起fork就不得不提COW(Copy On Write),就是“写时拷贝”.也就是当fork发生时,子进程根本不会去拷贝父进程的内存页面,而是与父进程共享.当子进程或父进程需要修改一个内存页面时,L ...