题目:逆向找出正确的flagre2
先检查一下
没壳,32位的程序
直接ida分析,查看伪c
先是输入input,经过sub_401032()函数,在下面是一个循环,循环内看不太懂,看下程序内的字符串,只发现Try again!
,没有看到显示成功的字符串,一步一步分析吧!
进入sub_401032()函数观察
发现进行了异或运算401100h^95h^input的第一个字符
,
得出return值的范围为401100h~4011FFh
查看汇编代码
- 1 中将eax放入
[ebp+var_1C]
- 2 与0进行比较,执行后zf=0,不发生跳转
- 3 call addr,addr范围为
401100h~4011FFh
观察401100h~4011FFh
范围内的函数,发现ida没有识别出来,直接create function,sub_401100() sub_401160() sub_4011C0()
00h^95h=149
60h^95h=245
c0h^95h=85
这里只有85小于ffh,所以会执行sub_4011C0()函数,打印出o
字符,从输入的字符串中去第二个字符,分别于0x8f和^0x401200,范围为0x401200~0x4012ff
,与上一次的情况相似,也是三个函数
推测应该是n
,我们可以在下面的图中看到字符的引用,可以看到Try again!
这一题的基本逻辑就出来了,输入字符串,取每一位与下面图中数据异或,决定下一个执行的函数并打印出相应的字符。
多次尝试,发现打印字符串应为Congratulate
,推出输入的input
在这题中ida的伪C代码会让人看不懂,还是直接通过看汇编代码去分析,对于不清晰的指令结合od去做判断。