dex 反编译(附脚本)

2 篇文章 0 订阅

nix.long 于 2017-10-20

1.[注意]不要使用JDK1.8及以上
2.[流程].java -> .class -> .dex --> .smali

0. Demo

public class Main{
    void main(String args[]){
        int i = 0;
        i = 5;
        return;
    }
}

1.javac

编译 .class

javac Main.java

2.生成Dex

使用Android dx.jar包将.class转换为.dex, dx.jar一般位于 android-sdk\build-tools* 下面

java -jar dx.jar --dex --output=Main.dex Main.class

3. Samli

使用smali包工具将dex文件转换为smali:
java -jar baksmali.jar Main.dex

此时会生成一个out目录,在out目录下的Main.smali就是我们要看到的smali代码了

.class public LMain;
.super Ljava/lang/Object;
.source "Main.java"
# direct methods
.method public constructor <init>()V
    .registers 1
    .prologue
    .line 2
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    return-void
.end method
# virtual methods
.method main([Ljava/lang/String;)V
    .registers 2
    .prologue
    .line 5
    .line 7
    return-void
.end method

4. 涉及工具

  • apktool:
    是apk格式文件与smali文件的转换

  • dex2jar:
    是dex格式文件与jar文件的转换

  • smali/baksmali:
    是dex格式文件与smali文件的转换

5. Bat脚本

java2smali.bat

REM =====================================================================
REM Author:     nix.long
REM Date:        2017.10.17
REM Function:     compile x.java to dalvik smali code    
REM =====================================================================

@echo off
if "%1"=="" (
    goto help
)
set input=%1
set baksmali=baksmali-2.1.3.jar
IF %input% == help (
    goto help
) ELSE IF %input% == clean (
    IF EXIST *.class (
        del /f /s /q *.class
    )
    
    IF EXIST *.dex (
        del /f /s /q *.dex
    )
    
    IF EXIST *.smali (
        del /f /s /q *.smali
    )
) ELSE (
    IF EXIST %input%.class (
        del /f /s /q %input%.class
    )
    
    IF EXIST %input%.dex (
        del /f /s /q %input%.dex
    )
    
    IF EXIST %input%/%input%.smali (
        del /f /s /q %input%\%input%.smali
    )
    
    echo 'to make:'  %input%.java
    echo 'to gen class:'  %input%.class
    javac %input%.java
    echo 'to gen dex:'  %input%.dex
    java -jar dx.jar --dex --output=%input%.dex %input%.class
    java -jar %baksmali% -o %input% %input%.dex
    echo 'gen smali ok...'
)
goto end
:help
    echo -----------------------------------------------------------------
    echo     help [dalvik smali]:
    echo        java2smali.bat help     - show help
    echo        java2smali.bat clean    - clean mid-files
    echo        java2smali.bat X        - gen smali file for X.java
    echo -----------------------------------------------------------------
:end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值