首先,看这个程序是多少位
由上图可以知道,这个程序是32位的,同时它还有一个UPX的壳。
所以我们要进行脱壳的操作,这里我用OllyDug进行手动脱壳
将该程序拖入OD,我们要寻找popad,并且在它的第一个jmp那里下一个断点(f2),这样可以防止这个程序壳的干扰,也便于找到我们真正程序的那个头。
也许你会疑惑,这个红线是什么意思
这个红线是将要执行的操作,比如按f8(单步调试),它就跳转到0040E484那一步去。下图是跳转后的位置
但如果这样,一直调试下去,直到程序结束,我们也不会找到真正程序的头。
所以一开始我们应该按f9将这个部分跳过,直接到我们的断点处
然后我们再单步调试(f8),之后就到了我们真正程序的头了
然后在此处进行脱壳
这个时候就脱壳完毕了
这个时候进入ida,找flag
进入后,直接shift+f12,查看字符串
找到函数按X,点OK
在选择一段,f5转换位伪代码,由下图所示
如果输入str1和st2相等,即可正确的正确答案。
所以flag就为HappyNewYear!