
没壳,64位
用ida打开
关键
(Str[i] <= 96 || Str[i] > 98)→ 字符不在 97-98 范围内(即不是 'a' 或 'b')
(Str[i] <= 64 || Str[i] > 66)→ 字符不在 65-66 范围内(即不是 'A' 或 'B')`
两个条件用 && 连接,意味着:字符既不是 'a'、'b',也不是 'A'、'B'
所以不是的将会-2
是这四个其中之一的将会+24
我们与对比的标准比较一下
"ylqq]aycqyp{"
每个字符可能由+24得来也可能由-2得来
例如y:121,可以由{:123-2得来,或a:97=24得来
我们要考虑上下文
-
第一个字符:输出是 'y',可能是 'a' 或 '{'
-
但后续字符必须一致:我们需要找到一个完整的字符串,使得经过变换后得到
"ylqq]aycqyp{" -
验证 '{' 的可能性:
如果第一个字符是 '{',那么输入字符串以 '{' 开头
但flag通常以可打印字符组成,'{' 在flag中间出现不太常见
我们可以用devc++针对加密这里进行解密
我们可以写一段代码解密
关键逻辑是:
我们先用标准(加密后的字符)减24,看是不是在a,b,A,B里面
如果不是就+2
最后我们得出
anss_caesar}
710

被折叠的 条评论
为什么被折叠?



