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文件。

这里写图片描述

这里写图片描述

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

这里写图片描述

这里写图片描述

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

这里写图片描述

这里写图片描述

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

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

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

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值