root技术背后android手机内核提取及逆向分析

简介:

root技术背后android手机内核提取及逆向分析

 

 

 

安卓ROOT技术背景:

     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烧写到手机即可.(具体可参考AOSP/mkbootimg)

浅析boot分区结构

root技术背后android手机内核提取及逆向分析-技术-阿里聚安全
root技术背后android手机内核提取及逆向分析-手机-阿里聚安全

具体分析:

一. 提取kernel文件

(1)boot在哪里?通过下载官方的rom包,解压缩后可以看到里面的boot.img文件然后分解
关于rom包,简单介绍下里面的文件:
boot.img Linux内核和基本文件系统的内核包
system.img 系统的/system目录
recovery.img 系统恢复程序所用的镜像
userdata.img 系统的/data目录
/data/app 用户应用程序
/system/app 系统应用
/system/fonts 字体
/system/media 开关机动画
/system/media/audio 其他音频,闹铃,提示音等
META-INF 刷机脚本信息和签名
/system/etc 系统配置文件夹,恢复出厂设置后都从这里和build.prop调用配置来覆盖出错的配置,里面init.d文件夹可以放入脚本,脚本名字前加数字表示优先级
build.prop 手机信息
(2.1)boot在哪里?真机中提取(这里以Samsung Galaxy S4 为例)
adb shell 进入真机, ls -l /dev/block/platform/msm_sdcc.1/by-name
msm 代表高通的芯片
这个msm_sdcc.1是外接的SD卡挂载的目录,by-name指的是这个sd卡分区的名称

root技术背后android手机内核提取及逆向分析-android-阿里聚安全
现在可以通过dd命令将boot.img提取出来
dd if=/dev/block/mmcblk0p20 of=/sdcard/boot.img
root技术背后android手机内核提取及逆向分析-技术-阿里聚安全
root技术背后android手机内核提取及逆向分析-手机-阿里聚安全
root技术背后android手机内核提取及逆向分析-android-阿里聚安全
(2.2)boot在哪里?真机中提取(这里以Lenovo A300t为例) 另一种查找boot.img的方法
首先介绍下手机分区信息:
主要有mtd分区和emmc分区
一般刷机包签名文件夹里的刷机脚本那里有updater-script文件.
例如:
format("ext4", "EMMC", "/dev/block/platform/xxxx", "0", "/system")是EMMC分区的,
format("yaffs2", "MTD","/dev/block/platform/xxxx", "0", "/system")是MTD分区的
MTD是用于访问memory设备(ROM、flash)的Linux的子系统.MTD的主要目的是为了使新的memory设备的驱动更加简单
EMMC 结构由一个嵌入式存储解决方案组成,带有MMC (多媒体卡)接口、快闪存储器设备及主控制器—— 所有都在一个小型的BGA 封装.接口速度高达每秒52MB,EMMC具有快速、可升级的性能

cat /proc/mtd

root技术背后android手机内核提取及逆向分析-技术-阿里聚安全

可以通过同样的方式,使用dd命令,将boot.img文件提取出来.
之后我们可以通过adb pull的方式把从真机中提取的boot.img文件提取到本地.之后用split_boogimg.pl 将提取的boot.img分解出来,可以得到boot.img-kernel
root技术背后android手机内核提取及逆向分析-手机-阿里聚安全

二. 逆向分析kernel文件:

       一般来说,这个kernel内核文件都是一个gzip的压缩格式,偶尔也会有其他的压缩算法.比如三星S5内核文件的压缩算法是lzop
为什么是这样的情况呢?简要说下:

Kernel被载入内存后是以压缩的状态存放在磁盘之上的,他头上的一段代码就是为了初始化并且解压缩的一段代码.这段代码把自身压缩的一部分代码解压出来.放到真正内核所在的位置上.所以他所用的压缩算法要从他头上那段来指定的.所以如果今后厂商使用一些自己的压缩算法,那么需要更多逆向分析的.
root技术背后android手机内核提取及逆向分析-android-阿里聚安全 这样我们可以通过一个解压缩的脚本,解压出真正的内核文件.一个二进制文件zImage.

#!/bin/bash
pos=`grep -P -a -b -m 1 --only-matching '\x1F\x8B\x08' zImage | cut -f 1 -d :`
echo "Extracting gzip'd kernel image from file: zImage (start = $pos)"

if [ ! -z $pos ]; then
echo "Dumping compressed image"
dd if=zImage of=zImage_unpacked.gz bs=1 skip=$pos 2>/dev/null >/dev/null
echo "Unzipping compressed image"
gunzip -qf zImage_unpacked.gz
fi
 

现在可以将它导入到IDA中分析,但是导入IDA后发现效果很不理想

root技术背后android手机内核提取及逆向分析-手机-阿里聚安全

       这是因为我们需要符号表.但是android的linux内核是一个平面结构,它没有符号表.如果大家编译过linux内核可以发现编译好的zImage被打包到boot.img文件中去,下面有个巨大的vmlinux,它放到gdb里面去调试可以看到完整的符号表和调试信息.刷入手机的版本是没有的.
但是在/proc/kallsyms可以提供所有的kernel symbol
cat /proc/kallsyms 会发现地址都是0
root技术背后android手机内核提取及逆向分析-android-阿里聚安全
为什么地址都是0呢?
因为有一个patch 在/proc/sys/kernel/kptr_restrict默认为1,就隐藏了symbol
只要我们将其置0就可以正常打印
root技术背后android手机内核提取及逆向分析-技术-阿里聚安全
如果我们之前在刷机的过程中放进去一个su授权文件,那么我们就可以

echo 0 > /proc/sys/kernel/kptr_restrict
cat /proc/kallsyms > /data/local/tmp/syms.txt


root技术背后android手机内核提取及逆向分析-手机-阿里聚安全
但是我们目的是为了root,这里如果没有su文件呢?

      我们还有其他的方法.kallsyms既然可以打印symbol,那么说明symbol肯定在内核之中的.它就在__ksymtab里面.我们肯定可以知道一些常见的内核函数,比如kallsyms_lookup_name.我们可以在这个内核的二进制文件中找它的字符串.找到它的相对位置后,然后拿它的地址去搜索

root技术背后android手机内核提取及逆向分析-android-阿里聚安全

我们可以搜到一个结构

root技术背后android手机内核提取及逆向分析-技术-阿里聚安全

从0xC0008000开始暴力搜索连续若干个具有上面的特征的内存,就可以找到内核的导出符号表

有了符号地址后,手动在ida中添加

root技术背后android手机内核提取及逆向分析-手机-阿里聚安全

 

 

 

 

本文来自“阿里聚安全”,发表于2015年02月12日 10:21.

相关文章
|
9天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
12天前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
|
15天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
19天前
|
开发工具 Android开发 iOS开发
掌握安卓与iOS应用开发:关键技术与未来展望
本文深入探讨了安卓和iOS平台下的应用开发技术,重点比较了两大平台的架构、开发工具和市场策略。通过分析最新的技术趋势和开发者社区的反馈,文章为读者提供了一个全面的对比视角,旨在帮助开发者做出更明智的平台选择和开发决策。
|
13天前
|
安全 Java Android开发
掌握安卓与iOS应用开发中的关键技术
本文深入探讨了安卓和iOS平台上应用开发的关键性技术,包括平台特性、开发工具选择、性能优化技巧及跨平台开发的可行性分析。通过对比两种平台的开发环境与实践案例,旨在为开发者提供全面的视角以理解和把握移动应用开发的核心技术。无论是安卓的Java与Kotlin之争,还是iOS的Swift语言革命,本文都将一一解析其优势与应用场景,帮助开发者在技术选型上有更明智的决策。此外,文章还将触及到当前流行的跨平台框架如React Native和Flutter,评估它们在项目实施中的实用性和限制,为有意进行多平台同步开发的团队提供参考。通过对这些关键技术的梳理,本文期望能够启发开发者深化对移动平台开发的理解,并
|
17天前
|
人工智能 vr&ar Android开发
探索安卓与iOS的无限可能:移动操作系统的技术革新与未来展望
本文旨在探讨安卓和iOS这两大主流移动操作系统在技术上的创新与突破,以及它们如何塑造我们的数字生活。通过深入分析两者的最新进展、面临的挑战以及未来的发展趋势,文章揭示了移动操作系统在推动科技进步和满足用户需求方面的关键作用。我们将从技术角度出发,解读安卓的开放性与iOS的封闭性如何影响应用生态和用户体验,并探讨这些差异背后的设计理念和商业考量。同时,我们还将关注两大系统在安全性、隐私保护、人工智能集成等方面的最新动态,以及它们如何应对日益增长的网络安全威胁和用户对隐私保护的需求。此外,文章还将展望未来移动操作系统的发展,分析5G、物联网等新兴技术如何为安卓和iOS带来新的机遇和挑战,以及这两大
40 6
|
19天前
|
安全 Linux Android开发
探索安卓与iOS的安全性差异:技术深度分析
本文深入探讨了安卓(Android)和iOS两个主流操作系统平台在安全性方面的不同之处。通过比较它们在架构设计、系统更新机制、应用程序生态和隐私保护策略等方面的差异,揭示了每个平台独特的安全优势及潜在风险。此外,文章还讨论了用户在使用这些设备时可以采取的一些最佳实践,以增强个人数据的安全。
|
25天前
|
API Android开发 iOS开发
掌握安卓与iOS应用开发中的依赖注入技术
本文探讨了在安卓和iOS应用开发中,如何有效利用依赖注入技术来提升代码的模块化、可测试性和可维护性。通过对比分析两种平台下依赖注入的实现方式与工具,本文旨在为开发者提供一套清晰、实用的依赖管理策略,助力打造高质量软件产品。
|
1月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术特性与用户体验的深度剖析
在移动操作系统的战场上,安卓和iOS一直是两个重量级选手。本文将深入探讨两者的技术架构、安全性、应用生态以及用户体验等方面的差异,并尝试从用户和开发者的角度出发,分析这两个系统的优势与不足。通过比较,我们不仅能更好地理解各自的特点,还能洞察未来移动技术的发展趋势。
|
21天前
|
Android开发 Swift iOS开发
掌握安卓与iOS应用开发:关键技术与市场趋势
本文深入探讨了安卓和iOS平台的应用开发,通过分析关键技术如Kotlin、Swift及Flutter,并结合当前市场趋势,为开发者提供全面的技术指南。同时,比较了两大平台的优劣势,帮助开发者做出更明智的决策。