什么是smali 文搏桥磨件
Android程序文件, 即apk文件, 其实是一个zip压缩包, 其文件结构如下:
其中, classes.dex是程序的核心文件,是java语言的代码编译后的二进制字节码程序。这种字节码程序是编译专供机器阅读的, 类似于汇编语言的机器码。然而如果想直接阅读这部分程序, 最好的方法就是将该文件转化为smali文件。
apktool
著名的反编译工具 apktool 就可以完成这部分工作。 它将classes.dex文件反编译成一堆的smali文件, 这些文件按源码的包结构保存在各自的文件夹中。如下所示:
另外, apktool 工具强大之处在于它不仅可以反编译apk文件, 而且可以根据现有的smali 文件生成新的apk文件。 这就给汉化apk或者去除apk内嵌广告提供了可能。
smali语法类似于汇编语言的语法, 涉及寄存器的直接 *** 作, 可以直接阅读, 但羞涩难懂, 尤其是在代码混淆之后。
dex2jar
有人做了一个专门的工具 dex2jar 将classes.dex 转化为jar 文件, 通过 jd-gui 阅读。
但dex2jar 并不健全, 反编译出的java文件大部分都有编译错误。可以简单的阅读和分析, 但若是涉及到很细致的内容, 则还是需要依赖smali。 smali 文件的编辑器推荐使用 sublime + sublime-smali ,基斗 具体请参考文章 为Sublime Text安装smali代码语法高亮插件 。
1,首先得下载SublimeText2,安装好后,需要去给它安装一个插件包塌姿
3,点击Install Now 按钮后进入,然后复制斗早对应的版本下的代码
4,打开SublimeText 按下快捷键 ctrl+~,或者打开菜单栏View点击Hide Console 显示控制台,并将第3步中复制的代码粘贴到控制栏并按Enter键确认,然后重新开启SublimeText
5,打开SublimeText,我们可以看到在Preferences下多了一个菜单Package Control,好了那么就点击这个菜单(Package Control)就会d出界面
6,在d出框中点击Package Control:Install Package这一行,就会d出提团销绝示,然后直接输入smali
7,搜到后就直接点击Smali这一行,它就已经装了,然后分分钟后就好了,你可以随意打开一个反编译的apk文件中的smali文件了,还自带高亮显示哦!
smali2java是一个渗陪将smali代码反编译成java代码的工具。smali2java工具基于apktool v1.5.0(baksmali v1.3.4)生成的smali文件,依赖于smali文件中的代码行数(.line关键字)和变量别名(.local关键字)等信息,可以最大程度还原原始的java代码。还原出的java代码将具有原始的变量命名,代码的顺序也与原始的java代码保持一致。
本工具也具有局限性,仅适用于带有行数和变量别名信息的smali文件丛逗蠢(java编译器指或的编译选项可以在生成的字节码中剔除这些信息)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)