黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述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-安卓】
推荐阅读
- English trip V1 - 6.Accident Happen! 发生意外! Teacher:Corrine Key:过去式 was or were
- Android学习—— Android自定义控件
- 安卓Android基础第五天
- Flask初识,第八篇,实例化Flask的参数及对app的配置
- web前端技术讲解之call和apply的使用(很适合新手小白学习)
- EOS生态app软件开发制作
- Android学习
- 随手记下载|随手记app下载
- 用安卓手机juicessh连接linux系统