MOCTF reverse 暗恋的苦恼

52 篇文章 6 订阅
5 篇文章 0 订阅

MOCTF reverse 暗恋的苦恼

一天一道CTF题目,能多不能少

打开题目的到信息:
在这里插入图片描述
下载运行exe文件,随便输入的到:
在这里插入图片描述
猜测是给了我们密文和密钥要我们破解明文,放进ida中(32位)
分析主函数,注释部分是分析:
在这里插入图片描述
然后进入到加密的函数,再次进行分析:
在这里插入图片描述
发现还有一个加密函数,进入分析:
在这里插入图片描述
大体的流程我们就很清楚的知道了:
就是一开始我们输入明文和密钥
对明文的每一个字符通过自己的方式进行加密
最后返回加密后的字符串
既然如此我们就可以编写脚本了
PY脚本如下,直接使用暴力法可得:

ming = "QWDRILDWNTW"
miyao = "ILOVEMOCTF"

s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

len1 = len(ming)
len2 = len(miyao)

def dechar(n,m):
	n = ord(n)
	m = ord(m)
	m += (n - 65)
	if m > ord('Z'):
		result = m - 25;
	else:
		result = m;
	return chr(result);

k=0
for i in range(0,len1):
	if k==len2:
		k = 0
	for j in range(0,len(s)):
		x = dechar(s[j],miyao[k])
		if x==ming[i]:
			print(s[j])
			break;
	k += 1

由于他会自动变成大写,这里我就直接大写了
而且明文没有出现空格,所以空格我也省略了
最后得到明文:ILOVEYOUTOO
在这里插入图片描述
经过加密器验证发现正确,提交正确。

当然,不仅仅是只有着一种方法,逆向嘛,直接逆着来也行的
附上逆向得到明文的脚本:

ming = "QWDRILDWNTW"
miyao = "ILOVEMOCTFI"

s = ""

len1 = len(ming)
len2 = len(miyao)


for i in range(0,len1):
	x = 0
	#正常情况下,密文的每一位势必比密钥的每一位都要大,
	#因为密文是密钥经过若干次加1得到的,否则就减了25
	if ming[i] < miyao[i]:
		x = ord(ming[i]) + 25
	else:
		x = ord(ming[i])
	num = x - ord(miyao[i])		#密钥所加的数目
	s += chr(num+65)			#还原明文

print(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值