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

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 4
    const-string v0, "jb666"

    sput-object v0, Lcom/example/course1/Samli;->flag:Ljava/lang/String;

    .line 7
    const/4 v0, 0x1

    sput-boolean v0, Lcom/example/course1/Samli;->run:Z

    return-void
.end method

.method public constructor <init>()V
    .registers 1

    .prologue
    .line 3
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static func2(I)Ljava/lang/String;
    .registers 2 #用到两个寄存器
    .param p0, "num"    #I这里把入参的内存地址给p0寄存器

    .prologue
    .line 10
    const/16 v0, 0x64 #0x64是十六进制数,它的十进制是100,正好对应java中的100

    if-lt p0, v0, :cond_7 #如果p0小于v0就跳转到cond_7

    .line 11
    const-string v0, "\u4f18\u79c0" #这俩\u4f18\u79c0是utf8编码,它俩代表的中文是优秀,然后这里把\u4f18\u79c0赋值给v0

    .line 15
    :goto_6
    return-object v0 #把v0的值进行返回

    .line 12
    :cond_7
    const/16 v0, 0x50 #0x50是十六进制数,它的十进制是80,正好对应java中的80

    if-lt p0, v0, :cond_e #如果p0的值小于v0,也就是p0的值小于入参的值就跳转到cond_e

    .line 13
    const-string v0, "\u666e\u901a" #这俩\u666e\u901a是utf8编码,它俩代表的中文是普通,然后这里把\u666e\u901a赋值给v0

    goto :goto_6 #跳转到goto_6位置进行做返回

    .line 15
    :cond_e
    const-string v0, "\u53ca\u683c" #这俩\u53ca\u683c是utf8编码,它俩代表的中文是及格,然后这里把\u53ca\u683c赋值给v0

    goto :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 4
    const-string v0, "jb666"

    sput-object v0, Lcom/example/course1/Samli;->flag:Ljava/lang/String;

    .line 7
    const/4 v0, 0x1

    sput-boolean v0, Lcom/example/course1/Samli;->run:Z

    return-void
.end method

.method public constructor <init>()V
    .registers 1

    .prologue
    .line 3
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static func2(I)Ljava/lang/String;
    .registers 2
    .param p0, "num"    # I

    .prologue
    .line 10
    const/16 v0, 0x64

    if-lt p0, v0, :cond_7

    .line 11
    const-string v0, "\u4f18\u79c0"

    .line 15
    :goto_6
    return-object v0

    .line 12
    :cond_7
    const/16 v0, 0x50

    if-lt p0, v0, :cond_e

    .line 13
    const-string v0, "\u666e\u901a"

    goto :goto_6

    .line 15
    :cond_e
    const-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 20
    const/4 v3, 0x3 #把数字3给v3

    new-array v2, v3, [Ljava/lang/String;#创建数据组的内存空间,空间v3个

    const/4 v3, 0x0 #这意思是数组下标0

    const-string v4, "\u590f\u6d1b"#这里的意思是数组的值

    aput-object v4, v2, v3#这意思是把v4的值放到v2里下标v3的位置上

    const/4 v3, 0x1 #这意思是数组下标0

    const-string v4, "aa" #这里的意思是数组的值

    aput-object v4, v2, v3 #这意思是把v4的值放到v2里下标v3的位置上

    const/4 v3, 0x2 #这意思是数组下标0

    const-string v4, "bb" #这里的意思是数组的值

    aput-object v4, v2, v3 #这意思是把v4的值放到v2里下标v3的位置上

    .line 21
    .local v2, "nameArray":[Ljava/lang/String;#把v2的值给到nameArray
    const/4 v0, 0x0

    .local v0, "idx":I#把v0的值给到idx
    :goto_13
    array-length v3, v2#把v2的长度取出来给到v3

    if-ge v0, v3, :cond_20#如果v0的值大于v3的值就跳转到cond_20,也就是结束循环

    .line 22
    aget-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 21
    add-int/lit8 v0, v0, 0x1#v0自增1也就是idx++

    goto :goto_13#然后跳到goto_13位置,也就是进行下一轮循环

    .line 25
    .end local v1    # "item":Ljava/lang/String;
    :cond_20
    return-void
.end method


img


http://www.kler.cn/a/393921.html

相关文章:

  • Android 10 默认授权安装app运行时权限(去掉运行时所有权限授权弹窗)
  • 阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_技术趋势
  • Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
  • Linux git-bash配置
  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • Bugku CTF_Web——文件上传
  • 前端Vue项目启动报错,出现spawn cmd ENOENT的原因以及解决方案
  • Springboot+thymeleaf结合Vue,通过thymeleaf给vue赋值解决Vue的SEO问题
  • 2024/11/13 英语每日一段
  • RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)
  • 攻防世界37-unseping-CTFWeb
  • 边缘计算在智能制造中的应用
  • 对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍
  • Javaweb—Ajax与jQuery请求
  • PostgreSQL 事务读取行 不使用行锁 真的? 利弊双刃剑
  • SpringBoot技术栈:构建高效共享汽车系统
  • PAT甲级 1097 Deduplication on a Linked List(25)
  • 稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
  • C++ | Leetcode C++题解之第552题学生出勤记录II
  • [ 网络安全开源项目 ] 市面上常见的开源 HIDS 有哪些 ?
  • 计算机视觉中的中值滤波:经典案例与Python代码解析
  • centos7上安装mysql
  • 分享 pdf 转 word 的免费平台
  • Rust 语言学习笔记(二)
  • Django基础用法+Demo演示
  • 2025年软考高项论文该怎么备考与复习?