攻防世界-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:显示某个环境变量的值

 

 

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...