android逆向分析之从smali到java

2017-01-13 15:00:28来源:csdn作者:pangpang123654人点击

通过上一篇 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)


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台