xwtwhonew0002 发表于 2018-5-17 10:48

腾讯游戏安全技术竞赛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


qinxing 发表于 2018-5-17 10:55

什么时候我也能像大佬一样来分析

466162659 发表于 2018-5-17 10:57

勾引我去学汇编,plc我都忘得差不多了

isispp 发表于 2018-5-17 11:05

勾引我去学汇编,plc我都忘得差不多了

HUIKER 发表于 2018-5-17 12:49

我忘的差不多了

阿林比翁 发表于 2018-5-17 14:17

勾引我去学汇编,plc我都忘得差不多了

我是路人甲 发表于 2018-5-17 22:04

菜鸟路过。。。

ctiger 发表于 2018-5-17 23:46


勾引我去学汇编,plc我都忘得差不多了

tracy_goo 发表于 2018-5-18 03:02

现在已经看不懂了

xuwenyi 发表于 2018-5-18 03:53

勾引我去学汇编,plc我都忘得差不多了
页: [1] 2 3 4 5
查看完整版本: 腾讯游戏安全技术竞赛2018 决赛第1题分析记录