攻防世界 Reverse:666(具详细版)

我们下载附件 拖进Exeinfo PE 看看

 ELF文件 64位 没有加密,拖进ida64位看看

有main函数 直接 F5看伪C代码

我们首先看见一个类似flag的东西 去提交是失败的 看见是 facker_flag 所以是坏flag 

我们在分析代码

第6行memset(s, 0, 30uLL) ,30uLL 可以选中0x1Eull 按H

这里意思是 定义意思数组s 把他的前30位初始化为0

第8行:把输入的字符串 赋值给v5  这里%s表示输入的格式是字符串

第9行就是 把v5加密后的数据 赋值给v5

所以我们重点看 encode()函数  -> 点击进去看

 第1行 我们可以得到a1=v5=s=enflag(在外面看)的值

需要转10进制 s=105, 122, 119, 104, 114, 111, 122, 34, 34, 119,34, 118, 46, 75, 34, 46, 78, 105, 0

看if语句 如果 a1的长度不等于key的长度 那么就输出 错误信息 

如果等于 就进行一系列运算 

前3 个都是加密算法 后三个是指针赋值 用不到 

所以我们看看key的值

key=12h(16进制)=18(16进制) 可以选中12h 按Shift+E 如果在外面运算 不带h换算

 现在我们写脚本  注意的是步长为3 因为有3个运算语句 范围为key的值 18

 

enflag=[105, 122, 119, 104, 114, 111, 122, 34, 34, 119, 
  34, 118, 46, 75, 34, 46, 78, 105, 0]
flag=''
for i in range(0,18,3):           
    flag+=chr((18^enflag[i])-6)
    flag+=chr((18^enflag[i+1])+6)
    flag+=chr(18^enflag[i+2]^6)    
print(flag)

得到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值