4.1 字符串资源

作者:飞龙

这篇教程是 APK 逆向实战的第一个例子,我会以一个非常简单的程序开始。主要内容就是修改字符串资源,除了破解所需之外,汉化也需要了解这个东西。我们的程序是这个样子。

4.1 字符串资源 - 图1

可以告诉大家的是,这三个文本的位置都不一样。

下面我们将其载入 Android Killer。完成后,在文本搜索框中搜索文本 1

4.1 字符串资源 - 图2

这样是不会有任何效果的,我们就猜测这个字符串应该是写入代码中的,而反编译出来的代码中的字符串以\uxxxx编码。所以我们要搜索\u6587\u672c 1。可以看到它的确存在于代码中。

4.1 字符串资源 - 图3

下面我们要寻找文本 2,我们首先看一看这个函数,这是MainActivityonCreate。这里没有其它的字符串了,说明一定在别处。

我们搜索\u6587\u672c 2,也是无效果的。那么我们搜索文本 2

4.1 字符串资源 - 图4

  1. <TextView android:textAppearance="?android:textAppearanceMedium" android:id="@id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2.0dip" android:text=" " />
  2. <TextView android:textAppearance="?android:textAppearanceMedium" android:id="@id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2.0dip" android:text="文本 2" />
  3. <TextView android:textAppearance="?android:textAppearanceMedium" android:id="@id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2.0dip" android:text="@string/text3_text" />

我们在activity_main里面找到了这个东西,它是MainActivity的布局文件,布局文件中的字符串是不编码的。所以以后我们就需要两种情况都试一试。

我们查看第三个TextView,它的 ID 是@id/textView3,那么肯定就是我们要找的第三个文本框。我们可以看到它的text属性是@string/text3_text,说明它可能在strings.xml里面。

我们直接访问strings.xml,我们可以看到文本 3在这里:

4.1 字符串资源 - 图5

虽然 Android 不提倡硬编码在代码或者布局文件里面,但总有些人是这样做的,我们就需要了解。