Android开发apk反编译和二次打包教程

2019-12-10 18:21:06王旭

       上面代码中,33、39-56行就是弹出Toast的代码部分。将上面整个showToast方法拷贝到原始工程的smali文件中,这里要特别注意修改行号,这个行号表示的是代码在原始Java文件中的行号,需要参考两个smali文件的行号来修改。我认为只要保证方法内的行号不乱序,并且方法之间的行号不冲突就可以。然后,需要将原始工程中打印日志的代码替换为显示Toast的代码,也就是将原始smali文件中36-40行修改为新建工程中33、39-56行的内容。修改后的内容如下,主要关注下面内容中36行、75-91行与原始smali文件的差异。

.class public Lcom/viclee/decompiledemo/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"

# interfaces
.implements Landroid/view/View$OnClickListener;


# static fields
.field private static final TAG:Ljava/lang/String; = "MainActivity"


# instance fields
.field private btn:Landroid/widget/Button;


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

  .prologue
  .line 9
  invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V

  return-void
.end method


# virtual methods
.method public onClick(Landroid/view/View;)V
  .locals 2
  .param p1, "v"  # Landroid/view/View;

  .prologue
  .line 23
  invoke-virtual {p0}, Lcom/viclee/decompiledemo/MainActivity;->showToast()V

  .line 24
  return-void
.end method

.method protected onCreate(Landroid/os/Bundle;)V
  .locals 1
  .param p1, "savedInstanceState"  # Landroid/os/Bundle;

  .prologue
  .line 14
  invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

  .line 15
  const v0, 0x7f040019

  invoke-virtual {p0, v0}, Lcom/viclee/decompiledemo/MainActivity;->setContentView(I)V

  .line 17
  const v0, 0x7f0c0050

  invoke-virtual {p0, v0}, Lcom/viclee/decompiledemo/MainActivity;->findViewById(I)Landroid/view/View;

  move-result-object v0

  check-cast v0, Landroid/widget/Button;

  iput-object v0, p0, Lcom/viclee/decompiledemo/MainActivity;->btn:Landroid/widget/Button;

  .line 18
  iget-object v0, p0, Lcom/viclee/decompiledemo/MainActivity;->btn:Landroid/widget/Button;

  invoke-virtual {v0, p0}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

  .line 19
  return-void
.end method

.method public showToast()V
  .locals 2

  .prologue
  .line 27
  const-string v0, "u6211u662fu53cdu7f16u8bd1u540eu8fdbu884cu7684u4feeu6539u3002"

  const/4 v1, 0x1

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

  move-result-object v0

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

  .line 28
  return-void