ez_baby_apk

发布时间 2023-03-25 14:53:40作者: Tree_24

这题只能说太baby(卑鄙)啦?
下载下来是一个apk文件
我们用 jadx-gui 打开
找到cn.shenghuo2.decrypt_me里的MainActivity
img
核心几行解释一下

final String key1 = "reversecarefully".replaceAll("e", "3");
final String vector2 = (String) confusion("reversehavemagic");
String message = MainActivity.this.input_1.getText().toString();
String str3 = DES.encrypt(vector2, message, key1);
if (r4.equals(str3)) {
  Toast.makeText(MainActivity.this.getApplication(), "flag正确", 1).show();
} else {
  Toast.makeText(MainActivity.this.getApplication(), "flag错误", 0).show();
}
public static Object confusion(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes());
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

key1是把reversecarefully中的e都换成3得到key1="r3v3rs3car3fully"
vector2是把reversehavemagic经confusion加密后强制转换成字符串
看confusion源码可以知道该函数是计算字符串的MD5哈希值然后将其转换成16进制字符串
最终我们可以得到vector2="c368938a22ddbd9c77721fd203ac2c9c"
然后就是将输入的message通过vector2和key1DES加密得到的和r4相等即为flag。
在fallback中看到密文是"BxLHc1KruiH31I94W171oal+9olDzgBIjnK/J1Db0IUyi+MbI38+nw62ejCPShRB"
img
到这里都还一切正常,当我信心满怀地用DES去解密密文发现密钥和加密向量长度都不对。解密出来不知道什么东西
于是我查看了DES源码
img
很明显被骗了,这是一个名为DES的AES CBC加密
并且我发现加密函数encrypt传参是(密钥,明文,加密向量)
而在MainActivity里面调用的是DES.encrypt(vector2, message, key1);
也就是说vector2才是密钥,key1才是加密向量,被名字欺骗了
img
flagNKCTF{nI_k@i_sHi_zhu_j1an_il_Jie_RE_le}