博客链接:http://blog.csdn.net/qq1084283172/article/details/52337241

在学习Android软件安全的过程中,经常要用到Android的动态调试。但是呢,一般的Android应用在发布的时候都是发布版的不能直接被调试,为了能使Android应用能够支持调试就需要对Android应用进行解包以及打包加android:debuggable="true"属性处理,比较烦的是有时候一些Android应用加了对抗的处理,并不能顺利打包处理,这就纠结了。

@根据android的官方文档,如果要调试一个App里面的dex代码,必须满足以下两个条件中的任何一个:
1.App的AndroidManifest.xm中Application标签必选包含属性android:debuggable="true";
2./default.prop中ro.debuggable的值为1。

由于正常的软件发布时都不会把android:debuggable设置为true,所以要达成条件1)需要对app进行重新打包,这不仅每次分析一个App都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到,所以想办法满足第2)个条件是个一劳永逸的办法,我实际使用的方法就是满足第二个条件。由于default.prop是保存在boot.img的ramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。我测试使用的设备为Nexus
5,修改步骤如下:

a)  从Google官方网站下载到boot.img,
b)  使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop
c)  修改default.prop
d)  把修改后的文件重新打包成boot_new.img
e)  使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)

根据谷歌Andorid的官方文档,既然条件1有时候无法满足,那么我们就可以从满足条件2入手,让Android系统直接运行在debug模式下,这样运行在该系统环境下的Android应用都能够支持动态调试了。一般手机的Android 系统是运行在user模式下的,不支持直接动态调试,因此需要对Android系统的 boot.img文件进行修改,前面的博客中已经记录了一篇别人提供的修改方法,一直没时间尝试,下面我就按照这个方法操作一遍,顺便做个笔记,方便别人也方便我自己(http://blog.csdn.net/qq1084283172/article/details/47045385)。

下面就在Windows平台下使用工具bootimg.exe对Android系统的boot.img文件进行解包和打包操作,将Nexus 5手机 改user模式为debug模式,此操作涉及到的Nexus 5系统版本为Android4.4.4,下载地址为:https://dl.google.com/dl/android/aosp/hammerhead-ktu84p-factory-35ea0277.tgz

解包和打包boot.img文件使用的工具是bootimg.exe,该工具最新的版本支持Android 2.3~5.0的版本,具体的功能如下:

解包命令:bootimg.exe --unpack-bootimg      

打包命令:bootimg.exe --repack-bootimg   

recovery/boot文件放到bootimg.exe同一级目录即可,且bootimg.exe存放路径不要存在中文。

更多命令:

--add-head
--cml
--cpio-list
--czlib
--dml
--dzlib
--remove-head
--repack-565
--repack-bootimg
--repack-ramdisk
--repack-rle
--repack-zte-bin
--rml
--to-ext4
--to-img
--uml
--unpack-565
--unpack-bootimg
--unpack-qsb
--unpack-ramdisk
--unpack-rle
--unpack-updata
--unpack-yafffs
--unpack-yaffs
--unpack-yaffs2
--unpack-zte-bin

工具下载链接: https://github.com/cofface/android_bootimg

上面这段文字来自看雪http://bbs.pediy.com/showthread.php?t=198328,感谢工具的作者cofface,为我们提供了这么好的工具。

1.将Nexus 5的谷歌官方Android 4.4.4的系统镜像进行解压,然后找文件image-hammerhead-ktu84p.zip,对其进行解压找到boot.img文件。将下载的bootimg.exe文件拷贝到boot.img文件所在的目录。在Windows的cmd命令环境下执行:bootimg.exe
–unpack-bootimg  命令对boot.img文件进行解压处理,如下图:

2.在cmd环境下执行:bootimg.exe --unpack-bootimg  命令成功以后,单独找到 initrd 目录,进入initrd 目录找到 default.prop文件 以文本方式打开,修改
default.prop文件中的 ro.debuggable=0  这一行为 ro.debuggable=1 ,然后保存,如下图:

3.修改boot.img中 default.prop文件 成功以后,对boot.img进行打包处理,在cmd环境下接着执行命令:bootimg.exe
--repack-bootimg 对boot.img文件进行打包,如下图:

4.对boot.img文件的修改已经完成,后面的步骤就是将boot-old.img文件、bootimg.exe文件暂时剪切到别的目录以防修改boot.img文件失败用以恢复,将boot-new.img文件改名为boot.img。关闭Nexus
5手机然后重启,同时按下 音量减+电源键 让Nexus 5手机进入Fastboot Mode模式,然后使用下面的刷机脚本 flash-all_no_data.bat 将修改的boot.img文件刷入到Nexus
5手机上。刷机脚本flash-all_no_data.bat 的文件内容为:

PATH=%PATH%;"%SYSTEMROOT%\System32"
fastboot flash bootloader bootloader-hammerhead-hhz11k.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash radio radio-hammerhead-m8974a-2.0.50.1.16.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul fastboot flash recovery recovery.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash boot boot.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash system system.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash cache cache.img fastboot flash userdata userdata.img echo 刷机成功,按任意键重启手机...
pause >nul
fastboot reboot
exit



5.OK,从下面的观察发现将Nexus 5手机从user模式改为debug模式是成功的。

6.进步测试Nexus 5的Android 4.4.4的系统是否修改user模式为debug模式成功,使用命令:adb
shell am start -D -n  <包名>/<Activity名>  以调试模式启动正常的Android应用(非debug模式发布的android应用),以App应用com.saurik.substrate为例,如下图,很明显修改成功。

windows下解包/打包boot/recovery.img的工具bootimg.exe(附带刷机脚本 flash-all_no_data.bat ),且支持自动解包/打包dt.img的下载地址:http://download.csdn.net/detail/qq1084283172/9614884

感谢链接

http://bbs.pediy.com/showthread.php?t=198328

http://bbs.pediy.com/showthread.php?t=197334

http://bbs.pediy.com/showthread.php?p=1291716

http://blog.csdn.net/qq1084283172/article/details/52334452

http://blog.csdn.net/qq1084283172/article/details/47045385

Windows下Nexus 5 改user模式为debug模式的更多相关文章

  1. Ubuntu下修改Nexus 5的boot.img--改user模式为debug模式

    博客地址:http://blog.csdn.net/qq1084283172/article/details/52422205 在学习Android逆向的时候,总会用到Android的调试模式.一般情 ...

  2. redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(多机)

    redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(多机) 一.概述 此教程介绍如何在windows系统中多个服务器之间,布置redis哨兵模式(主从复制),同时要以后台服务的模式运行 ...

  3. redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机)

    redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机) 一.概述 此教程介绍如何在windows系统中单机布置redis哨兵模式(主从复制),同时要以后台服务的模式运行.布置以脚本 ...

  4. VS2013的Release模式 和 debug 模式

    在有的情况下,我们可能不能直接利用Debug模式进行程序调试,那么如何在Release模式下进行程序调试呢? 一.将项目属性设置为Release,生成--->配置管理器: 二.按Alt+F7,弹 ...

  5. Windows下Nexus 5的Android 5.0以上版本官方ROM的刷机教程

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52334452 折腾Android逆向的时候,经常需要给Nexus 5刷机.最近给Nex ...

  6. 手机改 user模式为debug模式

    logcat 是Android中一个命令行工具,可用于监控手机应用程序的log信息.网上相关的教学很多,这里只想把自己折腾 2 部手机(一个是三星S4 I9500 港水,Android 5.01,一个 ...

  7. 使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat 问题解决

    这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文件错误,eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法把brea ...

  8. Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义

    回到目录 关于redis-sentinel出现的原因 Redis集群的主从模式有个最大的弊端,就是当主master挂了之前,它的slave从服务器无法提升为主,而在redis-sentinel出现之后 ...

  9. 【原】Windows下Nexus搭建Maven私服

    一.Maven安装 详见Java开发环境搭建 二.Nexus安装 2.1.下载 地址:http://www.sonatype.org/nexus/go/ 选择OSS(ZIP)版本 2.2.安装 将安装 ...

随机推荐

  1. 干货满满-原来这才是hooks-React Hooks使用心得

    序言 ---最后有招聘信息哦-React是一个库,它不是一个框架.用于构建用户界面的Javascript库.这里大家需要认识这一点.react的核心在于它仅仅是考虑了如何将dom节点更快更好更合适的渲 ...

  2. Mock 框架 Moq 的使用

    Mock 框架 Moq 的使用 Intro Moq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖 ...

  3. Apache配置 11. 访问控制-user_agent

    (1)介绍 user_agent是指用户浏览器端的信息.比如你是用IE的还是Firefox浏览器的.有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开PC常规页面. ( ...

  4. pytest+jenkins+allure 生成测试报告发送邮件

    前言第一部分:Pycharm for Gitee1. pycharm安装gitee插件2. gitee关联本地Git快速设置- 如果你知道该怎么操作,直接使用下面的地址简易的命令行入门教程:3. Gi ...

  5. Java 树结构实际应用 一(堆排序2秒排完800w数据)

    堆排序 1 堆排序基本介绍 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复 杂度均为 O(nlogn),它也是不稳定排序. 2) 堆是具有以下性 ...

  6. switch case语句,switch case用法详解

    switch 是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch 是多分支选择语句.说得通俗点,多分支就是多个 if. 从功能上说,sw ...

  7. java面试-Java内存模型(JMM)

    p.p1 { margin: 0; font: 15px Helvetica } 一.并发编程两个关键问题 线程之间如何通信.同步.java并发采用的是共享内存模型 二.JMM内存模型的抽象结构 描述 ...

  8. 201871030107-常雅伦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming).2.掌握Github协作开发程 ...

  9. OO第一单元作业——魔幻求导

    简介 本单元作业分为三次 第一次作业:需要完成的任务为简单多项式导函数的求解. 第二次作业:需要完成的任务为包含简单幂函数和简单正余弦函数的导函数的求解. 第三次作业:需要完成的任务为包含简单幂函数和 ...

  10. Java(171-194)【接口、多态】

    1.接口概述与生活举例 接口就是一种公共的规范标准 只要符合规范标准,就可以大家通用 2.接口的定义基本格式  public interface 接口名称 {       // 抽象方法      / ...