在学习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并重新刷到设备中。我测试使用的设备为Hornor8,具体的刷机包为

https://cn.club.vmall.com/thread-15621449-1-1-4007.html

依赖的工具:

Linux环境:

unpackbootimg 解包

mkbootimg        打包

clone  https://github.com/huaixzk/unpackbootimg 执行make得到以上两个命令

具体步骤如下:

sain@Linux ~/ftp $ mkdir boot2

. 解包boot.img
sain@Linux ~/ftp $ ./unpackbootimg -i boot.img -o boot2
BOARD_KERNEL_CMDLINE loglevel= page_tracker=on slub_min_objects= unmovable_isolate1=:192M,:224M,:256M androidboot.selinux=enforcing
BOARD_KERNEL_BASE
BOARD_NAME
BOARD_PAGE_SIZE
BOARD_HASH_TYPE unknown
BOARD_KERNEL_OFFSET
BOARD_RAMDISK_OFFSET 07b88000
BOARD_SECOND_OFFSET 00e88000
BOARD_TAGS_OFFSET
BOARD_OS_VERSION 7.0.
BOARD_OS_PATCH_LEVEL - . 继续解包boot.img-ramdisk.gz
sain@Linux ~/ftp $ cd boot2
sain@Linux ~/ftp/boot2 $ mkdir ramdisk
sain@Linux ~/ftp/boot2 $ cd ramdisk/
sain@Linux ~/ftp/boot2/ramdisk $ gzip -dc ../boot.img-ramdisk.gz | cpio -i
blocks
.
编辑 default.prop 并保存 . 重新生成boot.img-ramdisk.gz, 这里改了个名
cd ..
sain@Linux ~/ftp/boot2 $ /home/sain/aosp/a2h_dev_prd/out/host/linux-x86/bin/mkbootfs ramdisk | gzip > ramdisk-new.gz . 重新生成boot.img
cd ..
sain@Linux ~/ftp $ ./mkbootimg --kernel boot2/boot.img-zImage --ramdisk boot2/ramdisk-new.gz --cmdline "oglevel=4 page_tracker=on slub_min_objects=12 unmovable_isolate1=2:192M,3:224M,4:256M androidboot.selinux=permissive" --pagesize --base --kernel_offset --ramdisk_offset 07b88000 --second_offset 00e88000 --tags_offset --os_version 7.0. --os_patch_level - --output ../aosp/share/boot.img . 刷机
fastboot flash boot boot.img
fastboot reboot

default.prop需要修改两处

ro.secure=0
security.perf_harden=1
ro.adb.secure=1
ro.allow.mock.location=0
ro.debuggable=1

注意ro.adb.secure=1这里不要修改,保持默认, 因为我们并不是真正的userdebug模式

否则adb 认证谈框不出来, 就完全用不了adb

sudo adb root
error: device unauthorized.
This adbd's $ADB_VENDOR_KEYS is not set; try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

有机会再研究下如何root

hornor8改user模式为debug模式的更多相关文章

  1. Windows下Nexus 5 改user模式为debug模式

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52337241 在学习Android软件安全的过程中,经常要用到Android的动态调试 ...

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

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

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

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

  4. VS2013的Release模式 和 debug 模式

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

  5. 【C++】Debug模式和Release模式的区别

    VS中的程序有两种编译模式:Debug模式和Release模式. Debug通常称为调试版本,通过一系列编译选项的配合,编译结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能 ...

  6. 以Debug模式启动JBoss

    JBoss服务器的启动方法: 假设JBoss的安装目录为$JBOSS_HOME,Windows以及Linux环境下的Debug模式的启动方法分别为:Windows环境:找到Windows下的JBoss ...

  7. Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录

    项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...

  8. cocoapod引入FLEX,debug模式正常,Release报错library not found for -lXXX

    cocoapod引入FLEX,debug模式正常,Release报错library not found for -lXXX, 因为podfile是这么写的: pod 'FLEX', '~> 2. ...

  9. 引入 Tinker 之后如何在 Debug 模式下开启 Instant Run

    在<Tinker + Bugly + Jenkins 爬坑之路>一文中讲了在接入 Tinker 之后,Jenkins 中的一些坑,由此,热修复算告一段落,但是,在直接 Run 模式运行时, ...

随机推荐

  1. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 1、经常提及的问题

    Frequently Asked Questions Congratulations to be part of the first class of the Deep Learning Specia ...

  2. JavaScript中的异步操作

    什么是异步操作? 异步模式并不难理解,比如任务A.B.C,执行A之后执行B,但是B是一个耗时的工作,所以,把B放在任务队列中,去执行C,然后B的一些I/O等返回结果之后,再去执行B,这就是异步操作. ...

  3. Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架

    基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...

  4. artTemplate-优秀的前端模板引擎

    artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...

  5. 前端通信:ajax设计方案(三)--- 集成ajax上传技术

    在此之前让我感慨一下现在的前端开发的氛围.我遇到好多人,给我的观念都是,这个东西这个框架有了,那个东西那个框架做了,前端嘛,学几个框架,这个拼凑一下那个拼凑一下就好了.其实我想问,东西都框架做了,那你 ...

  6. docker 使用swarm overlay网络时,报“network xx not manually attachable”错误解决

    当使用swarm的overlay网络,在该网络中运行容器时报“network xx not manually attachable”的错误 docker network create -d overl ...

  7. python中不可变数据类型和可变数据类型

    在学习python过程中我们一定会遇到不可变数据类型和可变数据类型. 1.名词解释 以下所有的内容都是基于内存地址来说的. 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址 ...

  8. 分布式ID生成方法-趋势有序的全局唯一ID

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  9. 动态创建table表格页面出现undefined原因以及修改

    源代码: var html: if(lists) { html += '<a href="https://www.4001149114.com/NLJJ/member/sharecel ...

  10. 把AspDotNetCoreMvc程序运行在Docker上-part4:实现负载均衡

    在上一part<把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器>,我们利用MySql容器和Volume实现了真正意义上的数据存储.整个结构非常简 ...