修改现有的 smali constants/methods

Modifying existing smali constants/methods

我使用 apktool 将 .dex 解码为 smali,但我找不到编辑 DEBUG 的方法,布尔值默认为 false(在 Java 字节码编辑器中读取 0x0000000),总是 return 是的。我试图通过 JBE、recaf 和 HxD 直接编辑 0x0000000 字段,但程序要么无法编辑布尔字段(JBE 和 recaf),要么在十六进制编辑后无法识别 .class。

任何帮助,无论是关于如何更改 .smali 代码还是 .class 代码,我们都将不胜感激。

.class public final Lcom/rockstargames/gtactw/BuildConfig;
.super Ljava/lang/Object;
.source "BuildConfig.java"


# static fields
.field public static final DEBUG:Z


# direct methods
.method public constructor <init>()V
.locals 0

.prologue
.line 4
invoke-direct {p0}, Ljava/lang/Object;-><init>()V

return-void
.end method

JD GUI 简单阅读上面代码为

package com.rockstargames.gtactw;

public final class BuildConfig {
public static final boolean DEBUG = false;
}

java 编译器通常会在编译时内联对静态最终字段的引用。因此,即使您更改字段的值,通常也不会实际影响任何内容。

相反,您需要在原始代码中实际使用它的地方修改该值。不幸的是,现在要确定它在哪里并不容易。因为在编译器内联这个值之后,它会变成 const v0, false