2018/11/26-AXCTF-安卓

Posted fingerprint

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/11/26-AXCTF-安卓相关的知识,希望对你有一定的参考价值。

 

 题目链接: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-安卓的主要内容,如果未能解决你的问题,请参考以下文章

片段从一开始就没有显示 |安卓工作室

安卓。片段 getActivity() 有时返回 null

安卓。通过从片段中的按钮调用片段中的方法来关闭片段?

如何在另一个片段中使用 YouTubePlayerFragment 加载 YouTubePlayer? (安卓)

安卓片段。在屏幕旋转或配置更改期间保留 AsyncTask

谷歌地图在安卓设备上显示为灰色