2021年“绿城杯”网络安全大赛-Reverse-[warmup]easy_re

2021年“绿城杯”网络安全大赛-Reverse-[warmup]easy_re

题目名称:[warmup]easy_re
题目内容:热身题,逆向
题目分值:100.0
题目难度:容易
相关附件:[warmup]easy_re的附件.zip

解题思路:

main函数看到最后发现关键比较
分析得知v21是输入,v16是大数数组
这里ida将v16后面的值分成了别的变量,实际上也在v16之中
前两个循环用python模拟得到了v24的值

v16=[ 0xF5, 0x8C, 0x8D, 0xE4, 0x9F, 0xA5, 0x28, 0x65, 0x30, 0xF4, 
0xEB, 0xD3, 0x24, 0xA9, 0x91, 0x1A, 0x6F, 0xD4, 0x6A, 0xD7, 
0x0B, 0x8D, 0xE8, 0xB8, 0x83, 0x4A, 0x5A, 0x6E, 0xBE, 0xCB, 
0xF4, 0x4B, 0x99, 0xD6, 0xE6, 0x54, 0x7A, 0x4F, 0x50, 0x14, 
0xE5, 0xEC] 
v23="tallmewhy" 
v24=[] 
v22=[] 
for i in range(256): 
v24.append(i) 
v22.append(ord(v23[i%len(v23)])) 
v6,v7=0,0 
while v6<255: 
v8=v24[v6] 
v7=(v7+v22[v6]+v8)%256 
v24[v6] = v24[v7] 
v6 += 1 
v24[v7]=v8^0x37 

最后一个循环有一个异或,输入和v24按字节异或,得到的和v16比较
直接将v16和v24异或得到输入

v12=0 
v9,v10,v20=0,0,0 
while v12+1<42: 
v9=(v9+1)%256 
v11=v24[v9] 
v10=(v10+v11)%256 
v24[v9]=v24[v10] 
v24[v10] = v11 
v12 = v20 
v16[v20]^=v24[(v11+v24[v9])&0xff] 
v16[v12]=chr(v16[v12]) 
v20 = v12 + 1 
print(''.join(v16)) 

print得到flag{c5e0f5f6-f79e-5b9b-988f-28f046117802}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜白君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值