首页
论坛
专栏
课程

[原创]修改Nexus5的boot.img - 打开系统调试

不歪
2
2015-1-28 19:17 50686


介绍
当打开Android系统调试标志时,手机内的APP都可以被调试,调试的是dex内的Java代码。

打开系统调试标志的好处是:当调试APP时,不需要在APP的AndroidManifest.xml文件中添加android:debuggable="true",从而省了对APP重打包的过程。

修改boot.img本以为是很简单的事情:解包-修改-打包-刷入-完事儿。可是实践中把新的boot.img刷入后,手机一直启动不起来。甚至解包后直接打包,然后刷入手机,手机依旧起不来。经过摸索,现在成功的将修改后的boot.img刷入手机并且手机运行良好,所以总结了这篇文章。

不直接修改手机里的default.prop,是因为当手机重启后这个文件就会复原。

所有需要的工具见附件,其中mkbootimg和unpackbootimg是基于源码编译的,网上下载下来的不靠谱。

所有操作基于linux x64系统。

-------------------------------------------------------------------

步骤:
一、下载“Google Nexus 5 谷歌最新官方原厂安卓4.4.4固件”,从这个ROM中提取出boot.img文件。

二、boot.img解包
运行下面的命令将会对boot.img解包,得到boot.img-kernel和boot.img-ramdisk.gz两个文件:
split-bootimg.pl boot.img

三、处理boot.img-ramdisk.gz
运行下面的命令,对boot.img-ramdisk.gz进行解压:
mkdir ramdisk
cd ramdisk
gzip -dc ../boot.img-ramdisk.gz | cpio -i

四、修改default.prop,打开系统调试标志
找到解压出来的default.prop文件,将其中的ro.debuggable=0修改为ro.debuggable=1

五、ramdisk目录打包
返回ramdisk的上层目录,输入命令:
mkbootfs ./ramdisk | gzip > ramdisk.img

六、打包出新的boot.img
命令:
mkbootimg --base 0x00000000 --ramdisk_offset 0x02900000 --second_offset 0x00F00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1 earlyprintk' --kernel boot.img-kernel --ramdisk ramdisk.img -o newboot.img

七、将新的boot.img刷入手机
这时,在windows下还是linux下就无所谓了。将手机连上电脑输入下面的命令,重启手机进入fastboot:
adb reboot bootloader
当重启手机后,将新的boot.img刷入手机:
fastboot flash boot newboot.img
如果出现类似下图的输出,就说明刷入成功了:


刷入成功并不代表你的手机可以正常使用~~不过只要严格按照上面的方法,在Nexus5这个手机下还是没有问题的。现在输入下面的命令重启手机吧:
fastboot reboot

八、系统中的APP都可以调试了!
APP调试命令:adb shell am start -D -n <包名>/<Activity名>

我的eclipse的DDMS视图:


-------------------------------------------------------------------

后记:
如果手机刷成砖怎么办?
我的Nexus5本身就是“Google Nexus 5 谷歌最新官方原厂安卓4.4.4”,所以我在手机因为刷boot.img而无法启动的时候,直接进入fastboot,然后把官方的boot.img重新刷到手机里面,然后砖就满血满状态复活了。

手动进入fastboot模式(用于变成砖以后使用):
同时按【音量下键+电源键】。

工具备注:
mkbootimg和unpackbootimg可能只能用在linux x86的系统上,那我的linux x64怎么能使用这两个工具哪?因为我的linux x64系统下载了支持x86程序运行的库。




[推荐]看雪企服平台,提供APP等级保护加固等安全服务!

上传的附件:
最新回复 (43)
我是土匪 4 2015-1-28 19:23
2

0

赞一个,我用的S3,自己编译的源码。
JoyFei 2 2015-1-28 19:45
3

0

好文,很详细!
Claud 6 2015-1-29 00:39
4

0

建议改一下,说明mkbootimg的参数由前面命令的输出决定,这样别的机型也大都可以用了。
aihacker 2015-1-29 09:13
5

0

谢谢不歪,来学习一下
熊猫正正 9 2015-1-29 09:50
6

0

谢谢分享~~
JackJoker 2015-1-29 11:02
7

0

多谢分享,前来学习下。
火翼[CCG] 6 2015-1-29 13:28
8

0

帮顶,个人觉的abootimg用起来更简单
wodexinren 2015-1-29 13:58
9

0

马克,学习一下
walkersky 2015-1-30 17:57
10

0

貌似Nexus Root Toolkit工具也可以实现。
高军 2015-2-1 22:06
11

0

好文 ,学习了
cunzhangok 2015-2-3 13:57
12

0

我在mac下执行 ./mkbootfs: cannot execute binary file
我是64位的,麻烦大侠能编一个 64的让使用吗?
学编程 1 2015-2-3 14:39
13

0

当打开Android系统调试标志时,手机内的APP都可以被调试,调试的是dex内的Java代码。

这个android:debuggable="true",只是在DDMS能看到端口吧。
要是apktool d 没有 -d ,smali能直接调试?我用netbeans试过是不行的。
Zeham 2015-2-3 15:48
14

0

自己编译CM的吗?
不歪 2 2015-2-3 16:40
15

0

调试的是dex内的Java代码。
eclipse里面的DDMS可以看到端口。
无源码调试dex我用的是idea,具体可以网上搜一下。
学编程 1 2015-2-3 17:47
16

0

打开系统调试标志的好处是:当调试APP时,不需要在APP的AndroidManifest.xml文件中添加android:debuggable="true",从而省了对APP重打包的过程

idea相关文章
http://bbs.pediy.com/showthread.php?p=1338639&mode=threaded

apktool+idea
正菜来了,apktool 2.0bete9版本推出了-d选项,专门用来重打包apk进行单步调试的,给力!apktool+idea无源码debug apk step by step简直不要太好用,这也是我跟小波请教之后才弄好的,这个选项也是小波等人建议apktool作者这样做的,不禁感叹一句,波神你为何这么屌!

仍然 是要借助apktool  d -d 与apktool b -d .
这种刷包,针对资源出错的apk有用,要是连smali都出错,估计没办法吧。
我是土匪 4 2015-2-4 14:12
17

0

是自己编译的。
OnlyEnd 2015-2-4 15:13
18

0

不歪老师好!
lcweik 1 2015-2-14 11:13
19

0

很不错的东西
ydyyes 2015-2-14 21:05
20

0

mark
chitcrazy 2015-4-3 10:15
21

0

不歪大神,我在尝试这种刷机方式,到最后一步fastboot flash boot newboot.img的时候,一直提示wait for devices,这是为什么呀
ChungW 2015-4-11 02:06
22

0

有先进入到FASTBOOT模式吗? (adb reboot bootloader)
heartbeast 2015-4-12 21:18
23

0

好东西!
chitcrazy 2015-4-19 22:14
24

0

已经成功了,谢谢
gestic 2015-4-23 14:09
25

0

nexus5 自己编译的系统,boot.img里面android:debuggable默认就是true
androidcai 2015-4-23 17:07
26

0

请问下Nexus 6可以用这样的办法么??
冰冻冷咖啡 2015-4-24 18:54
27

0

可以的 :)
冰冻冷咖啡 2015-5-25 12:33
28

0

可能因为你编译的是eng啊。。。
熟如陌路 2015-11-16 10:12
29

0

谁共享个rom得了。。。这破电脑再装个Linux就真卡死了
LShang 2016-1-12 11:18
30

0

感谢楼主分享经验,按照楼主的办法已经成功开启系统调试。
了log 2016-3-9 21:11
31

0

多谢分享,前来学习下。
隔壁雷哥 1 2016-11-26 12:30
32

0

楼主必须是64位么
ggjm 2016-12-13 20:27
33

0

楼主能不能说明下“六、打包出新的boot.img命令:”中各个参数的含义,万分感激。
ggjm 2016-12-13 22:33
34

0

求教各位大神,为什么执行 ./tools/unpackbootimg -i boot.img 命令得到的各种结果参数信息中没有BOARD_SECOND_OFFSET 00f00000。我用的是Nexus 5 5.1。
majestyhao 2017-3-10 12:06
35

0

亲测成功!
聖blue 2017-3-19 02:56
36

0

学习下!!!!!!!
naodandan 2017-7-4 18:23
37

0

看起来不错,来试试
vincent汪 2017-7-7 19:30
38

0

我到第六步的mkbootimg一直报格式不对Exec  format  error
vincent汪 2017-7-10 10:49
39

0

在github上从新下了个mkbootimg,刷入成功,感谢大神的教程
一xOO 2017-12-26 18:22
40

0

我试试,大牛厉害
skyxx 2017-12-27 19:21
41

0

好思路
roysue 3 2017-12-29 09:51
42

0

Xposed插件Xinstaller,打开“专家模式”和“调试应用”,就OK了,DDMS可以看到进程,也可以真机连上调试。
ltcoming 2018-4-10 15:26
43

0

Xposed插件  BDOpener,https://security.tencent.com/index.php/opensource/detail/17,安卓7.0可用。Xinstaller  在7.0上好像用不了
小调调 2018-4-10 16:50
44

0

我试成功了  ZUK  2的
返回