挂载system.img android linux,Android系统System.img逆向工程

2023-05-16

目的

Android Rom打包后,根据类型,粗略分为固件包和普通卡刷包;不管是固件包(如:三星Odin固件包),还是卡刷包(如:GSI通刷包)。为了操作方便,有时会打包成system.img格式。现在就带大家在Linux上挂载system.img。

得到镜像文件

以三星固件包为例,其他手机品牌可以参考:Github 解包开源项目

我解压的是SM-A505U_1_20191216162802(美版三星A50)。下载后,固件名称为SM-A505U_1_20191216162802_rru9m4tdds_fac.zip。解压这个文件:

1unzip SM-A505U_1_20191216162802_rru9m4tdds_fac.zip

得到:

BL_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5

AP_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship_meta_OS9.tar.md5

CP_A505USQS3ASL4_CP14622435_CL16561534_QB27874851_REV00_user_low_ship.tar.md5

HOME_CSC_OMC_OYN_A505UOYN3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5

CSC_OMC_OYN_A505UOYN3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5

USERDATA_CCT_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5

用file命令校验,发现这些就是tar压缩文件,三星使用md5结尾,方便Odin检测md5数值。

所以,我们用tar的解压命令,解压AP文件:

1tar xvf AP_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship_meta_OS9.tar.md5

在解压的文件里,就有我们system.img.lz4,这个是进过lz4压缩后的img镜像文件。

提取system.img

其实刚刚就在提取了,这一步;我们把system.img.lz4文件解压

1lz4 -d system.img.lz4

得到system.img镜像文件。如果无法识别lz4命令:

1

2

3# Ubuntu

apt-get update

apt-get install liblz4-tool

1

2

3# Centos

yum install lz4

yum install lz4-devel

校验system.img类型

使用文件file命令:

1file system.img

可能会有以下结果:

system.img: Android sparse image, version: 1.0, Total of 1510400 4096-byte output blocks in 33 input chunks.

system.img: Linux rev 1.0 ext2 filesystem data, UUID=873a602a-a04c-5918-94d6-e1f574def67e (extents) (large files) (huge files)

上面两个比较常见,还有这种不常见:

VMS Alpha executable

以上三种,类型方便为:ext 文件、raw 文件和yaffs2 文件。

判断

ext文件

首先,需要用 simg2img 工具把 system.img 转为为 ext4 文件格式,该工具位于 out/host/linux-x86/bin/simg2img,可以使用apt-get安装:

1apt-get install simg2img

再使用工具进行转换:

1simg2imgsystem.imgsystem_new.img

会得到一个 system_new.img,它是 raw 格式的完整镜像:

1

2root@iZxf3axaooao5qZ:/Cloud/SM# file system_new.img

system_new.img: Linux rev 1.0 ext2 filesystem data, UUID=873a602a-a04c-5918-94d6-e1f574def67e (extents) (large files) (huge files)

yaffs2文件1gcc -o unyaffs unyaffs.c

创建一个 system 目录,将 unyaffs 和 system.img 放到 system 目录中,然后执行命令,即可解压到当前目录

1unyaffs system.img

raw文件

这个是最舒服的了,Linux上直接挂载即可:

创建一个system的目录用来挂载:

1mkdir system

用Linux挂载命令进行挂载:

1sudo mount -t ext4system_new.imgsystem

ee2ab43371ac572e7cc2576b3b352b2a.png

ext文件和raw文件区别

raw 其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大

ext 就是说是一个非常普通的dat文件。由于它将raw ext4进行稀疏描述,因此尺寸比较小(没有全零的无效填充区)

所以,我们只需要用脚本(simg2img),进行一次编译操作,就可以把ext文件编译、转换成raw文件了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

挂载system.img android linux,Android系统System.img逆向工程 的相关文章

  • Android向后兼容技术

    我现在在开发基于最新 API 15 ICS 的 15 项活动 Android 应用程序方面取得了进展 现在我发现应用程序的主要功能主义者即使支持 android v4 也不向后兼容 例如 1 fragment事务动画 2 将StringSe
  • 在代码中旋转按钮(或其中的文本)

    我必须通过编码随机旋转按钮 或里面的文本 它是相同的 API级别低于11是否有button setRotate x 好吧 看了一下 答案是 很复杂 您可以使用旧的动画框架旋转按钮 例如像这样 Button button Button fin
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • Android 中有没有办法获取 SD 卡大小?

    欢迎大家 我已经在 Stackoverflow 和 google 上尝试过与此相关的每个问题 但没有一个有效 我已经尝试过类似下一个链接的操作 但它返回的内容与内部存储相同 如何获取外部存储 SD 卡的大小 带安装的 SD 卡 https
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • Android:BATTERY_STATUS_DISCHARGING 和 BATTERY_STATUS_NOT_CHARGING 之间的区别

    我想知道这两个标志之间的区别 BatteryManager BATTERY STATUS DISCHARGING And BatteryManager BATTERY STATUS NOT CHARGING 我开发了一个使用这两个标志的应用
  • 我应该选择的最低 SDK 版本是多少? (截至2018年11月)

    据我所知 android studio 中默认的最小 SDK 设置是 15 我读到我应该增加它 因为没有多少人 或者可能没有 仍在使用该 android 版本 另外 我计划使用 android studio 中的一些新功能 这些功能仅适用于
  • Spotify 登录错误 INVALID_CLIENT:无效的重定向 URI android

    我正在制作一个包含 Spotify 集成的应用程序 我点击了此链接https developer spotify com technologies spotify android sdk tutorial https developer s
  • 如何在Android网格视图中设置单元格大小?

    我正在尝试为应用程序制作一个带有大图标的网格视图 但我找不到任何有关修改 Android 上网格布局上的单元格大小的教程 有人可以给我一个例子或相关链接吗 Thanks 就像另一个一样适配器视图 http developer android
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 如何通过 AppCompatActivity 使用 YouTube Android 播放器 API

    为了在我的应用程序中播放视频 我决定扩展 YouTube Android Player API 但问题是我的菜单消失了 因为我没有从 AppCompatActivity 扩展 问题是 如何使用 YouTube Android Player
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且

随机推荐