攻防世界新手模式xxxorrr

下载发附件后拖入ida

从主函数分析起

主函数可以得到如下信息:

1.调用了一个函数  sub_A90()

2.用户输入字符串s

3. s1与 s 异或

打开sub_A90()分析

s1 与 s2 进行比较,如果相等则正确

判断该函数为一个回调函数(在程序结束执行时(即主函数或程序的入口点返回后),可能会有一些清理工作需要进行,如释放资源、保存状态等。这些工作可能通过回调函数的形式进行,尽管它们不直接由主函数“调用”,但可能在主函数返回后运行时环境操作系统触发。

所以初步判断 s1与s进行异或 与 v2相等   s即是我们得到的flag

v1 = "qasxcytgsasxcvrefghnrfghnjedfgbhn"
v2 = [0X56,0X4e,0X57,0X58,0X51,0X51,0X39,0X46,
      0x17,0x46,0x54,0x5A,0x59,0x59,0x1F,0x48,0x32,
      0x5B,0x6B,0x7C,0x75,0x6E,0x7E,0x6E,0x2F,0x77,
      0x4F,0x7A,0x71,0x43,0x2B,0x26,0x89,0xFE,0x00]

flag = ''

# v2 与 flag 异或后为 v1
for i in range(33):
    flag += chr(ord(v1[i])^v2[i])

print(flag)

得到的是一堆乱码,显然不正确

再返回 查看s1有无其它加密

打开s1后   Ctrl+x   发现sub_84A也使用了s1  

打开该函数,发现还有一个异或

添加到脚本中

v1 = "qasxcytgsasxcvrefghnrfghnjedfgbhn"
v2 = [0X56,0X4e,0X57,0X58,0X51,0X51,0X39,0X46,
      0x17,0x46,0x54,0x5A,0x59,0x59,0x1F,0x48,0x32,
      0x5B,0x6B,0x7C,0x75,0x6E,0x7E,0x6E,0x2F,0x77,
      0x4F,0x7A,0x71,0x43,0x2B,0x26,0x89,0xFE,0x00]

flag = ''

# v2 与 flag 异或后为 v1
for i in range(33):
    flag += chr(ord(v1[i])^v2[i]^(2 * i + 65))

print(flag)

得到   flag{c0n5truct0r5_functi0n_in_41f}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值