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