NKCTF-2023-RE-try_decrypt_me

try_decrypt_me

这里我们直接将文件放入jeb中进行分析,直接找到我们的mainactivity

在这里插入图片描述

按下tab键,进行反汇编

在这里插入图片描述

进入这个DES加密函数。

在这里插入图片描述

肉眼可见,这里是进行了aes加密,CBC模式,用PKCS5进行填充

对于这个填充方式,我找了一个大佬写了一篇很好的文章。

关于PKCS7,PKCS5,zore的填充方式

iOS 实现对称加密多种填充方式(ANSIX923、ISO10126、Zero) - 简书 (jianshu.com)

这下,我们返回主函数分析逻辑,重点地方我将其标注出来了。

在这里插入图片描述

这里有个equal,在java中,这个就是一个比较函数,就是将我们加密后的密文与BxLHc1KruiH31I94W171oal+9olDzgBIjnK/J1Db0IUyi+MbI38+nw62ejCPShRB,进行比较,我们可以知道这个就是我们的密文了。

intput 就是我们输入的flag了。

这个vector2就是我们CBC的偏移量了。但是这个我们发现,偏移量调用了一个函数。

在这里插入图片描述

可以发现,我们的偏移量是将reversehavemagic 用md5进行加密后的数据。

对此,我们进行md5加密即可得出我们的偏移量,但是这里有个问题。

去网上搜解密时,我们可以发现,md5有16位大,小写,和32位大,小写,我们应该怎么选勒?两种,一个是挨个挨个的试,另外一个,通过它的加密进行判断。

对于MD5加密,下面用JAVA写md5的加密函数,我们只需要对其进行对照即可,判断出来为32位小写。

/**
 * 将字符串转换为MD5
 */
 public class ParseMD5 {
 	public static String parseStrToMd5L32(String str) {
 		// 将字符串转换为32位小写MD5 
 		String reStr = null;
 		try {
 			MessageDigest md5 = MessageDigest.getInstance("MD5");
 			byte[] bytes = md5.digest(str.getBytes());
 			StringBuffer stringBuffer = new StringBuffer();
 			for (byte b : bytes) {
 				int bt = b&0xff;
 				if (bt < 16) {
 					stringBuffer.append(0);
 				}
 				stringBuffer.append(Integer.toHexString(bt));
 			}
 			reStr = stringBuffer.toString();
 		} catch (NoSuchAlgorithmException e) {
 			e.printStackTrace();
 		}
 		return reStr;
 	}

	// 将字符串转换为32位大写的MD5
	public static String parseStrToMd5U32(String str) {
		String reStr = parseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.toUpperCase();
		}
		return resStr;
	}

	// 将字符串转换为16位小写的MD5
	public static String parseStrToMd5L16(String str) {
		String reStr = paseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.subString(8, 24);
		}
		return reStr;
	}

	// 将字符串转换为16位大写的MD5
	public static String parseStrToMd5U16(String str) {
		String reStr = parseStrToMd5L32(str);
		if (reStr != null) {
			reStr = reStr.toUpperCase().subString(8, 24);
		}
		return reStr;
	}
 }

这里,万事俱备只欠东风,将我们得出的数据进行解密即可,由于本题未对AES进行魔改,我们可以用在线网站进行解
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值