[转]微信零基础美化反编译教程 – 5 – 资源 ID

没有资源 ID 就没有改包。

资源 ID – 顺藤摸瓜的根本展开目录

在调整底栏的布局文件的过程中,我们注意到有许多属性后都有形如 @7F100D16等等的 16 进制的数值,这些代表的就是它所调用的资源的资源 ID

普通的资源 ID展开目录

关于资源 ID,我们需要知道的是

在 apk 被打包的过程中,所有的资源, 包括

  • 文件 (图像、xml 文件等等)
  • 颜色
  • 字符串
  • ……

都会被赋予自己的 ID,我们使用 MT 管理器打开查看的时候,所有被调用的资源不会显示文件的路径,而是我们看到的@7F100D16等等的资源 ID

我们可以通过在 MT 管理器中,打开 resources.arsc,选择「ID 搜索资源」,输入我们想要搜索的 ID,这样我们可以看到被储存在其中的文件路径,比如:

  1. 上文中的底栏布局文件,开头是这样的:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:background="@7F02051F"
       android:paddingTop="@7F0C0154"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

    我们看到 android:background="@7F02051F"这便是底栏的背景图片文件,我们复制并到 resources.arsc 中进行「ID 搜索资源」

  2. 得到文件路径MT管理器显示底栏背景图文件路径

而我们使用 MT 管理器打开 resources.arsc 后,点击「com.tencent.mm」会有许多条目,里面一些是存储数值 (color)、用于显示的字符串(string)、长度(dimen) 等等(在前文有提到过),而另外一些,比如 drawable,点击进入之后我们会发现许多后缀各异的条目:

resources.arscdrawable” />

如果之前有改过包的同学一定不会陌生,这些是一个正常的未经混淆的 apk 里的存放资源文件的正常的文件夹名,而微信通过混淆更改了文件夹名,我们熟悉的存放大量图片文件的 r/a3 文件夹,对应的实际上应该是 res/drawable-xxhdpi-v4 文件夹,我们点击进入「drawable-xxhdpi-v4」

这里存储着 a3 文件夹下所有文件的文件路径,长按,会出现「复制 ID」的选项

resources.arscdrawable > drawable-xxhdpi-v4″ />

这个功能对于任何的资源都是有效的,这意味着我们可以

  • 通过 xml 文件中出现的 ID 定位资源 (文件、字符串、颜色等等)
  • 通过资源找到 ID,通过「XML 搜索功能」,按「16 进制」进行搜索,找到调用这个资源的 xml 布局文件

那么,如果要定位到我们想要修改的地方 (比如输入框),只需要从一个比较好找的元素下手 (比如某个按钮),找到具体的资源,获得 ID,再用 ID 搜索 XML 找到调用它的布局文件,我们就可以对整个输入框进行修改了

android:id 定义的资源 ID – 通过「开发者助手」来获取展开目录

在上文的布局文件中,我们可以看到:

<com.tencent.mm.ui.TabIconView
    android:id="@7F100720"
    android:layout_width="32dp"
    android:layout_height="28dp"
    android:layout_centerInParent="true" />

其中还有一个 android:id,这个 ID 一般来说代表的是这一段定义出来的整个 View,而不是某个具体的文件,android:id 的 ID 可以非常容易的通过前文提到的「开发者助手」这个应用来获取:

用开发者助手获取

这样的定位比通过字符、颜色等元素作为线索来的快得多也准确的多,但是坏处是,并不是所有的 View 都定义了 android:id 这个属性,所以我们很多时候其实还是要一个一个来排查定位,做苦力活。

文 / anson
LEAVE A REPLY
loading