Zero

做好眼前事,珍惜眼前人。。。

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)

阅读更多

扫码向博主提问

去开通我的Chat快问

pangpang123654

博客专家

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Android
  • 设计模式
  • 架构
  • java
版权声明:本文为博主原创文章,未经博主允许不得转载。邮箱596878238@qq.com。 https://blog.csdn.net/pangpang123654/article/details/52957362
个人分类: Android路上
想对作者说点什么? 我来说一句

smalijava

2017年10月17日 364KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭