我们下载附件 拖进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