梅津美治郎
1.题目描述
描述:1945年6月4日,侵华日军在大连召开高级将领参加的军事会议。冈村宁次及关东军总司令官山田乙三参加了会议。日军参谋总长梅津美治郎传达了大本营命令的精神,研究了侵华日军今后的行动等问题。6月10日,“中国派遣军”在南京召开各方面军和军司令官会议,同时下达了新的作战计划。你作为我方内应,需要快速的将新的作战计划传递出来。 输入暗号:re1.zip,我们就可以接收到计划。(答案为flag{XXX}形式)
笔者注:总算看到有历史感的CTF题目了。为了自己心中的爱国情怀,一定要破解日军的作战计划对吧。当然岗村宁次等人早就是战犯了。
来源:暂无
场景:暂无
附件:压缩文件“re1.zip”,解压后会有名为“Auth.exe”的可执行文件。还有一个“__MACOSX”文件夹,不过不用关心,那里面的exe无法运行。

2.文件分析
老样子还是分析文件是否加壳。

与之前不同的是,这个程序貌似不是用传统的VS编写的,而是“GCC”系列编译器编译的。当然这个程序还是可以在Windows下运行的。
程序中随便输入一段错误字符,没有提示退出。
3.逆向分析
依然将程序拖动到IDA中分析,发现main函数一大串赋值的语句。
由于截图太长,所以各位可以在新标签页中打开,在调试的过程中发现这些语句只是“混淆视听”的。
3.1第一关密码
在IDA中插入断点,发现以下红色方框的内存地址有第一关的“密码”。

在IDA中插入断点,发现以下红色方框的内存地址有第一关的“密码”。也就是地址“60FD55” [ebp+var_143] 的地方。

那么第一关密码是“r0b0RUlez!”

3.2 第二关密码
过了第一关,第二关可能在后面哦,比如这个函数“sub_4015EA”,在函数内部调试时又发现被指令“INT 3”卡住了。


在输入第二关密码应该调用scanf函数,但是这里没有,所以分析是不是在main函数那一大段代码里面。
这个函数“sub_40157F”是被调用了的。下图示。
右键点击“Xrefs graph to...”也能知道,下图所示。

这个函数又有一个内部函数“sub_401547”。

这个函数比之前的简单一些,调试到这个位置发现红色方框那一段是目标字符串。地址应该为“60FDAC”。


这个目标字符串是“u1nnf2lg”。此外还有一段指令“xor eax, 2”,所以目标字符串每个字符跟2异或后就是“w3lld0ne”。


4.最终结果
最终提交到攻防世界平台的flag是“flag{r0b0RUlez!_w3lld0ne}”。这个地方也是比较坑的一点。下面附上代码(第二关的)。1
2
3
4
5sb = "u1nnf2lg"
for i in range(0, 8):
letter = ord(sb[i]) ^ 2;
print(chr(letter), end="")



