攻防世界-catch-me
创始人
2025-05-28 23:05:39
0

题目下载:下载

下载完后发现是个压缩包,所以解压完成后载入IDA。

先执行一下程序:
发现这个flag是个假的,而我们也没有进行输入就跳出这个东西,所以在可能是检验某种flag的形式而不是对输入的flag进行检查。

看一看程序,

发现这是一种SSE指令集。

更多指令,可查看SSE指令集学习__mm_srai_epi16_林小鱼的猫的博客-CSDN博客SSE2的一些常用指令集介绍__mm_loadu_si128_小白的进阶的博客-CSDN博客

SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是继MMX的扩展指令集。SSE指令集提供了70条新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。

SSE指令,被包含在头文件:“emmintrin.h”(SSE2)中,且大多数SSE操作需要所给的数据是16-bytes对齐;

SSE(Streaming SIMD Extensions),是一种SIMD(单指令,多数据)指令集,即利用一个指令同时对多个资料进行相同的动作.SSE指令主要包含了四个部分:单精度浮点数运算指令,整数运算指令,缓存控制指令和状态控制指令。

SSE指令新增8个128位的寄存器(XMM0到XMM7),可以用来计算任何基本数据类型的数据,使用之前,需要将数据从内存加载到这些暂存器中,且加载的数据高位在前,低位在后。


部分指令:

1._mm_load_si128(_m128i * p):返回一个_m128i的寄存器,将p指向的数据读到寄存器中,加载128位的值,p一般是通过类型转换得到的;

2._mm_unpacklo_epi8(_m128i S0,_m128i S1):将S0和S1的低64位数以8位为单位进行交错;

3._mm_unpackhi_epi8(_m128i S0,_m128i S1):将S0和S1的高64位数以8位为单位进行交错;

4._mm_add_epi32(_m128i S0,_m128i S1):返回一个_m128i的寄存器,将S0和S1中对应位置的32bit整数分别相加;

5._mm_srli_si128(a,imm)表示:将a进行逻辑右移imm位,高位填充0。

6._mm_cvtsi128_si32(a)表示:将a的低32位赋值给一个32bits的整数,返回值为r=a0;

 在看输出代码

所以看出来haystack就是我们要的flag,而中间的那些个SSE操作好像并没有改变haystack结果,所以可以不用管,既然后面的代码输出没有什么东西,那就观察前面的代码: 对v3进行操作,然后分别放到byte_6012A8,byte_6012A9,byte_6012AA,byte_6012AB,在.bss区可以知道他们和后面的dword_6012AC是占连续的空间的,可以看成一个数组。然后是一个if判断。 

getenv是函数名,从环境中取字符串,获取环境变量的值,getenv用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。getenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。

如果要知道haystack就运行for循环,而byte_6012A8数组里面有dword_6012AC,它是未知的,要想知道它,则if语句必须成立。所以根据里面的条件( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB)知道getenv("CTF")==0x4ff2da0a,getenv("ASIS")不为0就行,盲猜也是0x4ff2da0a。然后改环境变量。

我们导入linux的环境变量,这里也补充一些基本知识:(注意:export只能在当前终端中有效,终端关闭就没用了)

(通过printf可以导入十六进制整数类型,值得积累)
export ASIS="$(printf "\x0a\xda\xf2\x4f")"				#注意参数是从低位到高位的
export CTF="$(printf "\x0a\xda\xf2\x4f")"

所以就能获得flag了。(根据if语句,按道理ASIS的环境变量不是0就可以,但是试了试好像不可以,wuwuwu~)

环境变量:【Linux】Linux中的环境变量及其意义_linux环境变量的作用_蒋灵瑜的笔记本的博客-CSDN博客

环境变量是操作系统为了满足不同的应用场景而预先在系统内设置的一大批全局变量。

环境变量相关命令:

1、set:显示本地定义的shell变量和环境变量。

2、unset:取消环境变量。

3、export:将本地变量设置为全局变量。

4、env:显示所有环境变量。

5、echo:显示某个环境变量的值

 

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...