简体   繁体   English

将消息添加到Smali文件或将Java转换为Smali

[英]Add message to Smali file OR convert Java to Smali

Hi I want to add a messsage into this Smali file but I dont understad how its works. 嗨,我想在此Smali文件中添加一个消息,但我不了解其工作原理。 I cant convert my Java code to Smali. 我无法将Java代码转换为Smali。

I want to show my V2 variable. 我想显示我的V2变量。 I Try this: invoke-virtual {v2}, Landroid/widget/Toast;->show()V 我尝试这样:invoke-virtual {v2},Landroid / widget / Toast;-> show()V

But doesnt work... The app crashes when start. 但是不起作用...启动时应用程序崩溃。 Thanks you, I apreciate any help! 谢谢,谢谢您的帮助!

The Entery code: 输入代码:

.class public final Lcom/sube/subemobileclient/b/b/b/b/b/a$a;
.super Ljava/lang/Object;


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lcom/sube/subemobileclient/b/b/b/b/b/a;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x9
    name = "a"
.end annotation


# instance fields
.field public a:B

.field public b:B

.field public c:[B


# direct methods
.method public constructor <init>()V
    .locals 0

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public constructor <init>(BB[B)V
    .locals 0

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    iput-byte p1, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->a:B

    iput-byte p2, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->b:B

    iput-object p3, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->c:[B

    return-void
.end method


# virtual methods
.method public final toString()Ljava/lang/String;
    .locals 3

    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Sector: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    iget-byte v2, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->a:B

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string v1, "line.separator"

    invoke-static {v1}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Key Type: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    iget-byte v2, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->b:B

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string v1, "line.separator"

    invoke-static {v1}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Key: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    iget-object v2, p0, Lcom/sube/subemobileclient/b/b/b/b/b/a$a;->c:[B

    invoke-static {v2}, Ljava/util/Arrays;->toString([B)Ljava/lang/String;





    **HEREHEREHERE**  So message to display = "Key: ...." 




    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    const-string v1, "line.separator"

    invoke-static {v1}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

.end method

JAVA JAVA

   public final String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        StringBuilder stringBuilder2 = new StringBuilder("Sector: ");
        stringBuilder2.append(this.f892a);
        stringBuilder.append(stringBuilder2.toString());
        stringBuilder.append(System.getProperty("line.separator"));
        stringBuilder2 = new StringBuilder("Key Type: ");
        stringBuilder2.append(this.f893b);
        stringBuilder.append(stringBuilder2.toString());
        stringBuilder.append(System.getProperty("line.separator"));
        stringBuilder2 = new StringBuilder("Key: ");
        stringBuilder2.append(Arrays.toString(this.f894c));
        stringBuilder.append(stringBuilder2.toString());
        stringBuilder.append(System.getProperty("line.separator"));
        return stringBuilder.toString();
    }

You can generate Smali code from Java just like from any Android App. 您可以像使用任何Android App一样从Java生成Smali代码。 Therefore you can simply write a very small Android app that contains your code. 因此,您只需编写一个包含您的代码的非常小的Android应用即可。

Create a simple app in AndroidStudio that contains the code. 在AndroidStudio中创建一个包含代码的简单应用。 Build the app and the decompile the apk file using apktool and you have your Java code converted to Smali code. 构建应用程序,然后使用apktool反编译apk文件,然后将Java代码转换为Smali代码。

The easiest way should be to create a new function that can then be injected into the existing Smali code and called from an existing function. 最简单的方法应该是创建一个新函数,然后将其插入现有的Smali代码中并从现有函数中调用。

Or the same way but using some shortcuts: 或以相同的方式,但使用一些快捷方式:

.java --> .class --> dex -> smali .java-> .class-> dex->​​ smali

Compile Java to a class file (AFAIR you have to use Java 7 as target). 将Java编译为类文件(必须使用Java 7作为目标文件)。 Then convert the code to a dex file using dx (java -jar dx.jar ) tool from Android SDK. 然后使用Android SDK中的dx (java -jar dx.jar )工具将代码转换为dex文件。 And in the end decompile it with apktool . 最后使用apktool对其进行反编译。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM