SWPUCTF两道安卓逆向题

第一题


SWPUCTF两道安卓逆向题_第1张图片
image.png

输密码

SWPUCTF两道安卓逆向题_第2张图片
image.png

一看判断条件 12位 然后255减去index减去100再减去x = 0


SWPUCTF两道安卓逆向题_第3张图片
image.png

0是48.

所以密码是从后往前数

SWPUCTF两道安卓逆向题_第4张图片
image.png
SWPUCTF两道安卓逆向题_第5张图片
image.png
SWPUCTF两道安卓逆向题_第6张图片
image.png

太简单了。

第二道

SWPUCTF两道安卓逆向题_第7张图片
image.png

ida f5后看到如上

从FIrst方法中解出v3
下面两个循环分别解出v4 v5

SWPUCTF两道安卓逆向题_第8张图片
image.png

注意 这三个解密都只循环四次 剩余的最后一个字母是用的原字符

SWPUCTF两道安卓逆向题_第9张图片
image.png

这个init看起来复杂 其实就是逐个取一个出来

SWPUCTF两道安卓逆向题_第10张图片
image.png
public static void main(String[] args) {
        String str1 = "LN^dl";
        int arr2[] = {0x20, 0x35, 0x2d, 0x16, 0x61};
        String str3 = "AFBo}";

        char[] chars1 = str1.toCharArray();
        char[] chars3 = str3.toCharArray();

        char res1[] = new char[5];
        char res2[] = new char[5];
        char res3[] = new char[5];

        for (int i = 0; i < 4; i++) {
            res1[i] = (char) ((chars1[i] ^ 0x80) / 2);
            res2[i] = (char) (chars1[i] ^ arr2[i]);
            res3[i] = (char) (chars3[i] ^ arr2[i]);
        }
        res1[4] = chars1[4];
        res2[4] = (char) arr2[4];
        res3[4] = chars3[4];

        System.out.println(new String(res1));
        System.out.println(new String(res2));
        System.out.println(new String(res3));

        for (int i = 0;i

你可能感兴趣的:(SWPUCTF两道安卓逆向题)