精华内容
下载资源
问答
  • Android smali语法

    千次阅读 2019-03-09 16:57:42
    smali语法介绍及其用法

    smali语法


    本文由 Luzhuo 编写,转发请保留该信息.
    原文: https://blog.csdn.net/Rozol/article/details/88368358


    smali是什么, 官方的简介

    smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android’s Java VM implementation. The syntax is loosely based on Jasmin’s/dedexer’s syntax, and supports the full functionality of the dex format (annotations, debug info, line info, etc.)
    smali / baksmali是Android的Java VM实现dalvik使用的dex格式的汇编程序/反汇编程序。语法松散地基于Jasmin的/ dedexer的语法,并支持dex格式的全部功能(注释,调试信息,行信息等)

    Java代码

    public int show(String str){
        return 1;
    }
    

    smali代码

    # virtual methods
    .method public show(Ljava/lang/String;)I
        .locals 1
        .param p1, "str"    # Ljava/lang/String;
    
        .line 22
        const/4 v0, 0x1
    
        return v0
    .end method
    

    数据类型 / 对象 / 数组 的写法, 对于经常JNI开发的童鞋肯定非常熟悉, 没错, 跟javap生成签名类型是一样的.

    数据类型

    smali类型java类型Description
    Vvoid (用于返回类型)-
    Zboolean不同
    Bbyte-
    Sshort-
    Cchar-
    Iint-
    Jlong (64 bits)不同
    Ffloat-
    Ddouble (64 bits)-

    运算

    smali

    mul-int v0, p1, p2
    

    add-int / add-long / add-float / add-double / add-int/lit16 / add-int/lit8

    smali运算符Descriptionintlongfloatdouble
    add-int v0, p1, p2v0 = p1 + p2
    sub-int v0, p1, p2v0 = p1 - p2
    mul-int v0, p1, p2v0 = p1 * p2
    div-int v0, p1, p2v0 = p1 / p2
    rem-int v0, p1, p2v0 = p1 % p2
    and-int v0, p1, p2v0 = p1 & p2××
    or-int v0, p1, p2v0 = p1 │ p2××
    xor-int v0, p1, p2v0 = p1 ^ p2××
    shl-int v0, p1, p2v0 = p1 << p2××
    shr-int v0, p1, p2v0 = p1 >> p2××
    ushr-int v0, p1, p2v0 = p1 >>> p2××
    add-int/2addr v0, v1v0 = v0 + v1
    sub-int/2addr v0, v1v0 = v0 - v1
    mul-int/2addr v0, v1v0 = v0 * v1
    div-int/2addr v0, v1v0 = v0 / v1
    rem-int/2addr v0, v1v0 = v0 % v1
    and-int/2addr v0, v1v0 = v0 & v1××
    or-int/2addr v0, v1v0 = v0 │ v1××
    xor-int/2addr v0, v1v0 = v0 ^ v1××
    shl-int/2addr v0, v1v0 = v0 << v1××
    shr-int/2addr v0, v1v0 = v0 >> v1××
    ushr-int/2addr v0, v1v0 = v0 >>> v1××
    add-int/lit16 v0, v1, lit16v0 = v1 + lit16×××
    sub-int/lit16 v0, v1, lit16v0 = v1 - lit16×××
    mul-int/lit16 v0, v1, lit16v0 = v1 * lit16×××
    div-int/lit16 v0, v1, lit16v0 = v1 / lit16×××
    rem-int/lit16 v0, v1, lit16v0 = v1 % lit16×××
    and-int/lit16 v0, v1, lit16v0 = v1 & lit16×××
    or-int/lit16 v0, v1, lit16v0 = v1 │ lit16×××
    xor-int/lit16 v0, v1, lit16v0 = v1 ^ lit16×××
    add-int/lit8 v0, v1, lit8v0 = v1 + lit8×××
    sub-int/lit8 v0, v1, lit8v0 = v1 - lit8×××
    mul-int/lit8 v0, v1, lit8v0 = v1 * lit8×××
    div-int/lit8 v0, v1, lit8v0 = v1 / lit8×××
    rem-int/lit8 v0, v1, lit8v0 = v1 % lit8×××
    and-int/lit8 v0, v1, lit8v0 = v1 & lit8×××
    or-int/lit8 v0, v1, lit8v0 = v1 │ lit8×××
    xor-int/lit8 v0, v1, lit8v0 = v1 ^ lit8×××
    shl-int/lit8 v0, v1, lit8v0 = v1 << lit8×××
    shr-int/lit8 v0, v1, lit8v0 = v1 >> lit8×××
    ushr-int/lit8 v0, v1, lit8v0 = v1 >>> lit8×××

    类名

    smali类名java类名
    Ljava/lang/String;java.lang.String
    Ljava/lang/Object;java.lang.Object
    L全/类/名;全.类.名

    smali类名写法要注意, 最前面L开头, 最后;结尾

    数组

    smali数组Java数组
    [Iint[]
    [[Iint[][]
    [Ljava/lang/String;String[]

    smali数组在类型左侧加[号, 几维就加几个, 最多255维.

    类的定义

    Java代码

    public class BaseData {
        public int add(int x, int y){
            return x * y;
        }
    }
    

    Smali代码

    .class public Lme/luzhuo/smalidemo/BaseData; // 本类
    .super Ljava/lang/Object; // 父类
    .source "BaseData.java" // 文件名
    
    
    # direct methods
    // 构造方法, 方法名为<init>
    .method public constructor <init>()V
        .locals 0
    
        .line 20
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        return-void
    .end method
    
    
    # virtual methods
    // 普通方法 / add:方法名 / II:返回类型 / I:返回类型
    .method public add(II)I
        .locals 1
        .param p1, "x"    # I  // 参数
        .param p2, "y"    # I
    
        .line 26 // 该函数在原.source中的位置(含注释)
        mul-int v0, p1, p2
    
        return v0
    .end method
    

    类的定义: 本类 / 父类 / 文件名

    .class public Lme/luzhuo/smalidemo/BaseData; // 本类
    .super Ljava/lang/Object; // 父类
    .source "BaseData.java" // 文件名
    

    属性的定义: 属性名 / 属性类型

    # static fields
    // 属性: .field 修饰符 属性名:属性类型
    .field private static final TAG:Ljava/lang/String; = "PropActivity"
    

    方法的定义: 方法名 / 参数类型 / 参数名 / 返回类型 / 返回值

    // 方法: .method 修饰符 方法名(参数类型)返回类型
    .method public add(II)I
        .locals 1
        .param p1, "x"    # I  // 参数名
        .param p2, "y"    # I
    
        return v0  // 返回值
    .end method
    
    返回指令Description
    return-void直接返回
    return v0返回v0
    return-object v0返回v0(对象)
    return-wide v0给v0(双寄存器的值)

    特殊的方法:

    // 构造方法
    .method public constructor <init>()V
    .end method
    
    // 静态方法
    .method public static final constructor <clinit>()V
    .end method
    

    调用方法:

    const/4 v0, 0x3
    const/4 v1, 0x5
    
    // 调用方法: 类->方法
    invoke-virtual {p0, v0, v1}, Lme/luzhuo/smalidemo/BaseData;->add(II)I
    
    调用指令Description案例
    invoke-virtual调用一般方法invoke-virtual {p0, v0, v1}, Lme/luzhuo/smalidemo/BaseData;->add(II)I
    invoke-super调用父类方法invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V // super.onCreate(savedInstanceState);
    invoke-direct调用private/构造方法invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    invoke-static调用静态方法invoke-static {}, Lme/luzhuo/smalidemo/BaseData;->aaa()V
    invoke-interface调用interface方法invoke-interface {v0}, Lme/luzhuo/smalidemo/Inter;->mul()V

    寄存器

    方法内部先声明寄存器数量, 然后再写代码

    .method public add(II)I
        .locals 1
        .param p1, "x"    # I
        .param p2, "y"    # I
    
    	// 先完成上面部分的声明, 然后在这些代码
        .line 26
        mul-int v0, p1, p2
    
        return v0
    .end method
    

    寄存器的声明方式

    .locals 0  // 声明不算参数, 需要加几个寄存器
    .registers 0  // 声明算上参数, 一共需要几个寄存器
    

    寄存器命名规则

    v0 v1 v2 v... // .locals 寄存器的命名
    p0 p1 p2 p... // .registers 寄存器的命名
    

    .registers不用声明, .locals要声明
    有参数, 用p表示第几个参数所占的寄存器, 从1开始

    给寄存器赋值:

    const/4 v0, 0x3
    const-string v0, "\u4f60\u88ab\u6211\u53cd\u7f16\u8bd1\u5566\u002c\u0020\u54c8\u54c8\u54c8\u54c8"
    
    常量指令Description案例
    const(/4, /16, ,/high16) vx, num把nun赋给vx寄存器, num为(4bit, 16bit, 32bit(int), 16bit(float))const v0, 0x3
    const-wide(/16, ,/high16) vx, num把num赋给vx和vx+, num为(?, 64bit(long), 64bit(double))const-wide v0, 0x123456L
    const-string( , -jumbo) vx, string"Unicode"字符串赋给vx (一般, 过长)const-string v0, "\u4f60\u88ab..."
    const-class vx, class将Class赋值给vxconst-class v0, LJava/lang/String;
    • boolean
      • const/4赋值, 1true, 0false
    • float/double
      • 0x16进制表示小数
      • long和double的16进制数后加L
    // smali 给寄存器赋值, 并起名(带名称的常量)
    const/16 v0, 0xa
    .local v0, "a":I
    
    // java
    int a = 0xa;
    
    // ---
    
    // smali 给寄存器赋值对象
    const/4 v2, 0x0
    new-array v2, v2, [Ljava/lang/String;
    
    // java
    new String[]
    

    值的判断指令

    // smali
    const/16 v0, 0xa
    const/16 v1, 0x14
    
    if-le v0, v1, :cond_0
    
    const/16 v0, 0x1e
    
    goto :goto_0
    
    :cond_0
    const/16 v1, 0x1e
    
    :goto_0
    
    
    // java
    if (v0 <= v1) {
    	cond_0
    }else{
    	const/16 v0, 0x1e
     	goto_0
    }
    // 翻译成人话: 等式不成立则往下执行
    // java中写 a > b, 到这里就相反, 变成 a <= b 了.
    
    指令Description
    if-eq v0, v1, :cond_0if (v0 == v1) cond_0
    if-ne v0, v1, :cond_0if (v0 != v1) cond_0
    if-gt v0, v1, :cond_0if (v0 > v1) cond_0
    if-ge v0, v1, :cond_0if (v0 >= v1) cond_0
    if-lt v0, v1, :cond_0if (v0 < v1) cond_0
    if-le v0, v1, :cond_0if (v0 <= v1) cond_0
    if-eqz v0, :cond_0if (v0 == 0) cond_0
    if-nez v0, :cond_0if (v0 != 0) cond_0
    if-gtz v0, :cond_0if (v0 > 0) cond_0
    if-gez v0, :cond_0if (v0 >= 0) cond_0
    if-ltz v0, :cond_0if (v0 < 0) cond_0
    if-lez v0, :cond_0if (v0 <= 0) cond_0

    移位指令

    smali

    .method public show()I
        const/16 v0, 0xa
        const/16 v1, 0x14
        const/4 v2, 0x0
        new-array v2, v2, [Ljava/lang/String;
    
        invoke-virtual {p0, v0, v1, v2}, Lme/luzhuo/smalidemo/BaseData;->add(II[Ljava/lang/String;)I
    
        move-result v2
    
        return v2
    .end method
    
    移位指令Description
    move( , /from16, /16) v0, v1将v1值移入到v0(4bit(int), 16bit->8bit, 16bit)
    move-wide( , /from16, /16) v0, v1将v1值移入到v0(4bit, 16bit->8bit, 16bit)
    move-object( , /from16, /16) v0, v1将v1对象指针移入到v0(4bit, 16bit->8bit, 16bit)
    move-result( , -object, -wide) v0将上条指令计算结果, 移入到v0(值, 对象指针, 双寄存器值)
    move-exception v0将异常移入到v0

    实例字段指令

    smali

    .method public static final aaa()V
        .locals 2
    
        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
    
        const-string v1, "sfsdf"
        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
    
        return-void
    .end method
    

    iget / aget / sget: 数字 / 数组 / 静态

    实例字段指令Description
    iget取值(int)
    iget-wide取值(双寄存器值)
    iget-object取值(对象指针)
    iget-boolean取值(bool)
    iget-byte取值(字节)
    iget-char取值(字符)
    iget-short取值(short)
    iput赋值(int)
    iput-wide赋值(双寄存器值)
    iput-object赋值(对象指针)
    iput-boolean赋值(bool)
    iput-byte赋值(字节)
    iput-char赋值(字符)
    iput-short赋值(short)

    其他

    注解

    smali

    .method protected onCreate(Landroid/os/Bundle;)V
        .locals 0
        .param p1    # Landroid/os/Bundle;
            .annotation build Landroid/support/annotation/Nullable;
            .end annotation
        .end param
    
    	//...
    
        return-void
    .end method
    

    java

    protected void onCreate(Bundle @Nullable savedInstanceState) {
    }
    

    创建数组

    smali

    const/4 v2, 0x0
    new-array v2, v2, [Ljava/lang/String;
    
    展开全文
  • Android smali 语法一

    千次阅读 2016-04-27 17:09:28
    一、什么是smaliAndroid程序员用Java语言开发APP,编译工具会将Java源文件(.java)编译成Dalvik可执行文件(.dex)。Android系统中Dalvik Virtual Machine 会执行该文件。smali/baksmali则是Dalvik VM可执行文件的...

    一、什么是smali

    Android程序员用Java语言开发APP,编译工具会将Java源文件(.java)编译成Dalvik可执行文件(.dex)。Android系统中Dalvik Virtual Machine 会执行该文件。smali/baksmali则是Dalvik VM可执行文件的汇编器/反汇编器。反汇编Dalvik可执行文件(.dex)后,将会得到.smali后缀文件。smali代码拥有特定的语法。
    相比于.dex文件,smali文件的语法更容易理解些。下面是.dex文件、.smali文件、.java文件三者之间的转化关系。
    这里写图片描述
    其中.dex文件和.smali文件可以通过smali/baksmali工具进行相互转换。而.smali文件无法完整转化成.java文件,可能是由于Android SDK 中dx工具将.java文件的字节码.class文件转换成.dex文件的过程中,进行了重新排列,去除了多余的信息,虽然提高了.dex文件的执行效率,却也丢失了信息,无法完全转化回去。

    二、将.java文件转化成.dex文件,在Dalvik VM中执行.dex文件

    为了将自己写的.java文件能够在Dalvik VM中执行,需要先将.java文件编译成.class文件

    //Foo.java文件
    public class Foo{
        public static void main(String [] args){
            System.out.println("Hello,world");
        }
    }

    用javac编译器对Foo.java文进行编译,生成Foo.class文件

     >javac Foo.java

    用dx工具(位于sdk\build-tools{sdk版本}\中,可以先将该路径放在Path中方便调用)将Foo.class文件转化成classes.dex文件。

    >dx --dex --output=foo.apk Foo.class 
    //the dx command accepts lists of individual class files, directories, or Jar archives. When the --output filename ends with .jar, .zip, or .apk, a file called classes.dex is created and stored inside the archive.

    用adb将foo.apk上传到安卓设备上

    >adb push foo.apk  /sdcard/

    调用Dalvik VM执行foo.jar

    >adb shell dalvikvm -cp /sdcard/foo.apk Foo
    //The -cp option sets the classpath.

    会看到输出如下结果
    这里写图片描述

    三、smali.jar与baksmail.jar的使用

    1. baksmail.jar反编译.dex文件生成.smali文件

      由 .java 文件得到 .dex 文件后,我们则可以尝试用 basksmail .jar将 .dex 文件反编译成.smali文件了。smali/baksmali下载
      先解压上节中生成foo.apk文件取出其中的classes.dex文件
      将 .dex 文件反编译成 .smali 文件,执行下面的命令:

    >java -jar baksmali.jar -o FooOutdir classes.dex

    可以看到输出文件夹 FooOutdir中有Foo.smali

    //Foo.smali文件
    .class public LFoo;
    .super Ljava/lang/Object;
    .source "Foo.java"
    
    
    # direct methods
    .method public constructor <init>()V
        .registers 1
    
        .prologue
        .line 1
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        return-void
    .end method
    
    .method public static main([Ljava/lang/String;)V
        .registers 3
    
        .prologue
        .line 3
        sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
    
        const-string v1, "Hello,world"
    
        invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
    
        .line 4
        return-void
    .end method
    

    2.smali.jar编译 .smali 文件生成 .dex文件

    用smali.jar 将上小节反编译生成的 FooOutdir文件夹中的 .smali文件编译成.dex文件。

    >java -jar smali-2.1.2.jar -o  classes.dex  FooOutdir

    本文参考自:
    [1]http://forum.xda-developers.com/showthread.php?t=2193735
    [2]smali学习笔记.pdf
    [3]Android软件安全与逆向分析 丰生强

    展开全文
  • Android Studio 调试Android Smali代码

    千次阅读 2018-08-28 17:01:20
    Android Studio 调试Smali代码首先需要在Android Studio中安装smalidea插件, 插件地址为https://bitbucket.org/JesusFreke/smali/downloads/,打开网页选择smalidea-0.05.zip进行下载,github 地址为:...

     Android Studio 调试Smali代码首先需要在Android Studio中安装smalidea插件,

    插件地址为https://bitbucket.org/JesusFreke/smali/downloads/,打开网页选择smalidea-0.05.zip进行下载,github 地址为:https://github.com/JesusFreke/smali

    下载完成打开Android Studio 进入plugins插件管理界面,选择 Install plugin from disk,选择刚下载的smalidea-0.05.zip文件,安装完成重启Android Studio。重启之后就可以在AS中调试smali代码了。

    首先编写自己的调试apk进行调试测试, 将自己的apk进行反编译,使用apktool进行反编译,apktool 命令 apktool  d -o 【解压后文件路径】app-debug.apk,解压之后会将app-debug.apk解压到设置的路径,解压之后文件目录如下:

     

    其中smali文件夹就是我们需要得到的smali文件,这个文件的内容就是需要调试的。导入 反编译后的apk到Android Studio中,打开smali文件就可以看到反编译之后的文件都是以.smali结尾的,调试设置

    选择Edit Configurations 打开后添加Remote

     

    在Port端口改为8600,保存设置。 右击项目选择Mark Director as ,选择Sources Root,之后选择File文件中的Project Structure打开之后再Project Setting中选择Project设置java Version

    设置完之后就可以进行调试工作了。

     如果想在App刚起动就开始设置断点例如自己的application中打断点,就需要以debugger形式启动,两种方法:第一种就是在smali中添加debugger代码Debug.waitForDebugger();第二种方法使用adb命令打开 adb shell am start  -D -n package/activityname 打开,然后选择就可以用AS给程序打断点进行调试了。

    展开全文
  • 在app可以反编译和重新打包的时候,可以使用log插装。 注意: 不要使用里面默认的寄存器,因为可能会报错...源smali使用了v0-v3 你就使用v4 const-string v4, "log" invoke-static {v4, p0}, Landroid/uti...

    在app可以反编译和重新打包的时候,可以使用log插装。

    注意:

    不要使用里面默认的寄存器,因为可能会报错。

    在local内加1

    .locals 4 ->
    .locals 5
    源smali使用了v0-v3
    你就使用v4
    const-string v4, "log"
        invoke-static {v4, p0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        invoke-static {v4, p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        invoke-static {v4, p2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

     long输出

    传入的时候需要传入两个寄存器

    ->sj(xx,v0,v1)V

    xx表示tag

    v0,v1表示一个long值

    输出string,long

    .method public static sj(Ljava/lang/String;J)V
        .locals 1
        .prologue
    
        invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
    
        move-result-object v0
    
        invoke-static {p0, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        return-void
    .end method

    输出string,int

    .method public static si(Ljava/lang/String;I)V
        .locals 1
    
        invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
    
        move-result-object v0
    
        invoke-static {p0, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    
        return-void
    .end method

     

    转载于:https://www.cnblogs.com/Fightingbirds/p/11428455.html

    展开全文
  • 前言大家都知道我们在逆向...C层一般会使用IDA进行调试分析,Java层常常就会需要对Smali代码进行调试分析。刚接触逆向这块,看了很多网上的方法,于是就实践了一下,在实践的过程中又有了新方法的发现,于是乎,分...
  • 原始的代码如下: 这里可以直接看到,用户名是hfdcxy,密码是1234。 如何破解,提供4个思路: 改法一:
  • 有同学在通服里面干活,最近一直忙着4g基站搭建的干活,测试设备(android)测量移动网络数据,没有自动保存记录的功能,只能手动记录各种测试参数,不知道测试软件供应商是怎样想的,竟然不提供的这样的功能!...
  • smali2java工具——直接将smali转换成java,在网上找了很久才找到了,方便后来人。
  • NULL 博文链接:https://qianjigui.iteye.com/blog/2000153
  • 注意编程语言选择java,自己设定Name和程序最低要求的Android的SDK版本 构建项目如下: 为我们的应用程序选择一个虚拟的手机,这里我选择pixel2和api level 27,system image x86的Orea的Android8,并下载。 ...
  • smali backsmail: 使用方法: java -jar baksmali-2.0.3.jar -x DeskClock.odex -d framework java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex
  • # makeText 提示 v0 控制时间#==========================================================================================const-string v2,"Cracked By PiaoYun/P.Y.G\n BBS.CHINAPYG.COM"const/4 v0, 0x5invoke...
  • 最新smali.jar(2.2.4)

    2018-06-22 12:44:33
    寻找好久的最新smali.jar,用于smali转dex工具jar包。
  • android逆向分析之从smali到java

    万次阅读 2016-10-28 16:26:26
    通过上一篇android逆向分析(一),在dex2jar的前提下,我们获取到了源码,在apktool的前提下,我们可以获取到资源和smali文件,本篇主要讲述smali几个最基本的语法和smali转java。 本片通过ServerListActivity....
  • android studio (安卓开发工具) smalidea 插件 (as的smail插件) android killer (反编译工具) zhuce.apk (测试apk) 1. 手机(类型模拟器) # adb shell am start -D -n 包名/活动页面 adb shell am ...
  • 最新版本(V2.2.5 )的smali转dex工具,及dex转smali工具。 Dex 2 Smali: java -jar baksmali-2.2.5.jar -o [输出文件夹] dex文件 Smali 2 Dex: java -jar smali-2.2.5.jar -o 目标dex文件 [smali文件夹]
  • 闲来无事,学习了下安卓的逆向工程,有助于观摩学习他人的优秀代码,查询了解后发现大体包括两部分: 1.dex反编译,即smali语法学习; 2.Native层,arm汇编学习。 反编译dex,Smali语法 工具 java环境不多说 1....
  • Android逆向世界之一:smali文件

    万次阅读 多人点赞 2017-07-15 20:45:05
    一直对android的逆向分析很感兴趣,这些年也陆陆续续反编译了一些android的项目,今天开始对这方面的知识做一下总结。先从android的apk文件开始讲起。APK文件android工程编译完成会得到我们想要的apk安装包,apk文件...
  • Android sdk 中提供的一个可以全面监控安卓程序的应用。 2.jd-GUI 可以把smali自动转化为java代码的工具,对于一些小型的apk软件很好用。 3.jeb 一个大型的smali代码反编译工具 mali代码反编译工具 ...
  • Androidsmali文件转为jar包

    千次阅读 2020-07-02 14:17:08
    在我们用apktool反编译拿到apk的smali代码之后,这个时候如果需要将smali文件转成jar包的话,需要以下两个工具: 1.smali.jar 2.dex2jar-2.0 下载地址:https://pan.baidu.com/s/1NJYTUpH_2kr3_KUfpvmcGQ 提取码...
  • 1.简介smalidea是一个IntelliJ IDEA/Android Studio smali语言插件,可实现动态调试smali代码。下载地址为:https://github.com/JesusFreke/smali/wiki/smalidea。Android Studio的安装,就是傻瓜式的安装,一路next...
  • 我在安兔兔启动Activity(com.antutu.CpuMaster.LoadingActivity)的反编译的smali文件的onCreate中插入了以下代码: ``` new-instance v1, Landroid/content/Intent; invoke-virtual {p0}, Lcom/antutu/CpuMaster/...
  • 安卓广播 转载请注明出处:http://blog.csdn.net/zhouli_csdn/article/details/45645743广播是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的广 android之Java+html+javascript...
  • 0X01 smali语言简述smali语言是Dalvik的反汇编语言因Android虚拟机Dalvik不是执行java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是smali代码。接触过Android逆向...
  • Android studio动态调试smali

    千次阅读 2019-02-21 14:42:19
    Android Studio最新版。 ②apktool尽量使用最新版的。 ③ideasmali插件。下载地址https://github.com/JesusFreke/smali/wiki/smalidea 首先第一步需要在as里面安装ideasmali的插件   装完重启之后。 我们将...
  • 1、工具介绍 使用工具 android killer:用于反编译apk包,得到smali...android studio:调试smali代码工具,或者使用idea,android studio就是在idea的基础上修改的 smalidea-0.03.zip: as插件,需要安装到and...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,577
精华内容 3,430
关键字:

安卓smali