什么是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. 执行命令 java -jar apktool.jar d xxx.apk
如果apk没有加固,执卖握行完命令,就能看到反编译后的smali文件,可以阅读这些smali文件.
2. 打包命令滑裂 java -jar apktool.jar b 解包后的目录 >xxx.apk
可以执行打包命令,将解包,修改后的smali再打包. 如果需要调试,需要在AndroidManifest.xml文件中,加上debugable.
此时得到的apk包没有签名,需要签名后才能安装
3. 签名 jarsigner -verbose -keystore .\xxx.jks -signedjar signed.apk xxx.apk 'benzhuo'
输入密码后,签名完毕,签名后的包是signed.apk,安装这个包.
1. 执行 java -jar apktool.jar d signed.apk. 解压刚才签名的安装包
2. 用Android Studio 打开解压后的文件夹,此时需要设置一下工程的SDK.
3. 连接上测试手机, 执行命令 adb shell am start -D -W -n 包名/LauncherActivity ,以debug模式打开应用,此时手机上打开应用会d出提示框, Waiting For Debugger.
4. 点击Android Studio的Attach Debugger 按钮.
5. 选择中让庆调试的程序,然后就可以调试了
6. 修改了Smali文件之后,需要重新打包,然后安装在手机上,再调试.
1. 原始类型
|smali类型|java类型|
|----|---|
|B|byte|
|C|char|
|D|double|
|F|float|
|I|int|
|J|long|
|S|short|
|V|void|
|Z|boolean|
|[x| x类型数组|
|Lpackage/Object|对象|
2. 方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)