1 安卓逆向手记--java基础

256 阅读1分钟

java的byte数组问题

"""

因为python字节的范围是0-255
java的字节范围是-127-128
"""

# python字节数组转java字节数组
byteArray_p = [230, 172, 167, 233, 152, 179, 229, 155, 189, 229, 139, 135]
data = []
for i in byteArray_p:
    if i>127:
        data.append(i-127-129)
    else:
        data.append(i)
print(data)


# java字节数组转python
byteArray_j = [-26, -84, -89, -23, -104, -77, -27, -101, -67, -27, -117, -121]
data = bytearray()
for b in byteArray_p:
    if b<0:
        b+=256
    data.append(b)
print(data.decode("utf-8"))

java的数组,char,string的转化

在Java中,单引号表示一个字符,用char表示,双引号表示字符串,用String表示



import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.UUID;

public class getUUID {
    public static void main(String[] args) throws UnsupportedEncodingException {
//        String cdid = UUID.randomUUID().toString();
//        System.out.println(cdid);
//        String string = new BigInteger(80, new SecureRandom()).toString(16);
//        System.out.println(string);

        // 字符串转gbk类型的byte
        byte[] dataList = "欧阳国勇".getBytes("GBK");

        // 打印输出byte数组
        System.out.println(Arrays.toString(dataList));

        // gbk类型的byte转字符串
        String dataString = new String(dataList,"GBK");
        System.out.println(dataString);

        String s1 = "欧阳国勇";
        String s2 = new String("欧阳国勇");
        System.out.println(s1);
        System.out.println(s2);


        // byte数组转string
        String s3 = new String(new byte[]{-26, -84, -89, -23, -104, -77, -27, -101, -67, -27, -117, -121});

        // gbk类型的字节数组转string
        String s4 = new String(new byte[]{-59, -73, -47, -12, -71, -6, -45, -62},"GBK");
        System.out.println(s3);
        System.out.println(s4);

        // 生成char类型的数组,然后转string
        String s5 = new String(new char[]{'欧','阳','国','勇'});
        System.out.println(s5);




    }
}

StringBuilder(字符串的拼接)

StringBuilder sb = new StringBuilder();
sb.append("name");
sb.append("=");
sb.append("andy");
sb.append(",age");
sb.append("=");
sb.append("19");
String sbString = sb.toString();
System.out.println(sbString);

java的数组

int[] numArray = new int[3];
numArray[0] = 1;
numArray[1] = 2;
numArray[2] = 3;
System.out.println(Arrays.toString(numArray));

int[] num1 = new int[]{1,2,3};
System.out.println(Arrays.toString(num1));

String[] arr = {"张三","李四","网乌鸦"};
System.out.println(Arrays.toString(arr));

java中的所有类型都继承object,所有类型都是object的子类

// 接口的作用
// 1 约束,实现(继承)他的类
// 泛指他子类的对象
// ArrayList 连续的内存地址存储(内部自动扩容)
// linkedList 底层基于链表实现

定义一个ArrayList

ArrayList<Integer> l1 = new ArrayList<>();
l1.add(1);
l1.add(2);
l1.add(3);
System.out.println(l1);
System.out.println();

要是<>中是某个类型,那么该list中只能放规定的类型,如果是Object,可以放任意类型

ArrayList<Object> v1 = new ArrayList<>();
v1.add(1);
v1.add("张三");
System.out.println(v1);


// 当不知道数组中的元素是什么类型的时候,轻质类型转换
 String value = (String)v1.get(1);
System.out.println(value);

迭代器


ArrayList<String> v2 = new ArrayList<>();
v2.add("张三");
v2.add("李四");
v2.add("王五");

// for循环一个list
for (String item : v2) {
    System.out.println(item);
}

// 迭代取值list
Iterator<String> it = v2.iterator();
while (it.hasNext()){
    String item = it.next();
    System.out.println(item);

}

Set

  • // 实现Set的有两个类,
  • // 一个HashSet(有序集合),
  • // 一个TreeSet(无序集合),底层会根据键做一个排序,我们在做逆向重写的时候,要先排序

在面向对象中,静态的属于类,其他的才是属于对象的,叫做示例属性和方法

在java中一个类实现一个类叫做继承,一个类实现接口叫做实现

java的接口,当你实现了接口但是我当前类中不写接口中规定的方法,编译不通过

抽象类中定义一个抽象方法,约束子类中必须有这个方法

谁继承了这个类,就必须实现这个抽象方法

其实抽象类和抽象方法就结合了继承和接口于一身