Skip to content

一次安卓逆向工程记录

记录一次最简单的安卓逆向过程。只是修改 App 内的一个数值即可达到效果。

准备工具

  • vscode:编辑 smali 中间代码使用
  • jadx:反编译 dex 查看 java 代码、定位 smali 使用
  • apktool:解包打包 APK

逆向过程

解包

在 apktool 所在文件夹执行一下命令

java -jar apktool_2.6.1.jar d apk文件.apk

定位

使用 jadx 打开 APK 搜索相关的文本,比如「您的金币不够了,请充值」。

找到这个资源的 ID,搜索这个资源 ID,比如找到以下逻辑

if (user.getBalance() < 200) {
  new AlertDialog(gameActivity.getContext()).builder().setCancelable(true).setMsg(gameActivity.this.getString(R.string.balance_not_enough)
}

定位到逻辑之后我们可以在 vscode 中打开解压的文件夹,搜索这个方法名。

修改

比如说 public int getBalance(),返回值是个 int,根据 smali 语法,应该搜索 getBalance()I 来定位这个方法位置(I 就是返回类型 int) 根据 smali 语法我们将 getBalance() 方法的返回值永远定格到 999。

.method public getBalance()I
    .locals 1

    .line 88
    #iget v0, p0, Lcom/bytedance/common/model/UserInfo$UserInfoBean;->balance:I
    # 原本是取 UserInfoBean 对象的 balance 成员变量,我们直接写死为 999
    const v0, 0x3E7

    return v0

这样无论怎么消费,我们的余额始终不变一直会是 999。

打包

修改完逻辑之后重新打包解压出来的文件夹,

java -jar apktool_2.6.1.jar b 解压文件夹位置

然后签名 apk,首先生成一个我们自己的签名

keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000

最后给 APK 签名,密码就是你生成签名时的密码

jarsigner -verbose -keystore my-release-key.keystore 解压目录/dist/apk文件.apk my_alias

搞定~

Comments

Commenting as a guest. A nickname is required; email is optional. Only new comments posted after verifying your email and signing in will appear on your profile. Existing guest comments will not be linked automatically.

Share article

一次安卓逆向工程记录

Email X

View original ↗