参赛网址:
使用到的源码:
参考资料:
3、OpenGL
5、Visual Studio Community 2017 配置 OpenGL 环境 (NuGet)
预备知识:
JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9
PNG (png), 文件头:89504E47 文件尾:AE 42 60 82
1、简单搭建一个OpenGL环境(可选)
网络上教你配置OpenGL环境很麻烦,下载GLFW、GLEW等等。
其实VS可以一键搞定,VS右键项目管理NuGet程序包,选择对应的包即可
使用的源码只需要导入如下几个包即可
2、分析WinMain
程序读取自身两处地址内容
1、1 读自身数据偏移量:67E00 Size:2D26B 范围:67E00-9506B
文件头:FF D8 FE F1,结尾是:FF D9
我们可以判断它是JPEG文件
修改后缀打开图片如下
1、2 读自身数据偏移量:9506B Size:9F97 范围:9506B-9F002
文件头:89504E47 文件尾:AE 42 60 82
我们可以判断它是PNG文件
修改后缀打开图片如下
3、分析sub_4064D0函数
1、基础操作初始化之类的
2、注册了鼠标移动回调
判断角度合法性
3、加载自定义图片
4、渲染箱子(唯一不同的地方)
4、1 cubePositions的参数是
开始:0x20D000
结束:0x20FFC4
我们直接将这部分数据dump下来,保存到本地。然后OpenFile,再ReadFile读出来,就可以得到结果直接套用摄像机(Camera)的源码即可,只要两处地方就可以
1、CubePositions数组内容
2、CubePositions数组个数
4、获取结果多种方法1:
直接修改矩形的缩放X、Y、Z坐标突破程序极限
初始化:X=0、Y=0、Z=3
其中464CC4 = X、464CC8 = Y、464CCC = Z,通过修改缩放直接就可以定位到结果
源码:
通过修改X.Y.Z坐标可以粗略看到Flag:dogo?
继续针对最后一个字母缩放,发现是d,所以最终结果是dogod
4、1 获取结果多种方法2:
源码修改法,我们发现腾讯的CTF和前面那个摄像的源代码基本一直,我们只要修改掉CubePositions即可实现同样的功能。然后再自己移动下即可
修改地方1:将源程序的起点-结束地方的CubePositions数据dump出来,然后读取
修改的地方2:渲染箱子的循环的个数修改成实际的个数(0X3FB)
最终结果,自己慢慢左右移动下即可找到答案