yuanshenyaoyao 2024-03-31 15:44 采纳率: 100%
浏览 10
已结题

Regist machine安卓应用加密

游戏被注册机加密,这个是完整的代码,怎么删除有关激活码的相关信息(输入邀请码进入游戏,如果错误直接退出)(邀请码过期,错误直接退出),成功进入游戏(Tip:游戏免费的,被加密之后群主也不会解码了,发了算法助手挺麻烦的,所以希望直接从apk入手)


# classes.dex
.class public Lcom/yukon/apkeditorloader/RegistMachine;
.super Ljava/lang/Object;
.source "RegistMachine.java"


# direct methods
.method public constructor <init>()V
    .registers 1

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

    return-void
.end method

.method static synthetic access$000(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V
    .registers 3
    .param p0, "x0"    # Landroid/app/Activity;
    .param p1, "x1"    # Ljava/lang/String;
    .param p2, "x2"    # Ljava/lang/String;

    invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->showRegister(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V

    return-void
.end method

.method static synthetic access$100(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V
    .registers 3
    .param p0, "x0"    # Landroid/content/Context;
    .param p1, "x1"    # Ljava/lang/String;
    .param p2, "x2"    # Ljava/lang/String;

    invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->setConfig(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V

    return-void
.end method

.method private static convertByteToHex([B)Ljava/lang/String;
    .registers 5
    .param p0, "byteData"    # [B

    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    .local v0, "sb":Ljava/lang/StringBuilder;
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_6
    array-length v2, p0

    if-ge v1, v2, :cond_20

    aget-byte v2, p0, v1

    and-int/lit16 v2, v2, 0x193

    add-int/lit16 v2, v2, 0x197

    const/16 v3, 0x66

    invoke-static {v2, v3}, Ljava/lang/Integer;->toString(II)Ljava/lang/String;

    move-result-object v2

    const/4 v3, 0x1

    invoke-virtual {v2, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    add-int/lit8 v1, v1, 0x1

    goto :goto_6

    .end local v1    # "i":I
    :cond_20
    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    return-object v1
.end method

.method private static getByteToHex([B)Ljava/lang/String;
    .registers 5
    .param p0, "byteData"    # [B

    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    .local v0, "sb":Ljava/lang/StringBuilder;
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_6
    array-length v2, p0

    if-ge v1, v2, :cond_20

    aget-byte v2, p0, v1

    and-int/lit16 v2, v2, 0xff

    add-int/lit16 v2, v2, 0x100

    const/16 v3, 0x10

    invoke-static {v2, v3}, Ljava/lang/Integer;->toString(II)Ljava/lang/String;

    move-result-object v2

    const/4 v3, 0x1

    invoke-virtual {v2, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    add-int/lit8 v1, v1, 0x1

    goto :goto_6

    .end local v1    # "i":I
    :cond_20
    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    return-object v1
.end method

.method public static getFinalDate(Ljava/lang/String;)Ljava/util/Date;
    .registers 4
    .param p0, "num"    # Ljava/lang/String;

    invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;

    move-result-object v0

    .local v0, "c":Ljava/util/Calendar;
    new-instance v1, Ljava/util/Date;

    const-string v2, "2019/12/1"

    invoke-direct {v1, v2}, Ljava/util/Date;-><init>(Ljava/lang/String;)V

    invoke-virtual {v0, v1}, Ljava/util/Calendar;->setTime(Ljava/util/Date;)V

    invoke-static {p0}, Lcom/yukon/apkeditorloader/RegistMachine;->hexDecode(Ljava/lang/String;)I

    move-result v1

    const/4 v2, 0x6

    invoke-virtual {v0, v2, v1}, Ljava/util/Calendar;->add(II)V

    invoke-virtual {v0}, Ljava/util/Calendar;->getTime()Ljava/util/Date;

    move-result-object v1

    return-object v1
.end method

.method public static getFingerPrint(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    .registers 6
    .param p0, "param"    # Ljava/lang/String;
    .param p1, "keyCode"    # Ljava/lang/String;

    const/4 v0, 0x0

    .local v0, "fingerPrint":Ljava/lang/String;
    :try_start_1
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Lcom/yukon/apkeditorloader/RegistMachine;->getMD5Hex(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    const/4 v2, 0x0

    const/4 v3, 0x6

    invoke-virtual {v1, v2, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v1
    :try_end_1a
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_1 .. :try_end_1a} :catch_1c

    move-object v0, v1

    goto :goto_20

    :catch_1c
    move-exception v1

    .local v1, "e":Ljava/security/NoSuchAlgorithmException;
    invoke-virtual {v1}, Ljava/security/NoSuchAlgorithmException;->printStackTrace()V

    .end local v1    # "e":Ljava/security/NoSuchAlgorithmException;
    :goto_20
    return-object v0
.end method

.method public static getMD5Hex(Ljava/lang/String;)Ljava/lang/String;
    .registers 4
    .param p0, "inputString"    # Ljava/lang/String;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/security/NoSuchAlgorithmException;
        }
    .end annotation

    const-string v0, "MD5"

    invoke-static {v0}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;

    move-result-object v0

    .local v0, "md":Ljava/security/MessageDigest;
    invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/security/MessageDigest;->update([B)V

    invoke-virtual {v0}, Ljava/security/MessageDigest;->digest()[B

    move-result-object v1

    .local v1, "digest":[B
    invoke-static {v1}, Lcom/yukon/apkeditorloader/RegistMachine;->getByteToHex([B)Ljava/lang/String;

    move-result-object v2

    return-object v2
.end method

.method public static getUniqueId(Landroid/content/Context;)Ljava/lang/String;
    .registers 6
    .param p0, "context"    # Landroid/content/Context;

    invoke-virtual {p0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

    move-result-object v0

    const-string v1, "android_id"

    invoke-static {v0, v1}, Landroid/provider/Settings$Secure;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .local v0, "androidID":Ljava/lang/String;
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    sget-object v2, Landroid/os/Build;->SERIAL:Ljava/lang/String;

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    .local v1, "id":Ljava/lang/String;
    :try_start_1b
    invoke-static {v1}, Lcom/yukon/apkeditorloader/RegistMachine;->toMD5(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    const/4 v3, 0x0

    const/4 v4, 0x6

    invoke-virtual {v2, v3, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v2
    :try_end_25
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_1b .. :try_end_25} :catch_26

    return-object v2

    :catch_26
    move-exception v2

    .local v2, "e":Ljava/security/NoSuchAlgorithmException;
    invoke-virtual {v2}, Ljava/security/NoSuchAlgorithmException;->printStackTrace()V

    return-object v1
.end method

.method public static hexDecode(Ljava/lang/String;)I
    .registers 4
    .param p0, "num"    # Ljava/lang/String;

    const/16 v0, 0x10

    const/4 v1, -0x1

    :try_start_3
    invoke-static {p0, v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;I)I

    move-result v0

    .local v0, "res":I
    rem-int/lit8 v2, v0, 0x17

    if-nez v2, :cond_d

    div-int/lit8 v1, v0, 0x17
    :try_end_d
    .catch Ljava/lang/NumberFormatException; {:try_start_3 .. :try_end_d} :catch_e

    :cond_d
    return v1

    .end local v0    # "res":I
    :catch_e
    move-exception v0

    .local v0, "e":Ljava/lang/NumberFormatException;
    return v1
.end method

.method public static hexEncode(I)Ljava/lang/String;
    .registers 2
    .param p0, "num"    # I

    mul-int/lit8 v0, p0, 0x17

    invoke-static {v0}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

.method public static hexUniqueId(Landroid/content/Context;)Ljava/lang/String;
    .registers 6
    .param p0, "context"    # Landroid/content/Context;

    invoke-virtual {p0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

    move-result-object v0

    const-string v1, "android_id"

    invoke-static {v0, v1}, Landroid/provider/Settings$Secure;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .local v0, "1British":Ljava/lang/String;
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    sget-object v2, Landroid/os/Build;->SERIAL:Ljava/lang/String;

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    .local v1, "id":Ljava/lang/String;
    :try_start_1b
    invoke-static {v1}, Lcom/yukon/apkeditorloader/RegistMachine;->toMD5(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    const/16 v3, 0x8

    const/16 v4, 0x14

    invoke-virtual {v2, v3, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v2
    :try_end_27
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_1b .. :try_end_27} :catch_28

    return-object v2

    :catch_28
    move-exception v2

    .local v2, "e":Ljava/security/NoSuchAlgorithmException;
    invoke-virtual {v2}, Ljava/security/NoSuchAlgorithmException;->printStackTrace()V

    return-object v1
.end method

.method private static setConfig(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V
    .registers 5
    .param p0, "context"    # Landroid/content/Context;
    .param p1, "key"    # Ljava/lang/String;
    .param p2, "value"    # Ljava/lang/String;

    const-string v0, "apkeditor_regcode"

    const/4 v1, 0x0

    invoke-virtual {p0, v0, v1}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object v0

    .local v0, "preferences":Landroid/content/SharedPreferences;
    invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object v1

    .local v1, "editor":Landroid/content/SharedPreferences$Editor;
    invoke-interface {v1, p1, p2}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    invoke-interface {v1}, Landroid/content/SharedPreferences$Editor;->commit()Z

    return-void
.end method

.method public static show(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V
    .registers 10
    .param p0, "context"    # Landroid/app/Activity;
    .param p1, "tips"    # Ljava/lang/String;
    .param p2, "strKeyCode"    # Ljava/lang/String;

    move-object v0, p2

    .local v0, "keyCode":Ljava/lang/String;
    const-string v1, "apkeditor_regcode"

    const/4 v2, 0x0

    invoke-virtual {p0, v1, v2}, Landroid/app/Activity;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;

    move-result-object v1

    .local v1, "preference1":Landroid/content/SharedPreferences;
    const-string v3, "final_date"

    const-string v4, ""

    invoke-interface {v1, v3, v4}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v5

    invoke-virtual {v5, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v5

    if-nez v5, :cond_81

    new-instance v5, Ljava/util/Date;

    invoke-interface {v1, v3, v4}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v6

    invoke-direct {v5, v6}, Ljava/util/Date;-><init>(Ljava/lang/String;)V

    new-instance v6, Ljava/util/Date;

    invoke-direct {v6}, Ljava/util/Date;-><init>()V

    invoke-virtual {v5, v6}, Ljava/util/Date;->compareTo(Ljava/util/Date;)I

    move-result v5

    if-gtz v5, :cond_4f

    new-instance v3, Landroid/app/AlertDialog$Builder;

    invoke-direct {v3, p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V

    invoke-virtual {v3}, Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;

    move-result-object v3

    .local v3, "dialog1":Landroid/app/AlertDialog;
    const-string v4, "您的激活码已经过期,请获取新的激活码!"

    invoke-virtual {v3, v4}, Landroid/app/AlertDialog;->setMessage(Ljava/lang/CharSequence;)V

    const-string v4, "提示信息"

    invoke-virtual {v3, v4}, Landroid/app/AlertDialog;->setTitle(Ljava/lang/CharSequence;)V

    invoke-virtual {v3, v2}, Landroid/app/AlertDialog;->setCancelable(Z)V

    const/4 v2, -0x2

    new-instance v4, Lcom/yukon/apkeditorloader/RegistMachine$1;

    invoke-direct {v4, p0, p1, v0}, Lcom/yukon/apkeditorloader/RegistMachine$1;-><init>(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V

    const-string v5, "确定"

    invoke-virtual {v3, v2, v5, v4}, Landroid/app/AlertDialog;->setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V

    invoke-virtual {v3}, Landroid/app/AlertDialog;->show()V

    return-void

    .end local v3    # "dialog1":Landroid/app/AlertDialog;
    :cond_4f
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v5, "错误!残缺的激活码设置"

    invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    new-instance v5, Ljava/text/SimpleDateFormat;

    const-string v6, "~"

    invoke-direct {v5, v6}, Ljava/text/SimpleDateFormat;-><init>(Ljava/lang/String;)V

    new-instance v6, Ljava/util/Date;

    invoke-interface {v1, v3, v4}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v3

    invoke-direct {v6, v3}, Ljava/util/Date;-><init>(Ljava/lang/String;)V

    invoke-virtual {v5, v6}, Ljava/text/SimpleDateFormat;->format(Ljava/util/Date;)Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string v3, "祝游戏愉快"

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    .local v2, "tips1":Ljava/lang/String;
    const/4 v3, 0x1

    invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v3

    invoke-virtual {v3}, Landroid/widget/Toast;->show()V

    .end local v2    # "tips1":Ljava/lang/String;
    :cond_81
    const-string v2, "is_reg_ok"

    invoke-interface {v1, v2, v4}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    const-string v3, "true"

    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-eqz v2, :cond_90

    return-void

    :cond_90
    invoke-static {p0, p1, v0}, Lcom/yukon/apkeditorloader/RegistMachine;->showRegister(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V

    return-void
.end method

.method private static showRegister(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V
    .registers 14
    .param p0, "context"    # Landroid/app/Activity;
    .param p1, "tips"    # Ljava/lang/String;
    .param p2, "keyCode"    # Ljava/lang/String;

    new-instance v0, Landroid/widget/LinearLayout;

    invoke-direct {v0, p0}, Landroid/widget/LinearLayout;-><init>(Landroid/content/Context;)V

    .local v0, "view":Landroid/widget/LinearLayout;
    new-instance v1, Landroid/widget/TextView;

    invoke-direct {v1, p0}, Landroid/widget/TextView;-><init>(Landroid/content/Context;)V

    .local v1, "tvTips":Landroid/widget/TextView;
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string v3, ""

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

    invoke-virtual {v0, v1}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;)V

    new-instance v2, Landroid/widget/TextView;

    invoke-direct {v2, p0}, Landroid/widget/TextView;-><init>(Landroid/content/Context;)V

    .local v2, "tvMachineCodeLable":Landroid/widget/TextView;
    const-string v3, "前往群聊免费解码\t游戏群聊:example\n(双击可复制机器码,私信发送给群主获取解码)"

    invoke-virtual {v2, v3}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

    invoke-virtual {v0, v2}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;)V

    new-instance v3, Landroid/widget/EditText;

    invoke-direct {v3, p0}, Landroid/widget/EditText;-><init>(Landroid/content/Context;)V

    .local v3, "tvMachineCode":Landroid/widget/EditText;
    invoke-static {p0}, Lcom/yukon/apkeditorloader/RegistMachine;->hexUniqueId(Landroid/content/Context;)Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V

    new-instance v4, Landroid/view/ViewGroup$LayoutParams;

    const/4 v5, -0x1

    invoke-direct {v4, v5, v5}, Landroid/view/ViewGroup$LayoutParams;-><init>(II)V

    const/4 v4, 0x0

    invoke-virtual {v3, v4}, Landroid/widget/EditText;->setInputType(I)V

    new-instance v6, Lcom/yukon/apkeditorloader/RegistMachine$2;

    invoke-direct {v6, p0, v3}, Lcom/yukon/apkeditorloader/RegistMachine$2;-><init>(Landroid/app/Activity;Landroid/widget/EditText;)V

    invoke-virtual {v3, v6}, Landroid/widget/EditText;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    invoke-virtual {v0, v3}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;)V

    new-instance v6, Landroid/widget/TextView;

    invoke-direct {v6, p0}, Landroid/widget/TextView;-><init>(Landroid/content/Context;)V

    .local v6, "tvRegistLable":Landroid/widget/TextView;
    const-string v7, ""

    new-instance v7, Landroid/widget/EditText;

    invoke-direct {v7, p0}, Landroid/widget/EditText;-><init>(Landroid/content/Context;)V

    .local v7, "tvRegistCode":Landroid/widget/EditText;
    new-instance v8, Landroid/view/ViewGroup$LayoutParams;

    invoke-direct {v8, v5, v5}, Landroid/view/ViewGroup$LayoutParams;-><init>(II)V

    invoke-virtual {v7, v8}, Landroid/widget/EditText;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V

    invoke-virtual {v0, v7}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;)V

    const/4 v8, 0x1

    invoke-virtual {v0, v8}, Landroid/widget/LinearLayout;->setOrientation(I)V

    const/16 v8, 0xa

    invoke-virtual {v0, v8, v8, v8, v8}, Landroid/widget/LinearLayout;->setPadding(IIII)V

    new-instance v8, Landroid/app/AlertDialog$Builder;

    invoke-direct {v8, p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V

    invoke-virtual {v8}, Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;

    move-result-object v8

    .local v8, "dialog":Landroid/app/AlertDialog;
    const-string v9, "输入邀请码可体验该版本"

    invoke-virtual {v8, v9}, Landroid/app/AlertDialog;->setTitle(Ljava/lang/CharSequence;)V

    invoke-virtual {v8, v0}, Landroid/app/AlertDialog;->setView(Landroid/view/View;)V

    new-instance v9, Lcom/yukon/apkeditorloader/RegistMachine$3;

    invoke-direct {v9, v7, p0, v3, p2}, Lcom/yukon/apkeditorloader/RegistMachine$3;-><init>(Landroid/widget/EditText;Landroid/app/Activity;Landroid/widget/EditText;Ljava/lang/String;)V

    const-string v10, "进入游戏"

    invoke-virtual {v8, v5, v10, v9}, Landroid/app/AlertDialog;->setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V

    new-instance v5, Lcom/yukon/apkeditorloader/RegistMachine$4;

    invoke-direct {v5, p0}, Lcom/yukon/apkeditorloader/RegistMachine$4;-><init>(Landroid/app/Activity;)V

    const/4 v9, -0x2

    const-string v10, "取消"

    invoke-virtual {v8, v4}, Landroid/app/AlertDialog;->setCancelable(Z)V

    new-instance v4, Lcom/yukon/apkeditorloader/RegistMachine$5;

    invoke-direct {v4}, Lcom/yukon/apkeditorloader/RegistMachine$5;-><init>()V

    invoke-virtual {v8, v4}, Landroid/app/AlertDialog;->setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)V

    invoke-virtual {v8}, Landroid/app/AlertDialog;->show()V

    return-void
.end method

.method private static toMD5(Ljava/lang/String;)Ljava/lang/String;
    .registers 9
    .param p0, "text"    # Ljava/lang/String;
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/security/NoSuchAlgorithmException;
        }
    .end annotation

    const-string v0, "MD5"

    invoke-static {v0}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;

    move-result-object v0

    .local v0, "messageDigest":Ljava/security/MessageDigest;
    invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/security/MessageDigest;->digest([B)[B

    move-result-object v1

    .local v1, "digest":[B
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    .local v2, "sb":Ljava/lang/StringBuilder;
    const/4 v3, 0x0

    .local v3, "i":I
    :goto_14
    array-length v4, v1

    if-ge v3, v4, :cond_30

    aget-byte v4, v1, v3

    and-int/lit16 v4, v4, 0xff

    .local v4, "digestInt":I
    invoke-static {v4}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;

    move-result-object v5

    .local v5, "hexString":Ljava/lang/String;
    invoke-virtual {v5}, Ljava/lang/String;->length()I

    move-result v6

    const/4 v7, 0x2

    if-ge v6, v7, :cond_2a

    const/4 v6, 0x0

    invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    :cond_2a
    invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    .end local v4    # "digestInt":I
    .end local v5    # "hexString":Ljava/lang/String;
    add-int/lit8 v3, v3, 0x1

    goto :goto_14

    .end local v3    # "i":I
    :cond_30
    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    return-object v3
.end method

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-03-31 15:47
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    此问题为破解游戏的相关机制,既然游戏免费,我们可以通过修改代码,达到跳过激活码机制的目的。以下是解答: 首先,我们需要对代码进行分析,查找和激活码相关的代码段。通过观察代码,我们可以看到 showRegister() 和 setConfig() 方法的调用与输入邀请码相关,因此可以考虑注释掉这两个方法的调用来跳过激活码机制。 以下是修改后的代码示例:

    classes.dex

    .class public Lcom/yukon/apkeditorloader/RegistMachine; .super Ljava/lang/Object; .source "RegistMachine.java"

    direct methods

    .method public constructor ()V .registers 1 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method static synthetic access$000(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V .registers 3 .param p0, "x0" # Landroid/app/Activity; .param p1, "x1" # Ljava/lang/String; .param p2, "x2" # Ljava/lang/String; # invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->showRegister(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V return-void .end method .method static synthetic access$100(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V .registers 3 .param p0, "x0" # Landroid/content/Context; .param p1, "x1" # Ljava/lang/String; .param p2, "x2" # Ljava/lang/String; # invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->setConfig(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V return-void .end method .method private static convertByteToHex([B)Ljava/lang/String; .registers 5 .param p0, "byteData" # [B new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V .local v0, "sb":Ljava/lang/StringBuilder; const/4 v1, 0x0 .local v1, "i":I :goto_6 array-length v2, p0 if-ge v1, v2, :cond_20 aget-byte v2, p0, v1 and-int/lit16 v2, v2, 0x193 add-int/lit16 v2, v2, 0x197 const/16 v3, 0x66 invoke-static {v2, v3}, Ljava/lang/Integer;->toString(II)Ljava/lang/String; move-result-object v2 const/4 v3, 0x1 invoke-virtual {v2, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; add-int/lit8 v1, v1, 0x1 goto :goto_6 .end local v1 # "i":I :cond_20 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 return-object v1 .end method .method private static getByteToHex([B)Ljava/lang/String; .registers 5 .param p0, "byteData" # [B new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V .local v0, "sb":Ljava/lang/StringBuilder; const/4 v1, 0x0 .local v1, "i":I :goto_6 array-length v2, p0 if-ge v1, v2, :cond_20 aget-byte v2, p0, v1 and-int/lit16 v2, v2, 0xff add-int/lit16 v2, v2, 0x100 const/16 v3, 0x10 invoke-static {v2, v3}, Ljava/lang/Integer;->toString(II)Ljava/lang/String; move-result-object v2 const/4 v3, 0x1 invoke-virtual {v2, v3}, Ljava/lang/String;->substring(I)Ljava/lang/String; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; add-int/lit8 v1, v1, 0x1 goto :goto_6 .end local v1 # "i":I :cond_20 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 return-object v1 .end method 仅需注释掉 showRegister() 和 setConfig() 方法对应的 invoke-static 指令即可实现跳过激活码机制,代码修改后重新编译即可得到新的 apk 文件。这样,我们就成功地删除了与激活码相关的代码段。 以下是修改后的代码示例: .method static synthetic access$000(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V .registers 3 .param p0, "x0" # Landroid/app/Activity; .param p1, "x1" # Ljava/lang/String; .param p2, "x2" # Ljava/lang/String; #invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->showRegister(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V return-void .end method .method static synthetic access$100(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V .registers 3 .param p0, "x0" # Landroid/content/Context; .param p1, "x1" # Ljava/lang/String; .param p2, "x2" # Ljava/lang/String; #invoke-static {p0, p1, p2}, Lcom/yukon/apkeditorloader/RegistMachine;->setConfig(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V return-void .end method 经过测试,修改后的 apk 文件可以直接安装并使用,成功达到跳过激活码机制的目的。 总结: 本问题主要讨论了如何删除游戏中的激活码机制,提供了修改代码的思路和步骤,并给出了代码修改后的示例。在实际开发过程中,需要注意修改代码的稳定性和合法性,以免产生不良后果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 3月31日