android逆向分析之从smali到java

通过上一篇 android逆向分析之反编译,在dex2jar的前提下,我们获取到了源码,在apktool的前提下,我们可以获取到资源和smali文件,本篇主要讲述smali几个最基本的知识和smali转java。

本片通过ServerListActivity.smali(来源于上篇apktool反编译出来的)来讲述,首先打开此文件,片段如下:

.class public Lcom/cpic/jst/ui/activity/ServerListActivity;
.super Lcom/cpic/jst/ui/activity/BaseActivity;
.source "ServerListActivity.java"

.class <访问权限> [关键修饰字] <类名>;
.super <父类名>;
.source <源文件名>

相当于public class ServerListActivity extends BaseActivity
.class指令表示当前的类名,类的访问权限是public,类名为Lcom/cpic/jst/ui/activity/ServerListActivity,类开头的L是遵循Dalvik字节码的规范,表示后面是一个类。

.super指定了当前类所继承的父类,后面指的就是这个父类的类名。

.source指定了当前类的源文件名。

# interfaces
.implements Landroid/text/TextWatcher;

# interfaces是注释,表示后面是一个interface。
.implements是接口关键字。

# static fields
.field public static final REQUEST_CODE_TO_SERVERLISTDETAILSACTIVITY:I = 0x7d8


# instance fields
.field public adapter:Lcom/cpic/jst/ui/adapter/HadVisitedListAdapter;

.field private address:Ljava/lang/String;

经过上述叙述,应该明白此处# static fields为注释,一个静态字段,# instance fields注释为一个非静态字段,address为一个private的字段,现在拉取完整的smali和java代码作对比,如下:

public class ServerListActivity extends BaseActivity
  implements TextWatcher
{
  public static final int REQUEST_CODE_TO_SERVERLISTDETAILSACTIVITY = 2008;
  public HadVisitedListAdapter adapter;
  private String address;
}
.class public Lcom/cpic/jst/ui/activity/ServerListActivity;
.super Lcom/cpic/jst/ui/activity/BaseActivity;
.source "ServerListActivity.java"

# interfaces
.implements Landroid/text/TextWatcher;


# static fields
.field public static final REQUEST_CODE_TO_SERVERLISTDETAILSACTIVITY:I = 0x7d8


# instance fields
.field public adapter:Lcom/cpic/jst/ui/adapter/HadVisitedListAdapter;

.field private address:Ljava/lang/String;

smali2java

对于没有加壳加密处理过的apk,我们还可以直接通过smali2java来实现反编译,如果去深挖smali2java会发现,其实smali2java就是apktool的界面化操作,通过apktool反编译,再去把smali读取出来,smali2java不仅仅可以把整个apk读取出来,还能打开单独的smali文件然后转成java文件。

android逆向分析之从smali到java_第1张图片

android逆向分析之从smali到java_第2张图片

但是打开源码后,会有一些资源文件已经成了一些十六进制的代码呈现在我们眼前,这就蛋疼了,天知道这是啥呢?

android逆向分析之从smali到java_第3张图片

android逆向分析之从smali到java_第4张图片

少年别急,这些都是小问题。

android逆向分析之从smali到java_第5张图片

android逆向分析之从smali到java_第6张图片

通过刚刚的十六进制便可以在public中找到对应的名称。

对于单独一个smali文件转java文件,点击 文件–>处理单个smali文件,找到需要转换的smali文件后确定,弹窗显示smali反编译为java成功。

工具链接(apktool、dex2jar、jdgui、Smali2Java)

你可能感兴趣的:(Android路上)