first 攻防世界

工具:

IDA

思路展开:

无壳64位,linux下运行,输错有错误提示Badluck! There is no flag
IDA启动,
根据用户输入时间随机生成6个数1
下面一堆的操作,里面的变量和后面没关系,所以不用管,接下来输入经过操作生成v11。
2
接下来,程序开启6个线程3
看线程的调用函数 start_routine
4
红框中sleep函数,每次取输入的四个再往里传时会阻塞不同时间,这影响到传入的顺序,所以求出的输入顺序需要再变化。(这是个坑!!!)
绿框里找到md5的四个标志数组,所以函数是将输入的四个(怎么看出输入是四个为一组:绿框函数尺寸为4)为一组md5加密,与黄框中比较,若相等则传入602220,(602220在main函数中提示与flag有关)
脚本爆破

import hashlib
check="4746bbbd02bb590fbeac2821ece8fc5cad749265ca7503ef4386b38fc12c4227b03ecc45a7ec2da7be3c5ffe121734e8"
for w in range(0,6):
	for i in range(48,123):
		for j in range(48,123):
			for m in range(48,123):
				for n in range(48,123):
					temp=chr(i)+chr(j)+chr(m)+chr(n)
					hashvalue=hashlib.md5(temp.encode()).hexdigest()
					if hashvalue[0:16]==check[w*16:w*16+16]:
						print(w,temp)

包括md5在内的一众算法的python写法
爆破生成6个数组,真实输入的顺序不确定。所以就是试,最终确定输入是juhuhfenlapsdunuhjifiuer这个顺序才可。

input1='juhuhfenlapsiuerhjifdunu'
check=[0xfe,0xe9,0xf4,0xe2,0xf1,0xfa,0xf4,0xe4,0xf0,0xe7,0xe4,0xe5,0xe3,0xf2,0xf5,0xef,0xe8,0xff,0xf6,0xf4,0xfd,0xb4,0xa5,0xb2]
len=24
i=0
v11=0
while(i!=len):
	v12=ord(input1[i])+i
	v11=v11^v12
	i=i+1

input2='juhuhfenlapsdunuhjifiuer'
flag=''
for i in range(24):
	temp=ord(input2[i])^v11^check[i]
	flag+=chr(temp)
print(flag)

goodjobyougetthisflag233

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值