Android逆向之smali学习
Smali是Android虚拟机Dalvik反汇编的结果。
Dalvik指令集
指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选)
赋值:move* v1,v2
返回操作:return-[type] (void ,不带, object,wide)
声明常量: const(/4、/16、/hight16) v1 im 将常量赋值给v1寄存器,const-wide(/16、/32、/hight16) v1 im 将双字型常量赋值给v1寄存器,const-string(/jumbo) v1 “str” 过长时需要加上jumbo,const-class v1 La/b/TargetClass 将Class常量a.b.TargetClass赋值给v1
调用函数:invoke-[kind()] {参数表}, 函数名@BBBB
invoke-virtual :用于调用一般的,非private、非static、非final、非构造函数的方法,它的第一个参数往往会传p0,也就是this指针
invoke-super :用于调用父类中的方法,其他和invoke-virtual保持一致
invoke-direct :用于调用private修饰的方法,或者构造方法
invoke-static :用于调用静态方法,比如一些工具类
invoke-interface :用于调用interface中的方法
判断: if-* v1,v2 【less than - lt,greater than - gt,equal -eq, not -ne,le,ge】
比较:cmp* v1,v2,v3 等价于 v1 = (v3 - v2)%1
取值(get)和赋值(put): iget* 和 iput*
类型转换 :如 float-to-int 将v2寄存器中的float类型值转换为int类型,并赋值给v1寄存器
算术运算 :add-int/2addr v1, v2 将v1、v2寄存器中的值相加,并赋值给v1寄存器
注:lit8(limit)是对要加的常量的长度限制,如果不写,则默认为4位,还可选择lit16,即16bit
语法:
.field 定义变量 .locals 指定了方法中非参寄存器的总数(局部变量的个数) .method 方法 .parameter 方法参数 .prologue 方法开始 .line 指定了该处指令在源代码中的位置
数据类型:
V void,只能用于返回值类型
Z boolean
B byte
S short
C charI intJ long(64 位)
F floatD double(64 位)
L Java 类类型
[ 数组类型
Android逆向之smali学习的更多相关文章
- Android逆向之smali
Android逆向之smali 头信息 smail文件前三行 .class <访问权限> [关键修饰字] <类名>; .super <父类名>; .source & ...
- Android逆向之smali语法宝典
0x01.前言 Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali.我们反编译得到的代码,j ...
- Android逆向——smali复杂类解析
i春秋作家:HAI_ 之前在Android逆向——初识smali与java类中讲解了基本的HelloWorld和简单类.这节课就要进一步深入.如果能够耐下心来分析一定会有所收获.——写给自己和后来人. ...
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
- android逆向学习小结--CrackMe_1
断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...
- Android逆向学习资料
Android逆向基础之Dalvik虚拟机: https://lyxw.github.io/archivers/Android%E9%80%86%E5%90%91%E5%9F%BA%E7%A1%80% ...
- 2021年正确的Android逆向开发学习之路
2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...
- 【转】Android逆向入门流程
原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...
- Android逆向-Android基础逆向(5)
本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...
随机推荐
- linux学习笔记:linux常用的命令
2018-11-19 常见命令快速查询一览表 命令 功能 ls 列出目录内容 cat 链接文件并打印到标准输出设备上(通常用来 ...
- Unity3d项目入门之打Apk包
②结合Android Studio编译器打安卓包 在安卓官网下载AS,按照步骤正常安装编译器完毕,运行AS,点击右下图的图标打开SDK Manager, 选择下载安装相关的“SDK Platform” ...
- 将jar包添加到本地maven仓库中
在使用maven依赖添加jar包时,有时会遇到下载不成功的问题,这时需要将jar手动添加到本地的maven仓库中. 准备工作 配置好maven的环境变量 已经下载好的jar包 具体过程 win + R ...
- 20164319 刘蕴哲 Exp4:恶意代码分析
[实验内容] ①系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出所有连网的程序,连了哪里,大约干了 ...
- 编辑输出“Hello World”
一.新建java项目 执行“文件->新建->项目建立”,打开建立新项目对话框,在编辑框中输入项目名,其他选项为默认值,随后点击“完成”按钮. 二.新建java类 执行“文件->新建- ...
- Git命令参考手册
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...
- 记一次Struts2 内核问题分析解决
问题场景描述 生产环境某个处理耗时比较长的接口,吞吐能力极差.客服反馈此功能长期处于毫无响应状态. 具体表现 系统启动后第一次调用耗时极慢,长时间不响应.紧随之后发起的请求也同时没有响应. 等待第一次 ...
- g++编译X265
自己参考用: msys2 编译X265的命令 编译用工具安装 pacman -S git make tar automake autoconf libtool pkg-config mingw-w64 ...
- shapefile添加字段 设置文件名为字段内容
转眼间,这一年又结束了,再记录一点知识吧 同事说他有好多shapefile,想给每个shapefile添加一字段,并设置该字段的内容为shapefile文件名,想着用arcpy实现,于是有了下面的代码 ...
- appium sendkeys 输入数字丢失问题
参考:https://blog.csdn.net/rainshine1190/article/details/82814503