WolvCTF-2024 reverse wp

doubledelete's revenge

image

flag是48个数据,每四个组成一个32位的数据,再对其循环左移13位

就是移位和大小端序的问题

#include <stdio.h>
#include<string.h>
#include<stdint.h>
uint32_t ror(uint32_t val , int shift){
	return (val >> shift) | val << (32-shift);
}

int main(){
	unsigned int a[]={0xce,0xec,0x6e,0x8c,0x8b,0x6e,0x2f,0xed,0x6d,0x0d,0x2d,0xc6,0xa6,0xee,0x2b,0x0f,0x66,0xee,0xab,0x2d,0x6c,0xa6,0xce,0x8d,0x0e,0x46,0x6e,0x8e,0x0b,0x0d,0x86,0xec,0x4b,0x0e,0xe6,0xee,0x66,0x06,0x86,0x2e,0x46,0xee,0xeb,0x0e,0x4f,0x61,0xad,0xa6};
	uint32_t b[12]={0};
	int j=0;
	for(int i=0;i<48;i+=4){
		b[j] = a[i+3]<<24 | a[i+2] << 16| a[i+1] <<8|a[i];
		b[j]=ror(b[j],13);
		printf("%c%c%c%c",b[j],b[j]>>8,b[j]>>16,b[j]>>24);
		j+=1;
	}
}
//wctf{i_th1nk_y0u_m1sund3rst00d_h0w_r0t13_w0rk5}

Assembled

手写的x86-64 Linux汇编,要先单步走才能看到这个xor

image

key的初始值为0x3148,根据奇偶更替key,然后还有一些其他操作形成真正的key,这里的汇编不太好看

image

简单一点,可以根据动调找到另一个xor的值,因为这个是单字节异或并检验,所以只能一个一个地看提取cl的值异或,再更换输入

missing-resources

这道题挺有意思的,官方wp给了视频,主要是找dll和字体,dll下载搜索的时候不要加dll,太多广告了

image

提示缺失字体,但是下载的zip里面没有这个名字的字体

字体其实不需要适配,随便一个将字体文件名修改了就行

Game Graphics Debugging

题目描述是'The player is given a small "game" which when opened, displays a window containing some basic artwork and a colored box in the UI layer. Underneath that box is the flag, however, the flag cannot be viewed because it's being covered.'(感觉之前见过这种题,但是当时没做出来,当时是一个3D的盒子,不知道是不是这种)

用ida打开找不到信息

image

CE

看到一份wp说用CE,没想到一下子就搜出来了(对CE的开发不足百分之一,遇到好多次CE能够直接秒的题了)

image

pix on windows

官方用的方法与GPU有关吧,用pix on windows,主要就是将渲染在flag上面的“图层”给去掉

image

launch

image

take capture

双击进行分析

image

image

image

image

在Direct3D渲染管线中,OM阶段(Output Merger)是最后一步,负责将像素着色器(Pixel Shader)的输出与当前渲染目标(如帧缓冲区、深度/模板缓冲区)进行混合。
RTV 0 : Swapchain Buffer 表示:
RTV 0:当前绑定的第一个渲染目标视图(Render Target View)。
Swapchain Buffer:该RTV关联到交换链的后缓冲区(Back Buffer),即最终显示到屏幕的帧。

这四个DrawIndexedInstanced的作用依次是将背景改为蓝色,添加flag,用粉色的条带覆盖flag,添加ohh spinny

posted @ 2025-07-22 16:52  zzz222666  阅读(22)  评论(0)    收藏  举报