逆向题--逆向找出正确的flagre2

题目:逆向找出正确的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去做判断。