工具:
IDA
思路展开:
无壳64位,linux下运行,输错有错误提示Badluck! There is no flag
IDA启动,
根据用户输入时间随机生成6个数
下面一堆的操作,里面的变量和后面没关系,所以不用管,接下来输入经过操作生成v11。
接下来,程序开启6个线程
看线程的调用函数 start_routine
红框中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
转载:https://blog.csdn.net/weixin_45055269/article/details/106157485
查看评论