2023全国农信银CTF逆向Baby8or解析

搜索字符串定位到flag代码片段
在这里插入图片描述

按CTRL + X 跳转到main函数,按F5 生成伪代码进行分析。
发现一个加密函数,当加密后的数据和genc[i]数组中的值对比一致则表示正确flag,字符串长度为35。
在这里插入图片描述
双击genc[i] 找到genc[i]中的数据,转成10进制得到数组
genc=[172,102,148,227,47,163,83,255,156,61,182,107,233,233,87,185,7,181,214,59,179,8,181,143,29,197,72,187,163,77,188,113,151,241,104]
在这里插入图片描述

再双击 encrypt函数,分析代码逻辑
在这里插入图片描述

分析 当输入的字符串,每次取5个,且下标为0,1,2,3,4的5个字母分别,异或gkey,byte_4021,byte_4022,byte_4023,byte_4024,byte_4025变量的值。
双击gkey就能找到这个变量的值
在这里插入图片描述

最后5个字母再异或byte_4025 ,且每次减1。逻辑如下,依次循环:

genc[0]^(byte_4025-0)^gkey)
genc[1]^(byte_4025-1)^byte_4021
genc[2]^(byte_4025-2)^byte_4022
genc[3]^(byte_4025-3)^byte_4023
genc[4]^(byte_4025-4)^byte_4024

生成代码

genc=[172,102,148,227,47,163,83,255,156,61,182,107,233,233,87,185,7,181,214,59,179,8,181,143,29,197,72,187,163,77,188,113,151,241,104]
gkey       =  179
byte_4021  =  125
byte_4022  =  158
byte_4023  =  248
byte_4024  =  44
byte_4025  =  91
a=''
for i in range(0,34,5):
     a+=(chr(genc[i] ^ (byte_4025-i )^ gkey))
     i+=1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4021))
     i+= 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4022))
     i += 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4023))
     i+= 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4024))
print(a)

DASCTF{57CTF8_6F1ag_G3n3r4ted_2023}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值