• Apktool 和 Jeb 给出的不同的smali语法


      今天发现用Apktool和Jeb反编译出来的smali在语法上有一定区别,比如一个Java函数:

        private void packageNameCheck()
        {
            com.example.testfor360.MainActivity mm = new com.example.testfor360.MainActivity();
            mm.packageNameCheck();
        }

    用Jeb反编译出来是这样的:

    .method private packageNameCheck()V
              .registers 2
              .prologue
    00000000  new-instance            v0, MainActivity
    00000004  invoke-direct           MainActivity-><init>()V, v0
              .local v0, mm:Lcom/example/testfor360/MainActivity;
    0000000A  invoke-virtual          MainActivity->packageNameCheck()V, v0
    00000010  return-void
    .end method

    而用Apktool反编译出来是这样的:

    .method private packageNameCheck()V
        .locals 1
    
        .prologue  #代码起始指令
        .line 80
        new-instance v0, Lcom/example/testfor360/MainActivity;
    
        invoke-direct {v0}, Lcom/example/testfor360/MainActivity;-><init>()V
    
        .line 81
        .local v0, mm:Lcom/example/testfor360/MainActivity;
        invoke-virtual {v0}, Lcom/example/testfor360/MainActivity;->packageNameCheck()V
    
        .line 82
        return-void  #返回空
    .end method

    仅仅这一小段看来,有这些区别:

    1.Apktool的smali中所有的类都用了完整路径名(L打头),并且以分号结束,包括后面;-><init>的之前,也加了分号;而Jeb只写了类名,并且不带分号

    2.方法调用指令invoke-direct中,Apktool把寄存器放到了前面,并且用open brace "{" 和 close brace"}"括起来了;Jeb把寄存器放到了后面,没有大括号

    另外,Apktool里的.line在Jeb里也没有出现。

    再另外,APKIDE反编译出来的和Apktool基本一致,不同的地方是new出来的对象mm他给加了双引号。看了下APKIDE目录下就有APKTOOL文件夹,基本确定就是用Apktool反编译的,只是Apktool版本不同罢了。

  • 相关阅读:
    浏览器缓存
    HTML学习笔记(九) Web Socket
    [转]maven2中snapshot快照库和release发布库的区别和作用
    [转]maven2中snapshot快照库和release发布库的应用
    CentOS 7 mini 试用笔记
    Windows找出占用端口的进程
    ORA-24408: could not generate unique server group name
    Oracle中NVL、NVL2、NULLIF 三个函数的区别?
    【代码大全-读书笔记】第1章 欢迎进入软件构建的世界
    【代码大全-读书笔记】前言
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3985054.html
Copyright © 2020-2023  润新知