当前位置: 首页 > news >正文

38.安卓逆向-壳-smali语法2(条件语句和for循环)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:37.安卓逆向-壳-smali语法1

上一个内容里写了java转smali,本次接着继续

然后是条件判断的smali写法如下图

首先它的执行过程,用颜色区分

然后编码转文字的方式,使用谷歌浏览器的控制台(打开谷歌浏览器然后按F12可以打开控制台)就可以,如下图

代码说明

代码

.class public Lcom/example/course1/Samli;
.super Ljava/lang/Object;
.source "Samli.java"# static fields
.field private static flag:Ljava/lang/String;.field public static run:Z# instance fields
.field public name:Ljava/lang/String;.field public num:I# direct methods
.method static constructor <clinit>()V.registers 1.prologue.line 4const-string v0, "jb666"sput-object v0, Lcom/example/course1/Samli;->flag:Ljava/lang/String;.line 7const/4 v0, 0x1sput-boolean v0, Lcom/example/course1/Samli;->run:Zreturn-void
.end method.method public constructor <init>()V.registers 1.prologue.line 3invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void
.end method.method public static func2(I)Ljava/lang/String;.registers 2 #用到两个寄存器.param p0, "num"    #I这里把入参的内存地址给p0寄存器.prologue.line 10const/16 v0, 0x64 #0x64是十六进制数,它的十进制是100,正好对应java中的100if-lt p0, v0, :cond_7 #如果p0小于v0就跳转到cond_7.line 11const-string v0, "\u4f18\u79c0" #这俩\u4f18\u79c0是utf8编码,它俩代表的中文是优秀,然后这里把\u4f18\u79c0赋值给v0.line 15:goto_6return-object v0 #把v0的值进行返回.line 12:cond_7const/16 v0, 0x50 #0x50是十六进制数,它的十进制是80,正好对应java中的80if-lt p0, v0, :cond_e #如果p0的值小于v0,也就是p0的值小于入参的值就跳转到cond_e.line 13const-string v0, "\u666e\u901a" #这俩\u666e\u901a是utf8编码,它俩代表的中文是普通,然后这里把\u666e\u901a赋值给v0goto :goto_6 #跳转到goto_6位置进行做返回.line 15:cond_econst-string v0, "\u53ca\u683c" #这俩\u53ca\u683c是utf8编码,它俩代表的中文是及格,然后这里把\u53ca\u683c赋值给v0goto :goto_6 #跳转到goto_6位置进行做返回
.end method

循环语句

.class public Lcom/example/course1/Samli;
.super Ljava/lang/Object;
.source "Samli.java"# static fields
.field private static flag:Ljava/lang/String;.field public static run:Z# instance fields
.field public name:Ljava/lang/String;.field public num:I# direct methods
.method static constructor <clinit>()V.registers 1.prologue.line 4const-string v0, "jb666"sput-object v0, Lcom/example/course1/Samli;->flag:Ljava/lang/String;.line 7const/4 v0, 0x1sput-boolean v0, Lcom/example/course1/Samli;->run:Zreturn-void
.end method.method public constructor <init>()V.registers 1.prologue.line 3invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void
.end method.method public static func2(I)Ljava/lang/String;.registers 2.param p0, "num"    # I.prologue.line 10const/16 v0, 0x64if-lt p0, v0, :cond_7.line 11const-string v0, "\u4f18\u79c0".line 15:goto_6return-object v0.line 12:cond_7const/16 v0, 0x50if-lt p0, v0, :cond_e.line 13const-string v0, "\u666e\u901a"goto :goto_6.line 15:cond_econst-string v0, "\u53ca\u683c"goto :goto_6
.end method.method public static func3(Ljava/lang/String;)V.registers 6.param p0, "arg1"    # Ljava/lang/String;.prologue.line 20const/4 v3, 0x3 #把数字3给v3new-array v2, v3, [Ljava/lang/String;#创建数据组的内存空间,空间v3个const/4 v3, 0x0 #这意思是数组下标0const-string v4, "\u590f\u6d1b"#这里的意思是数组的值aput-object v4, v2, v3#这意思是把v4的值放到v2里下标v3的位置上const/4 v3, 0x1 #这意思是数组下标0const-string v4, "aa" #这里的意思是数组的值aput-object v4, v2, v3 #这意思是把v4的值放到v2里下标v3的位置上const/4 v3, 0x2 #这意思是数组下标0const-string v4, "bb" #这里的意思是数组的值aput-object v4, v2, v3 #这意思是把v4的值放到v2里下标v3的位置上.line 21.local v2, "nameArray":[Ljava/lang/String;#把v2的值给到nameArrayconst/4 v0, 0x0.local v0, "idx":I#把v0的值给到idx:goto_13array-length v3, v2#把v2的长度取出来给到v3if-ge v0, v3, :cond_20#如果v0的值大于v3的值就跳转到cond_20,也就是结束循环.line 22aget-object v1, v2, v0#这意思是把v2下标v0位置的值给到v1.line 23.local v1, "item":Ljava/lang/String;#把v1的值给到item,也就是对应java的 String item = nameArray[idx];这一句sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;#然后获取System.out.println方法的地址invoke-virtual {v3, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V#调用方法v3是方法地址v1是方法的入参.line 21add-int/lit8 v0, v0, 0x1#v0自增1也就是idx++goto :goto_13#然后跳到goto_13位置,也就是进行下一轮循环.line 25.end local v1    # "item":Ljava/lang/String;:cond_20return-void
.end method


img


http://www.mrgr.cn/news/75026.html

相关文章:

  • 开源 2 + 1 链动模式、AI 智能名片、S2B2C 商城小程序在用户留存与品牌发展中的应用研究
  • Spring Boot中的自动装配机制
  • 车-路-站-网”信息耦合的汽车有序充电
  • 聊天服务器(4)CMake
  • Redis哨兵(sentinel)
  • python-24-一篇文章彻底掌握Python HTTP库Requests
  • CSR 和 SSR 分别是什么?
  • 力扣 LeetCode 459. 重复的子字符串(Day4:字符串)
  • UVa 11288 Carpool
  • 打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
  • Cocos Creator《星际征服者》3D实时对战战机类游戏
  • 基于Springboot+微信小程序的健康饮食小程序 (含源码数据库)
  • 飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问
  • 什么?postman 还可以做性能测试?
  • C++的返回值在内存中的传递过程
  • 【微信小程序】关于小程序开发过程中的一些经验之谈,很有用!!
  • StableDiffusion系列教程 |SD提示词编写指南
  • PSRR仿真笔记
  • 37拼购模式后期可能面临的问题及解决方案
  • 数据分析师证书怎么考
  • 后端-实现excel的导出功能(超详细讲解)
  • 海天味业监事交易违规,新任女掌门现管理漏洞
  • 121、SQL Server取开始时间、截止时间
  • redis的事务
  • 编程之路,从0开始:知识补充篇
  • Spring Boot 应用程序中集成 Redis 并实现存储读取字符串或者复杂对象