初入ctf,尝试做了一道题,深有体会,写一篇博客记录一下!
1 查壳 :无壳,32位
2;ida打开程序,找到main函数,按下F5反汇编;
3;阅读一下发现是对比v5,v9,若v5相等,即v3=0则进入flag get。
若不等于0,则v3会进行运算使v3!=0,得到
ps:
_mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
(给自己记个笔记)
1:_mm_storeu_si128 ( __m128i *p, __m128i a);
指令名:void _mm_storeu_si128 ( __m128i *p, __m128i a);
功能:可存储128位数据;
说明:将__m128i 变量a的值存储到p所指定的变量中去;
注意:p不要求必须是一个16-bit对齐的一个变量的地址。
2:
__m128i _mm_loadu_si128 (__m128i *p);
指令名:__m128i _mm_load_si128 (__m128i *p);
说明:加载128bits值;
返回值:返回可以存放在代表寄存器的变量中的值;
注意:p不用是一个16-bit对齐的一个变量的地址;
(万能的csdn)
4:找到xmmword_413E34
是一串16进制数据,我们可以将他转化为字符串就可以得到flag;
方法一:直接选中按下R键
ps:
在x86处理器中,数据采用小端序储存;
即高位字节在高位地址,低位字节在地位地址;
方法二:百度,csdn转换代码