攻防世界 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

posted @ 2023-12-07 20:40  不是李嘉图  阅读(74)  评论(0)    收藏  举报  来源