Android逆向-java代码基础(6)
# 0x0 前言
java基础复习系列要到尾声了,这篇文章讲完for循环之后,java复习以及学习就要结束了,就要进行Android开发的逆向进行简单的分析。
## 1.之前五篇的链接
(https://www.52pojie.cn/thread-690674-1-1.html)
(https://www.52pojie.cn/thread-684492-1-1.html)
(https://www.52pojie.cn/thread-690679-1-1.html)
(https://www.52pojie.cn/thread-685752-1-1.html)
(https://www.52pojie.cn/thread-690689-1-1.html)
## 2.class文件辅助脚本
(https://www.52pojie.cn/thread-687475-1-1.html)
##3.i春秋 HAI_
# 0x01 java 循环结构
上一篇复习了关于java的逻辑判断结构,这次来复习一下关于java的循环结构。主要以for循环为例。
## 1.demo
这里写了一个简单的小demo,包括的知识点有数组的定义,输入,以及for基础循环,还有强化for循环。有
直接上代码
```
import java.util.*;
public class demo{
public static void main(String[]args)
{
Scanner s=new Scanner(System.in);
int[] arr=new int;
for(int i=0;i<5;i++)
{
arr=s.nextInt();
}
for (int i:arr)
{
System.out.println(i);
}
}
}
```
##2.运行结果
![这里写图片描述](http://t1.aixinxi.net/o_1c3smnk6j191nmtt1tjj100t1dqda.png-w.jpg)
#0x02 smali 循环结构
首先贴出所有的代码,然后我们再来进行一个分析。
```
.class public Ldemo;
.super Ljava/lang/Object;
.source "demo.java"
# direct methods
.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 main([Ljava/lang/String;)V
.registers 7
.prologue
const/4 v5, 0x5
const/4 v0, 0x0
.line 6
new-instance v2, Ljava/util/Scanner;
sget-object v1, Ljava/lang/System;->in:Ljava/io/InputStream;
invoke-direct {v2, v1}, Ljava/util/Scanner;-><init>(Ljava/io/InputStream;)V
.line 7
new-array v3, v5, [I
move v1, v0
.line 8
:goto_c
if-ge v1, v5, :cond_17
.line 10
invoke-virtual {v2}, Ljava/util/Scanner;->nextInt()I
move-result v4
aput v4, v3, v1
.line 8
add-int/lit8 v1, v1, 0x1
goto :goto_c
.line 12
:cond_17
array-length v1, v3
:goto_18
if-ge v0, v1, :cond_24
aget v2, v3, v0
.line 14
sget-object v4, Ljava/lang/System;->out:Ljava/io/PrintStream;
invoke-virtual {v4, v2}, Ljava/io/PrintStream;->println(I)V
.line 12
add-int/lit8 v0, v0, 0x1
goto :goto_18
.line 17
:cond_24
return-void
.end method
```
我们还是按照模块来进行程序的分析。
## 1.必要模块
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/%5D%5B_8G%7D@XICJEC%28Q%7DRPAOG%286.png-mylove)
## 2.main函数之Scanner输入模块
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/9P9421%28UF5XA0_2EJ%5D8J2J0.png-mylove)
## 3.循环模块
### 3.1 new-array
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/P3%5DQX%25S56R%293H$6Q@%60%7DT%60C.png-mylove)
```
new-array v3, v5, [I
```
这句话的意思就是定义一个数组,大小为v5,类型为I也就是int型的数组。
###3.2 判断模块
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/%7BXL6VCINABW$FK%28DS%5DMG9ZS.png-mylove)
首先来看看if-ge v1, v5, :cond_17。
官方解释是:Jumps to target if vx>=vy2. vx and vy are integer values.
翻译过来就是说:如果vx>=xy2就跳转到cond_17
如果没有就继续向下运行。
###3.3 循环体结构
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/0L%28%7BECU$NMQCONM46Z%5BPQE9.png-mylove)
首先是
```
invoke-virtual {v2}, Ljava/util/Scanner;->nextInt()I
move-result v4
```
把我们输入的值存入v4。
然后来看:
```
aput v4, v3, v1
```
我们来看一下翻译:
Puts the integer value in vx into an element of an integer array. The element is indexed by vz, the array object is referenced by vy.
首先是v3是数组的名字。然后v1是数组的索引,v4是存储的值。
然后来看循环体的最后一句话:
```
add-int/lit8 v1, v1, 0x1
```
官方翻译:Adds vy to lit8 and stores the result into vx.,就是说给v1加上1然后在赋值给v1,也就是实现了,v1=v1+1的操作。
就这样实现了整个循环。
###3.4点睛之笔
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/Z$AP%7B_2B%5B%5DO17JC$AY99YH5.png-mylove)
这里使用跳转+if语句来实现了一个循环语句。
## 4.加强for循环实现
首先来看看这句话。
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/$AW~R%25COCN2%25NZBW@9Q3%7BJ.png-mylove)
先来看一下官方的说明:
Calculates the number of elements of the array referenced by vy and puts the length value into vx.
翻译一下就是:计算出vy的长度。然后赋值给vx。
![这里写图片描述](http://otufvq0ew.bkt.clouddn.com/A6%60VK0@FAE%252%296GYVBZ%607U1.png-mylove)
这句是我们之前没有遇到过的。
官方的翻译就是:Gets an integer value of an object reference array into vx. The array is referenced by vy and is indexed by vz.说白了就是获取一个数组的对象。
之后的就和前面的循环没有什么差别的,只是多了一个判断数组长度的语句。
## 5.结束语
本次的smali语法学习就到这里结束了,之后会有一个smali的专题训练进行开展。当然之后会深入java语法以及android开发逆向等学习的教程。还有未完成的class文件的分析。当然这个要等到java学习到类里方法以及其他知识的时候进行研究了。 weliong 发表于 2018-1-20 09:58
array-length v1,v3
翻译的意思应该是:计算V3的长度,把值放到V1里
楼主写反了。
感谢,已修改 array-length v1,v3
翻译的意思应该是:计算V3的长度,把值放到V1里
楼主写反了。
感谢分享,学习了。 分享快乐,谢谢 跟着你学习!! 不错学习了 感谢分享 天天影院 楼主写的很好 看着感觉挺不错
页:
[1]
2