腾讯游戏安全技术竞赛2018 决赛第1题分析记录
看大家其它题的解法都还差不多,就决赛第1题各种不同,有大佬直接换下视角就搞定了,NB~~~
首先浏览代码,确定主函数my_bufferdata_settexture,在WinMain中调用的:
这个函数中主要就是做这个opengl的绘制:
1.
这里是设置顶点数据,根据这个得到数据格式:
0 3 float 坐标
1 2 float 纹理
那一个单元的大小就是20 (5个float ),顶点数量为2D0/14 = 0x24 (顶点数)
根据这个顶点数据及格式,并且考虑到后面是调用glDrawArrays(4u, 0, 36);
,导出obj文件(文件见附件).
这个模型就是一个立方体,显示如下:
接着后面就是2个纹理的设置,.
后面看到有个glUseProgram的调用,那就是有shader,直接根据前面的glShaderSource找到shader:.
#version300 es
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 aTexCoord;
outvec2 TexCoord;
uniformmat4 model;
uniformmat4 view;
uniformmat4 projection;
voidmain()
{
gl_Position = projection * view * model *vec4(aPos, 1.0f);
TexCoord = vec2(aTexCoord.x,aTexCoord.y);
}
看起来有矩阵变换,那后面就是要设置这3个矩阵.
先确定project和view,后面会有个循环多次设置model及glDrawArrays .
综合上面来看,这里就是在重复绘制立方体,最终形成一个箭头形状,考虑到这里最有可能隐藏了数据.
dword_1F601C和dword_1F6020分别记录了一张表的起始和结束.
开始也以为这也是一个模型,也导出为obj(3个float为一组坐标).
看模型发现不像,不过考虑到这里的x y坐标都是整数,然后就当成一个位图的坐标生成了位图,因为坐标有负数,统一加上了100(这个坐标设成白色).
这里看到有字符串样式了,然后调整y坐标倒过来,如下:
根据题目要求(这里其实可以消掉一些点,让f更清楚),故得到字符串 flag:dogod
什么时候我也能像大佬一样来分析 勾引我去学汇编,plc我都忘得差不多了 勾引我去学汇编,plc我都忘得差不多了 我忘的差不多了 勾引我去学汇编,plc我都忘得差不多了 菜鸟路过。。。
勾引我去学汇编,plc我都忘得差不多了 现在已经看不懂了 勾引我去学汇编,plc我都忘得差不多了