码迷,mamicode.com
首页 > 移动开发 > 详细

2018/11/26-AXCTF-安卓

时间:2018-11-27 01:20:02      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:DRC   imp   ctf   技术   you   []   array   ase   alt   

 

 题目链接:https://pan.baidu.com/s/1es3pBrC6i9MPoyN22CQ1iw 

提取码:85nh

拖进JEB进行分析

技术分享图片

发现对name的前四位进行了md5加密,然后和"126E8F3A5FD52707AFE653E4BFECF723"进行比较。

 技术分享图片

可知那么的前四位为"AXCT"。

继续分析,

技术分享图片

程序将name的后四位+password与“126E8F3A5FD52707AFE653E4BFECF723”传入encrypt函数,然后将返回字符串进行Base64加密再与"w73DrcK2GcKkw7nCv8KgwpbDrMOdw7TDqFTDjRAcJA=="进行比较。

查看encrypt函数,

技术分享图片

看到255,256常量,可轻松判断出是RC4加密,现在我们知道了RC4加密的密钥与加密后的base64字符串,直接复制encrypt函数的代码写逆向脚本(最后用java,java的base64解码的值和别的语言可能不一样)。

 

import com.sun.org.apache.xml.internal.security.utils.Base64;
public class Main{
    public static void main(String[] args) {
        String flag;
        byte[] str1 = new byte[100];
        String str2;

        try {
            str1 = Base64.decode("w73DrcK2GcKkw7nCv8KgwpbDrMOdw7TDqFTDjRAcJA==");
        } catch (Exception e) {
        }

        str2 = new String(str1);
        flag = encrypt(str2,"126E8F3A5FD52707AFE653E4BFECF723");
        System.out.println(flag);
    }

    public static String encrypt(String arg13, String arg14) {
        int v9;
        int v12 = 256;
        int[] v5 = new int[v12];
        byte[] v3 = new byte[v12];
        int v0;
        for(v0 = 0; v0 < v12; ++v0) {
            v5[v0] = v0;
        }
        v0 = 0;
        while(v0 < v12) {
            v3[v0] = ((byte)arg14.charAt(v0 % arg14.length()));
            v0++;
        }
        int v7 = 0;
        for(v0 = 0; v0 < 255; ++v0) {
            v7 = (v5[v0] + v7 + v3[v0]) % 256;
            v9 = v5[v0];
            v5[v0] = v5[v7];
            v5[v7] = v9;
        }
        v0 = 0;
        v7 = 0;
        char[] v2 = arg13.toCharArray();
        char[] v4 = new char[v2.length];
        int v10 = 0;
        while(v10 < v2.length) {
            v0 = (v0 + 1) % 256;
            v7 = (v5[v0] + v7) % 256;
            v9 = v5[v0];
            v5[v0] = v5[v7];
            v5[v7] = v9;
            v4[v10] = ((char)(v2[v10] ^ (((char)v5[(v5[v0] + v5[v7] % 256) % 256]))));
            v10++;
        }
        return new String(v4);
    }
}

运行即可得到name的后四位和password,为"F{android_You_win}"。

 

2018/11/26-AXCTF-安卓

标签:DRC   imp   ctf   技术   you   []   array   ase   alt   

原文地址:https://www.cnblogs.com/Fingerprint/p/10023637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!