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

2019-12-10 18:21:06王旭
Android开发,apk反编译,apk打包

       会在当前目录下生成class-dex2jar.jar文件

Android开发,apk反编译,apk打包

       然后打开jd-gui,将class-dex2jar.jar文件拖进去,就可以看到反编译出来的源代码。

Android开发,apk反编译,apk打包

       可以看到反编译的代码和原本的代码差别不大,主要差别是原来的资源引用全都变成了数字。

       下面我们来修改这个apk的内容。

       首先我们将apk拷贝到apktool工具目录下,执行命令apktool  d  app-release.apk。

Android开发,apk反编译,apk打包

       生成的目录中包含smali文件夹

Android开发,apk反编译,apk打包

       然后找到我们的主要的类MainActivity.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
  const-string v0, "MainActivity"

  const-string v1, "Button is clicked"

  invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

  .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