逆向工程解锁Sketchbook高级版的记录

Sketchbook 安卓版高级功能解锁:基于截图的逆向流程记录

背景

偶然发现 Sketchbook(安卓版)的新版本似乎包含了需要购买才能使用的高级功能(在界面上可能显示为“高级版捆绑包”或类似字样)。由于购买途径似乎受限于 Google Play 商店,这给无法或不愿使用该商店的用户带来了不便。因此,尝试通过逆向工程来分析和修改应用,以期在本地解锁这些功能。

目标应用: Sketchbook (安卓版)
目标: 解锁应用内的高级功能。
初始状态: 应用内有高级功能区域,但显示为锁定状态,需要购买。

图 1:应用初始状态,高级功能未解锁

使用工具:

  • NP 管理器: 用于 APK 分析、修改、资源查看和代码编辑。

声明: 本文仅记录基于截图的操作过程,用于技术交流和学习。修改应用可能违反用户协议,并可能导致应用不稳定。请尊重开发者劳动,支持正版。


逆向修改步骤

1. 准备工作:应用共存与提取

为了方便修改且不影响原版应用,首先使用 NP 管理器对 Sketchbook 应用进行处理。

  • 打开 NP 管理器,找到 Sketchbook 应用。
  • 使用其“应用共存”功能(或类似的提取安装包功能),生成一个独立的、可供修改的 APK 文件副本。

图 2:使用 NP 管理器处理应用,准备提取或共存

2. 定位关键信息:查找资源 ID

要找到控制高级功能的代码,通常先从界面上可见的文字入手,查找其在应用资源文件中的 ID。

  • 在 NP 管理器中,点击上一步生成的 Sketchbook APK 文件。
  • 选择 resources.arsc 文件,这是安卓应用的资源索引文件。
  • 选择“Arsc 编辑器”(或 NP 管理器提供的相应功能)打开。

图 3:点击 APK 文件
图 4:选中 arsc 文件,准备进行资源查询

  • 在 Arsc 编辑器中,使用“查询”或“搜索”功能,选择按“资源值”搜索。
  • 输入界面上与高级功能相关的文字(例如 “Premium Bundle” 或实际显示的文字)。

图 5:按资源值搜索

  • 搜索结果会显示该文字对应的资源 ID。。

图 6:获得资源 ID -
图 7:资源 ID 确认

3. 追踪代码:搜索资源 ID 的使用位置

得到资源 ID 后,需要在应用的 Java 代码(编译后的 Dalvik 字节码,位于 classes.dex 文件中)里查找这个 ID 被用在了哪里。

  • 返回 APK 文件内容视图。
  • 选择 classes.dex 文件(如果应用较大,可能有 classes2.dex, classes3.dex 等,需要选择合适的或全部选择进行搜索)。
  • 使用“Dex 编辑器++”打开。

图 8:选中 classes.dex 文件,选择 Dex 编辑器++

  • 在 Dex 编辑器中启动搜索功能。
  • 选择按“常量”搜索,输入之前找到的资源 ID。

图 9:按常量搜索 ID

  • 搜索结果会列出代码中使用该 ID 的位置。

图 10:发现 ID 在代码中的使用位置

4. 分析逻辑:找到关键判断函数

点击搜索结果,跳转到具体的 Smali 代码位置。分析这段代码及其上下文,寻找进行高级功能判断的逻辑。

  • 观察 ID, 使用处的 Smali 代码。
  • 根据截图分析,在使用该 ID 的代码附近,发现了一个静态方法调用:invoke-static {p0}, Lcom/adsk/sketo/SketoApp;->P4(Landroid/content/Context;)Z
  • 方法签名末尾的 Z 通常表示该方法返回一个布尔值(boolean,真或假)。
  • 结合上下文,这个名为 P4 的方法很可能就是用来检查用户是否拥有高级权限的函数。

图 11:分析 P4 函数调用及其上下文
图 12:代码片段,显示 P4 调用
图 13:确认 P4 函数是关键的鉴权函数

5. 修改代码:强制返回 true

确定了关键判断函数 P4 后,目标是修改它,让它无论如何都返回 true(表示已授权)。

  • 在 Dex 编辑器中,跳转到 com.adsk.sketo.SketoApp 类下的 P4 方法定义处。

图 14:跳转至 P4 函数定义

  • 清空 P4 方法原有的 Smali 代码。

图 15:清空 P4 函数原有内容

  • 在方法体内写入新的 Smali 代码,使其直接返回常量 1(在布尔语境下代表 true)。根据截图,添加的代码是:
    1
    2
    const/4 v0, 0x1
    return v0

图 16:修改 P4 函数,使其返回 0x1 (true)

  • 保存对 P4 方法的修改。

6. 完成与验证:重新打包、签名、安装

代码修改完成后,需要保存更改,重新生成 APK 文件,并对其进行签名,然后才能安装到设备上。

  • 退出 Dex 编辑器,NP 管理器通常会提示保存修改并自动重新编译打包 APK。
  • 对修改后的 APK 文件进行签名(NP 管理器通常提供签名功能)。签名是安装到安卓系统的必要步骤。
  • 卸载设备上可能存在的原版 Sketchbook(如果之前没有使用共存功能)。
  • 安装这个修改过并已签名的 APK 文件。
  • 打开新安装的 Sketchbook 应用。

7. 结果确认

  • 检查之前显示为锁定的高级功能区域。
  • 根据截图显示,修改后的应用中,高级版功能区域不再显示锁定或购买提示,表明修改成功,高级功能已被解锁。

图 17:修改后运行应用,高级版已解锁


总结

通过以上步骤,利用 NP 管理器,从界面文字出发找到资源 ID,再通过资源 ID 追踪到代码中的关键判断函数 P4,最后修改该函数强制返回 true,成功在本地解锁了 Sketchbook 应用的高级功能。这个过程展示了安卓逆向中一种常见的修改思路。