XCTF_reverse新手区_csaw2013reversing2
下载题目后, 是exe的, 直接运行, 乱码,和题目的提示一样:
拖到ida里面,main函数双击然后f5看见伪代码里面main函数调用了这个方法做了if判断:
这个函数就是检测程序是否在调试环境运行.嗯,直接拖进ollydbg进行动态调试绕过吧.
然后Ctrl+n找到这个函数:
然后回车跟进, 查看call地址:
然后发现了三个被调用, 别管那么多, 先全部f2加断点再说:
然后回到反汇编界面,f9开始执行, 分析第一个断点:
可以看见这里有两个弹窗, 一个是程序执行时我们看到的乱码, 那么另一个就肯定是flag了. 我们让程序执行第二个messagebox.
首先,肯定是不能让程序执行isdebuggerpresent()的, 所以这一步让CPU什么都不做,往下走就行了:
再往下看, 有个je short 010210B9, 直接跳到10B9的地址, 而中间1000的函数被跳过了????
那肯定是不能让你跳过去的, 我们来看看这个函数干了什么:
他进行了一些列运算.......
所以我们应该把跳转的那一步,nop掉:
int3也需要nop掉,这个相当于下断点,没什么用:
接着看一系列神奇的运算(call到1000的运算)之后的jmp, 我们不能让他乱jmp,先看看他jmp到什么位置了:
嗯,很nice,他把messagebox给关了...那肯定不能让他关啊,messagebox关了还看什么flag啊,所以代码还得改,我们让他跳到第二个messagebox上,别问为什么, 问了就是乱码.
然后就是下个断点,看看程序执行完这个弹窗,会不会出现flag:
然后我们构造的程序,可以f9运行了:
成功拿到flag, 清缓存, 关软件, 下一道