运行一下,还是一样的套路,需要输入字符串,随便输入就会失败。直接退出。
查壳无壳,直接放进IDA看main函数。

小于四位直接跳到错误结束。大于四位先判断前四位是不是EIS{ 怀疑这个跟flag有关。
再往下看又比较了str[28]和125的区别。Str里面自然是字符,我们把125换成字符正好是}
![]()
所以这里判断的逻辑是,先看看字符长度够不够4,再看前四位是不是EIS{ 最后一个是不是}。所以我们需要的flag的格式肯定是EIS{flag...}。再去看表示成功之前的判断条件,前往4011c0函数

传入的参数是Str的指针,然后还是先判断够不够4位长,够了才继续。如果够了的话,就进行拷贝操作。拷贝的范围是从第五个字符开始(str4)直到结束的前一个(len-1),然后把strlen处的最后一个字符赋值为0,就是结束符。
为什么要这么做呢,从第五个开始,这样忽略掉EIS{,最后一个不要,就是不要}。这样就把str中间的内容拷贝到v7里面去了。
所以这里面的计算,只涉及到花括号中间的内容。我们最终的flag,还需要加上EIS{}。
现在就可以开始分析计算的内容了。
这里的for是对v7内的所有字符进行操作,看到熟悉的65 90 97 122 就知道 这是把大小写颠倒操作。然

博客介绍了使用C++进行逆向分析以推导正确flag的过程。先通过查壳和IDA分析main函数,确定flag格式为EIS{flag...},接着分析计算内容,涉及大小写颠倒和异或操作,最后通过逆向操作,先减72再异或0x55,得出flag括号中的内容并加上格式输出。
最低0.47元/天 解锁文章
1115

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



