aapt命令查看apk所有资源id

2024-03-01 14:20

本文主要是介绍aapt命令查看apk所有资源id,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.背景

当业务需要反编译一个apk时,总是在AndroidManifest.xml等处拿到类似@ref/0x7f080182的资源符号,并未直接对接上文件名或者资源id名称。

例如,如下从云闪付app里边反编译得到的apduservices.xml中声明如下:

<?xml version="1.0" encoding="utf-8"?>
<offhost-apdu-servicexmlns:android="http://schemas.android.com/apk/res/android"android:description="@ref/0x7f0f01c3"android:apduServiceBanner="@ref/0x7f080182"><!--理论上0x7f080182应该是个图片,drawable--><aid-groupandroid:description="@ref/0x7f0f01c7"android:category="payment"><aid-filterandroid:name="325041592E5359532E4444463031" /><aid-filterandroid:name="A0000003330101060003100000021000" /><aid-filterandroid:name="A0000003330101020003050001000000" /><aid-filterandroid:name="A0000003330101010014293300010000" /><aid-filterandroid:name="A0000003330101020001050001000000" /><aid-filterandroid:name="A0000003330101010001050001000000" /><aid-filterandroid:name="A0000003330101010003060000800000" /><aid-filterandroid:name="A0000003330101020063020000010000" /><aid-filterandroid:name="A0000003330101010004100000010000" /><aid-filterandroid:name="A0000003330101060001030000010000" /><aid-filterandroid:name="A0000003330101060048080000000000" /></aid-group>
</offhost-apdu-service>

apduservices.xml

在AS中根据推测从drawable中尝试找到对应的id(0x7f080182),从而获取对应的id名称bg_my_banner(对应了bg_my_banner.png)。

如上方案,要结合经验,逐个查询比较繁琐,如果我们希望一次性全部导出资源id,可供快速查询。

2.解决方案

通过Sdk里边的aapt命令,可以一次性导出所有资源到一个文件,供快速查询。

关键命令

命令如下:

~/Android/Sdk/build-tools/34.0.0/aapt d resources unionpay-wallet-v2.apk

aapt + d + resources + [待解包的apk或者jar]

输出结果举例:

Package Groups (1)
Package Group 0 id=0x7f packageCount=1 name=com.unionpayPackage 0 id=0x7f name=com.unionpaytype 0 configCount=2 entryCount=126spec resource 0x7f010000 com.unionpay:anim/abc_fade_in: flags=0x00000000spec resource 0x7f010001 com.unionpay:anim/abc_fade_out: flags=0x00000000spec resource 0x7f010002 com.unionpay:anim/abc_grow_fade_in_from_bottom: flags=0x00000000spec resource 0x7f010003 com.unionpay:anim/abc_popup_enter: flags=0x00000000spec resource 0x7f010004 com.unionpay:anim/abc_popup_exit: flags=0x00000000spec resource 0x7f010005 com.unionpay:anim/abc_shrink_fade_out_from_bottom: flags=0x00000000spec resource 0x7f010006 com.unionpay:anim/abc_slide_in_bottom: flags=0x00000000spec resource 0x7f010007 com.unionpay:anim/abc_slide_in_top: flags=0x00000000spec resource 0x7f010008 com.unionpay:anim/abc_slide_out_bottom: flags=0x00000000spec resource 0x7f010009 com.unionpay:anim/abc_slide_out_top: flags=0x00000000spec resource 0x7f01000a com.unionpay:anim/abc_tooltip_enter: flags=0x00000000spec resource 0x7f01000b com.unionpay:anim/abc_tooltip_exit: flags=0x00000000spec resource 0x7f01000c com.unionpay:anim/accelerate: flags=0x00000000......省略若干行......type 2 configCount=1 entryCount=7spec resource 0x7f030000 com.unionpay:array/bind_card_certType: flags=0x00000000spec resource 0x7f030001 com.unionpay:array/bind_card_certType_value: flags=0x00000000spec resource 0x7f030002 com.unionpay:array/bind_card_type: flags=0x00000000spec resource 0x7f030003 com.unionpay:array/language_type: flags=0x00000000spec resource 0x7f030004 com.unionpay:array/sec_ques_selector: flags=0x00000000spec resource 0x7f030005 com.unionpay:array/sort_type_code: flags=0x00000000spec resource 0x7f030006 com.unionpay:array/sort_type_name: flags=0x00000000config (default):resource 0x7f030000 com.unionpay:array/bind_card_certType: <bag>resource 0x7f030001 com.unionpay:array/bind_card_certType_value: <bag>resource 0x7f030002 com.unionpay:array/bind_card_type: <bag>resource 0x7f030003 com.unionpay:array/language_type: <bag>resource 0x7f030004 com.unionpay:array/sec_ques_selector: <bag>resource 0x7f030005 com.unionpay:array/sort_type_code: <bag>resource 0x7f030006 com.unionpay:array/sort_type_name: <bag>type 3 configCount=1 entryCount=832spec resource 0x7f040000 com.unionpay:attr/DefaultDrawable: flags=0x00000000spec resource 0x7f040001 com.unionpay:attr/RectAdius: flags=0x00000000spec resource 0x7f040002 com.unionpay:attr/account_size: flags=0x00000000spec resource 0x7f040003 com.unionpay:attr/actionBarDivider: flags=0x00000000spec resource 0x7f040004 com.unionpay:attr/actionBarItemBackground: flags=0x00000000spec resource 0x7f040005 com.unionpay:attr/actionBarPopupTheme: flags=0x00000000spec resource 0x7f040006 com.unionpay:attr/actionBarSize: flags=0x00000000spec resource 0x7f040007 com.unionpay:attr/actionBarSplitStyle: flags=0x00000000spec resource 0x7f040008 com.unionpay:attr/actionBarStyle: flags=0x00000000spec resource 0x7f040009 com.unionpay:attr/actionBarTabBarStyle: flags=0x00000000......省略若干行......

 据查得到结果下,得到的结果也是drawable/bg_my_banner:

最后再回到AS解压unionpay apk的地方找到对应的文件。

这里可以快速协助定位哪个drawable文件夹下有对应的原始文件。

从截图看,只有xhdpi文件夹下有,其他地方都没有;右边的箭头指示位置会提示原始文件夹路径(res/drawable-xhdpi-v4/bg_my_banner.png)。

点击对应的文件夹,可以预览到原始文件和文件大小。

扩展:

如果想要同步打印一个apk里边的字串id和对应的值,可以增加--values参数,并将其输出到一个文件中。

扩展命令

1 aapt dump --values

命令如下:

~/Android/Sdk/build-tools/34.0.0/aapt d --values resources unionpay-wallet-v2.apk  >> unionpay_reource_id.txt2

得到结果如下:

        resource 0x7f080169 com.unionpay:drawable/bg_mine_arc_view: t=0x03 d=0x00000622 (s=0x0008 r=0x00)(string8) "res/drawable-xhdpi-v4/bg_mine_arc_view.png"resource 0x7f080182 com.unionpay:drawable/bg_my_banner: t=0x03 d=0x00000623 (s=0x0008 r=0x00)(string8) "res/drawable-xhdpi-v4/bg_my_banner.png"resource 0x7f0801cd com.unionpay:drawable/bg_selection_hotapps_item_normal: t=0x03 d=0x00000624 (s=0x0008 r=0x00)

如果是个字串的话会更加明显:

以com.unionpay:string/system_default_channel为例,从AS解压的情况中来看,该字串中包含了多种语言翻译版本,即不止一个翻译版本,输出结果应该有多个:

命令执行后,并导入到一个文件文件中,发现匹配到了84个结果,即将多语言的结果全部输出来啦,从截图中可看到config te-rIN字样和对应的翻译版本。

以上是当那到离线版本的apk时,可以通过aapt命令来读取相关资源信息,这样会比jadx反编译查找来的快。

2 adb cmd overlay lookup

如果是apk已经安装到设备,是运行时状态,可以直接通过如下命令直接获取当前语言版本的翻译版本。

adb shell cmd overlay lookup com.unionpay com.unionpay:string/system_default_channel# 系统默认通道adb shell cmd overlay lookup com.unionpay com.unionpay:drawable/bg_my_banner# res/drawable-xhdpi-v4/bg_my_banner.png

adb shell cmd overlay lookup 包名 包名:[资源类型]/[资源id名称]

这篇关于aapt命令查看apk所有资源id的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762743

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Linux中查看操作系统及其版本信息的多种方法

《Linux中查看操作系统及其版本信息的多种方法》在服务器运维或者部署系统中,经常需要确认服务器的系统版本、cpu信息等,在Linux系统中,有多种方法可以查看操作系统及其版本信息,以下是一些常用的方... 目录1. lsb_pythonrelease 命令2. /etc/os-release 文件3. h

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java