Smail语法基本知识(二)

android 逆向工程 smail 语法学习 众所周知,android 是开源的,现在市场上反编译别人的劳动果实的人也不少,所以我们也是有必要学习下smail语言,(就是android工程反编译后出的语法语音),看看改怎么给我们的代码 “埋雷” ,才能更好的保护好我们自己的劳动成果。 接下来就让我们来学习下吧~!(事先声明:本人也是初学smail语言,有介绍不当的地方还请海涵,并请指出,大家一起学习) ================== 阅读详情

这篇文章介绍了一些常见的指令语法,

想要知道更全的指令语法,请见:http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html


.标记

.field                 变量
.method           方法的起始
.end method    方法的终止
.locals              本地寄存器数目(总寄存器数reg - 参数寄存器数目para)

移动

move vx,vy                      将vy的内容移动到vx中。 两个寄存器必须是最前面256个寄存器中之一。
move-object vx,vy          移动对象的引用。
move-result vx               将前一个方法的结果值移动到vx寄存器中
move-result-wide vx      与上条相似,但是移动64位结果到vx,vx+1

返回值

return-void                      返回空值
return vx                         返回vx寄存器的值
return-object vx              返回vx寄存器的值(对象)

常量定义

const/4   vx,lit4             移动4bit常量到vx                      例如:const/4 v0, 0x0
const/16 vx,lit16           移动16bit常量到vx                    例如:const/16 v0, #int 10
const vx, lit32               移动integer常量到vx                 例如:const v0, #12345678 // #00BC614E
const-string vx,string_id     移动String的引用到vx         例如:const-string v3, "none"

跳转

if-eqz vx,target  vx为0,跳转到目标

if-nez vx,target  vx非0,跳转到目标

if-gez vx,target  vx>=0 ,跳转到目标

if-ltz vx,target   vx<0 ,跳转到目标

结论:eq ,e是等于;ne是不等于 g是大于,l是小于 ,z是零。

if-eq vx,vy,target ;if-ne vx,vy,target;if-ge vx, vy,target;if-ltz vx,target 类似可知。

当然还有无条件跳转的 goto target



读取,写入寄存器

sput-object vx,field_id  将对象引用放入静态域内:方向 vx->field_id

iput vx,vy, field_id        将vx的放入实例域内,vx是vy的引用对象之一

对象创建

new-instance vx,type  创建 type类型的对象,放入vx中

方法调用

invoke-virtual { parameters }, methodtocall   使用参数调用虚方法
invoke-super {parameter},methodtocall        使用参数调用父类方法
invoke-direct { parameters }, methodtocall    
invoke-static {parameters}, methodtocall

3、Smail语法 apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM[1]与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。Smali,Baksmali 分别是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种 dex 格式文件的汇编器,反汇编器。 阅读详情

相关推荐

STM32双ADC同步采样实战:FFT测量相位差的5个关键细节

本文深入探讨了利用STM32双ADC同步采样结合FFT算法精确测量信号相位差的实战技巧。文章聚焦五个关键细节:确保ADC时钟同源、优化DMA缓冲区设计、信号调理与窗函数选择、精确的相位提取与解缠绕,以及系统误差校准与验证。这些细节是提升相位差测量精度、确保系统稳定性的核心,尤其强调了STM32配置中易被忽视的时钟同步问题。

oauth7security的博客 594

逆向破解必备基础smail基础语法

// 此代码由autojs交流群整理提供 一键加群 Smali基本语法 .field private isFlag:z  定义变量 .method  方法 .parameter  方法参数 .prologue  方法开始 .line 12  此方法位于第12行 invoke-super  调用父函数 const/high16 v0, 0x7fo3  把0x7fo3赋值给v0 invoke-direct  调用函数 return-void  函数返回void .end method  函数结束 new-.

九黎AJ的博客 2655

一定能解决ROS系统 rosdep update超时问题de简单方法

rosdep update命令使用 1.首先将下面仓库的内容clone到本地 git clone https://github.com/ros/rosdistro.git 记录rosdistro存放地址,例如/home/gec/rosdistro 如果是自己的改成/home/user/rosdistro,其中user表示用户名 2.修改/usr/lib/python2/dist-packages/rosdep2/rep3.py文件 cd /usr/lib/python2/dist-packages/ros

努力是明天快乐的源泉 5万+

Android逆向笔记-4种方式破解下例中的smali代码

原始的代码如下: 这里可以直接看到,用户名是hfdcxy,密码是1234。 如何破解,提供4个思路: 改法一:

IT1995的博客 3658

扣子(coze)实战 | 一键生成爆款书单视频

摘要:本文介绍了一个基于DeepSeek和Coze平台实现短视频高效生成的工作流方案。该方案耗时仅1-2分钟即可完成"假如书籍会说话"类短视频制作,包含书籍内容深度解读、对话台词生成、自动配音、素材合成等环节,支持通过剪映进行二次编辑。作者分享了完整开发思路和8个工作模块,并开放了包含该工具在内的100+智能体共享空间,提供会员专属服务。该方案为非真人出镜短视频的批量化生产提供了可行方案。

yueyehuguang的博客 2394

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 389

深入对android的smali的指令解析

1.普通字段读写操作 iget-object vAA,vBB,filed_id: 表示读取vAA寄存器中的对象中的filed_id对象的引用值给VBB寄存器。 iget_boolean vAA,vBB,filed_id: 表示读取vAA寄存器中的对象中的filed_id的值给vBB寄存器。 iget_wide vAA,vBB,filed_id :表示读取vAA寄存器中对象中的filed_id的值给vBB寄存器。 iget vAA,vBB,filed_id:表示vAA寄存器中对象的filed_id值给vBB寄

深耕安全技术研究 3386

ESP32使用microPython控制240x240彩色屏幕显示中文

王铭东老师详细讲解了讲了关于240x240屏幕的一些基础东西,我这里在原功能的基础上拓展了中文显示的功能,顺带修改了实际操作过程中程序中遇到的一些问题。

m0_59452630的博客 1万+

安卓逆向系列教程(一)Dalvik 指令集

安卓逆向系列教程(一)Dalvik 指令集 作者:飞龙 寄存器Dalvik 指令集完全基于寄存器,也就是说,没有栈。所有寄存器都是 32 位,无类型的。也就是说,虽然编译器会为每个局部变量分配一个寄存器,但是理论上一个寄存器中可以存放一个int,之后存放一个String(的引用),之后再存放一个别的东西。如果要处理 64 位的值,需要连续的两个寄存器,但是代码中仍然只写一个寄存器。这种情况下,你

龙哥盟 5万+

Kimi K3大模型API实战:从调用到本地知识库问答系统构建

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例

weixin_30694389的博客 299

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

Android反编译基础 - smali

        我们常用的反编译三件套指的是ApkTool, dex2jar, jdgui。实际上经过ApkTool反编译的的代码都是smali,后面两个工具只是为了我们方便阅读,将smali语法转为java。但是工具不是万能的,很多时候转换结果不是那么令人满意。所以要想入门逆向工程,了解smali的语法是必须的。这种语言有点像汇编,但是因为我们有java源码可以对照着看,所以学起来还是很快的。而...

u013894711的专栏 4142

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1257

Smail语法

Smail语言首先了解什么是smail? apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。 smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM[1]与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。 S...

测试 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Smail语法基本知识(三)

------------------------------------------------分割线------------------------------------------------------------------------------------- 虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。 HelloWorldAppActivity.smail

computer165的专栏 1312

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Smail语法(1)

【情景分析】Android apk,反编译之后,我们能阅读到的代码是dalvik字节码 - smali 。有时候,工作需要,必须破解apk里面的一些协议或者方法。以此,借鉴经验,来开发自己的项目。 【官方语法链接】http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html 【语法】 一. 数据类型 1 ...

zhanqq2012的专栏 607

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android逆向学习日记(一) 初学smail

一、 smail语法基础学习

M_iranda的专栏 1470

Smail语法基本知识(一)

Smali 背景:  Smali,是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种.dex 格式文件的汇编器。  Baksmali 则是反汇编器。  其语法是一种宽松式的 Jasmin/dedexer语法,而且它实现了.dex 格式所有功能(注解,调试信息,线路信息等)。  Smali,Baksmali 分别是冰岛语中编译器,反编译器的叫法。 Smali 语法简

computer165的专栏 3274

smail及其语法

在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、 v1、v2。参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this",p1表示函数的第一个 参数,p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的。

SXXYNHHXX的博客 3934

Smail语法(2)指令解析

【重点】归总了一些简单的Smail指令。 1.If语句 if-nez v0,:cond_0 如果结果不为0,就跳转到cond_0标号处 if-eqz v0,:cond_1 如果结果为0,就跳转到cond_1标号处 2.数据操作指令 move v0,v1 将v1的值赋给v0 ,两个寄存器都为4位 move-result...

zhanqq2012的专栏 7442

smail的语法

.locals 3 //表示有局部变量的个数

hongyucai的博客 546

android 逆向project smail 语法学习

众所周知,android 是开源的。如今市场上反编译别人的劳动果实的人也不少。所以我们也是有必要学习下smail语言,(就是androidproject反编译后出的语法语音),看看改怎么给我们的代码 “埋雷” 。才干更好的保护好我们自己的劳动成果。 接下来就让我们来学习下吧~!(事先声明:本人也是初学smail语言,有介绍不当的地方还请海涵,并请指出。大家一起...

aofan9566的博客 288

smail语法 详解

大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版本): Where's My Water.zip\ asset\                        lib\                            

肿菜的博客 1027

smail语句学习

一、Smail语法: 1.数据类型: 原始类型: V void,只能用于返回值类型 Z     boolean B byte S short C char I int J long(64位) F float D double(64位) 引用类型: 对象 和 数组 2.smail表现形式 原始类型:用大写字母代替即可,用法无异 引用类型:   对象: L +

鎏嫣宫守护的博客 5568
上一篇: Smail语法基本知识(一)
下一篇: AndEngine Example(1):LineExample
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值