Android逆向基础知识Smali
什么是Smali:
我们用工具反编译一些APP的时候,会看到一个smali文件夹,里面其实就是每个Java类所对应的smali文件。Android虚拟机Dalvik并不是执行java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是smali代码,可以说,smali语言是Dalvik的反汇编语言
JAVA和Smali数据类型对比:
JAVA Smali
V void
Z boolean
B byte
S short
C char
I int
J long
F float
D double 引用类型
L 对象
[ 数组
语法:
.field 定义变量 .method 方法 .parameter 方法参数 .prologue 方法开始 .line 此方法位于第12行 invoke-super 调用父函数 const/high16 v0, 0x7fo3 把0x7fo3赋值给v0 invoke-direct 调用函数 return-void 函数返回void .end method 函数结束 new-instance 创建实例 iput-object 对象赋值 iget-object 调用对象 invoke-static 调用静态函数
smali跳转语句 “if-eq vA, vB, :cond_**” 如果vA等于vB则跳转到:cond_** “if-ne vA, vB, :cond_**” 如果vA不等于vB则跳转到:cond_** “if-lt vA, vB, :cond_**” 如果vA小于vB则跳转到:cond_** “if-ge vA, vB, :cond_**” 如果vA大于等于vB则跳转到:cond_** “if-gt vA, vB, :cond_**” 如果vA大于vB则跳转到:cond_** “if-le vA, vB, :cond_**” 如果vA小于等于vB则跳转到:cond_** “if-eqz vA, :cond_**” 如果vA等于0则跳转到:cond_** “if-nez vA, :cond_**” 如果vA不等于0则跳转到:cond_** “if-ltz vA, :cond_**” 如果vA小于0则跳转到:cond_** “if-gez vA, :cond_**” 如果vA大于等于0则跳转到:cond_** “if-gtz vA, :cond_**” 如果vA大于0则跳转到:cond_** “if-lez vA, :cond_**” 如果vA小于等于0则跳转到:cond_**
DEMO:
java代码
private boolean show(){
boolean tempFlag = ((-)==)? true : false;
if (tempFlag) {
return true;
}else{
return false;
}
} 转换smali代码
.method private show()Z
.locals .prologue //方法开始
.line
const/ v0, 0x1 // v0赋值为1 .line
.local v0, tempFlag:Z
if-eqz v0, :cond_0 // 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支 .line
const/ v1, 0x1 // 符合条件分支 .line
:goto_0
return v1 :cond_0
const/ v1, 0x0 // cond_0分支 goto :goto_0
.end method
参考:
http://blog.csdn.net/lostinai/article/details/48975661
http://blog.csdn.net/sjim_/article/details/50443860
Android逆向基础知识Smali的更多相关文章
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
[系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...
- android图形基础知识
Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...
- Android 应用基础知识和应用组件
应用基础知识 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户: 默认情况下,系统会为每个应 ...
- Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)
简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...
- android逆向基础:apk 反编译 重打包 重签名
apk 反编译大家都比较熟悉,这里只做一个笔记. 1 反编译 apk apktool d perfect.apk 这样就把资源文件解压缩了, classes.dex 也反编译成了 smali 文件 2 ...
- Android逆向利器和smali代码修改出错举例-入参类型
当smali修改代码出错举例1,log如下: 虚拟机层次: 1.本身做出了预测,寄存器v2是符合要求入参,暗示你这个也许是你想要的.VFY: register1 v2 type 17, wanted ...
- 4. 移动安全渗透测试-(Android逆向基础)
4.1 smali 基础 1.注释 smali中使用#来代表注释一行例如:# const-string v0, "aaa" #这句不会被执行 2.数据类型 V void,只能用于返 ...
- Android逆向基础----Android Dalvik虚拟机
Android Dalvik虚拟机的特点: l 体积小,占用内存空间小. l 专有DEX可执行文件. l 常量池采用32位索引值,寻址类方法名,字段名,常量更快. l 基于寄存器架构,并拥有一 ...
- Android逆向基础----APK文件结构
参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html http://blog.csdn.net/bupt07 ...
随机推荐
- (转)OpenStack Kilo 版本中 Neutron 的新变化
OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...
- demo(幸福大转盘)总结
百度推广首页demo 在<head>与</head>之间加入代码 <link rel="shortcut icon" href="favic ...
- Redis源码分析:serverCron - redis源码笔记
[redis源码分析]http://blog.csdn.net/column/details/redis-source.html Redis源代码重要目录 dict.c:也是很重要的两个文件,主要 ...
- 强制关闭iPhone iPad AppleWatch MacOS
iPhone/iPad 强制关闭APP:按住Power(电源键),出现关机界面松开,按住Home键9秒左右. 强制重启/关机:同时按住Power和Home键几秒后重启,出现logo时松开Home继续按 ...
- C# 教程(基础理论部分出自网络,一些上机结果为原创)
C# 教程 C# 是一个简单的.现代的.通用的.面向对象的编程语言,它是由微软(Microsoft)开发的. 本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念.
- ubuntu16.04下安装配置深度学习环境(Ubuntu 16.04/16.10+ cuda7.5/8+cudnn4/5+caffe)
主要参照以下两篇博文:http://blog.csdn.net/g0m3e/article/details/51420565 http://blog.csdn.net/xuzhongxiong/a ...
- windows文件名非法字符过滤检测-正则表达式
过滤文件名非法字符 windows现在已知的文件名非法字符有 \ / : * ? " < > | var reg = new RegExp('[\\\\/:*?\"&l ...
- Spark入门实战系列
转自:http://www.cnblogs.com/shishanyuan/p/4699644.html 这一两年Spark技术很火,自己也凑热闹,反复的试验.研究,有痛苦万分也有欣喜若狂,抽空把这些 ...
- vue-router导航守卫
导航守卫 译者注 “导航”表示路由正在发生改变. 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件 ...
- 「新手向」koa2从起步到填坑
前传 出于兴趣最近开始研究koa2,由于之前有过一些express经验,以为koa还是很好上手的,但是用起来发现还是有些地方容易懵逼,因此整理此文,希望能够帮助到一些新人. 如果你不懂javascri ...