smali编译
① 有的安卓程序反编译后是samli文件,这是程序员直接用smali语言写的,还是是用java写的
您好,
1、原始类型:
v void 只能用于返回值类型
Z boolean
B byte
S short
C char
I int
J long(64位)
F float
D double(64位)
对象类型:
Lpackage/name/ObjectName相当于java中的package.name.ObjectName解释如下:
L:表示这是一个对象类型
package/name:该对象所在的包
;:表示对象名称的结束
数组的表示形式:
[I :表示一个整形的一维数组,相当于java的int[];
对于多维数组,只要增加[ 就行了,[[I = int[][];注:每一维最多255个;
对象数组的表示形式:
[Ljava/lang/String 表示一个String的对象数组;
方法的表示形式:
Lpackage/name/ObjectName;——>methodName(III)Z 详解如下:
Lpackage/name/ObjectName 表示类型
methodName 表示方法名
字段的表示形式:
Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String;
即表示: 包名,字段名和各字段类型
方法的传参:
当一个方法被调用的时候,方法的参数被置于最后N个寄存器中;
例如,一个方法有2个参数,5个寄存器(v0~v4)
那么,参数将置于最后2个寄存器(v3和v4)
非静态方法中的第一个参数总是调用该方法的对象;
说明:对于静态方法除了没有隐含的this参数外,其他都一样
寄存器的命名方式:
V命名
P命名 第一个寄存器就是方法中的第一个参数寄存器
比较:使用P命名是为了防止以后如果在方法中增加寄存器,需要对参数寄存器重新进行编号的缺点:
特别说明一下:Long和Double类型是64位的,需要2个寄存器
例如:对于非静态方法
LMyObject——>myMethod(IJZ)V;
有4个参数:LMyObject,int,long,bool; 需要5个寄存器来存储参数;
P0 this
P1 I (int)
P2,P3 J (long)
P4 Z(bool)
② apk反编译后smali文件怎么查看
1,首先得下载SublimeText
2,安装好后,需要去给它安装一个插件包
3,点击Install Now 按钮后进入,然后复制对应的版本下的代码
4,打开SublimeText 按下快捷键 ctrl+~,或者打开菜单栏View点击Hide Console 显示控制台,并将第3步中复制的代码粘贴到控制栏并按Enter键确认,然后重新开启SublimeText
5,打开SublimeText,我们可以看到在Preferences下多了一个菜单Package Control,好了那么就点击这个菜单(Package Control)就会弹出界面
6,在弹出框中点击Package Control:Install Package这一行,就会弹出提示,然后直接输入smali
7,搜到后就直接点击Smali这一行,它就已经装了,然后分分钟后就好了,你可以随意打开一个反编译的apk文件中的smali文件了,还自带高亮显示哦!
③ 安卓反编译出来的都是.smali文件,怎么反编译位原工程啊修改后还能重新编译回去
反编译步骤:
下载apktool 并设置环境变量
命令行进入apk目录执行:apktool d xx.apk (如果遇到一些错误说明apk做了防破解处理)
执行成功后会生成xx文件夹,进入xx文件夹修改需要修改的内容,如果需要修改代码,进入xx\smali\里面,需要懂一些smali语法
修改完后回到命令行,执行:apktool b xx ,会在xx文件夹里面生成一个dist文件夹,里面的apk就是回编译的,这个apk是没有签名的
下载网上的签名工具对apk签名,完了就可以安装了(如果你下载了源码或者sdk,里面自带一个signapk也可以签名)
④ 求安卓软件反编译修改教程
1、baksmali:classes.dex反编译为smali格式
(smali:smali格式编译打包为classes.dex,但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助 )
2、dex2jar:classes.dex转为jar包
3、jdgui:jar反编译并阅读
操作顺序:
apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。注意安装时要先删除原来手机里的版本,因为签名不同。
⑤ apk反编译后,有了smali文件,我用工具导出了java源码后并修改了源码,如何编译打包回apk文件
https://github.com/ollide/intellij-java2smali
IntelliJ IDEA 或者android studio的一个插件。
可以把java转smali,前提是没有语法错误。

