运行程序
32位ida打开,shift+f12查看运行时的中文,这里双击flag get字符串进入rdata段

双击后面的函数,进入text段,小的窗口视图里可以看见汇编代码调用函数的句子

右边的即是鼠标滑到函数上面出现的小窗口
tab键查看伪代码,v8是我们输入的,v4是需要相比较的,flag get最后的输出和v4有关

观看通篇代码寻找可疑的点,或者叫做关键的地方
双击打开v4,发现
①在堆里的数据字符串变量名叫xmmword,那么v4是程序运行时加载进去的
②返回两个寄存器地址,那么猜测xmmword数据由两个变量组成
返回伪代码我们看到第12行,xmmword的数据通过xmmword_413E34传递(_mm_storeu_si128存储,v4代表所指示的变量xmmword)
第14行,qword_413E44所指示的地址刚好在xmmword里(_mm_storel_epi64存储,v5代表所指向的指针,指针指向的地址刚好在xmmword里)
所以v4内容由xmmword_413E34和qword_413E44组成


双击xmmword_413E34,按R将内容转换成字符串,因为cpu是小端存储,又align 4对齐,所以倒过来就是flag;DUCTF{We1c0met0DUTCTF}
