TenCent2022PC初赛


2022年腾讯PC端初赛

0x0 前言

这里写的wp不是我提交的wp,提交的只写了关键位置。所以又重新写一份从头到尾的思路wp。

1

先来一张图帮助大家理解下面为什么有这些步骤和作用。

0x1 ida分析

2

刚进来就是判断是否多开,防止多开,先是注册窗口,然后建立窗口

3

再往下就是显示窗口,进入初始化D3D和渲染函数

4

进入D3D这里就是图中的各种配置(跟题目都无关紧要)

7

这里是渲染函数里面,已经写了注释。

5

6

这里是shellcode的开头,90肯定都不陌生都是nop,为了后面的填充

9

8

后面就是继续填入shellcode和存opcode进去,判断时间来清空shellcode

0x2 关键shellcode入口

10

就在获取时间前面

0x3 动调分析

11

这里进入shellcode 里面就这一个函数,上面那些什么代码都是D3D的什么着色器,顶点,什么的。刚开始那里以为第一段是正确,下面那段是残缺。了解半天最终发现错了。不是关键位置。

14

1615

可以数出来总共刚好11个(黄色格子的数量) 调试可以发现 3E8和1F4会进入相减变成负数,导致错误。所以全部改成0

9

运行起来发现,只有4个。

6

这里是计算异或ACE的

7

这里是计算最终的值的

8

会将他们放入到 R8 R9的寄存器里。这里是通过判断正确打印的方格动调发现,异或ACE的应该放入R8 ,而最终的值应该放入R9

10

记录每次的值,然后直接手动改变R8 R9的值

1

发现打印出来了成功了,但是我们得需要一个改变好的exe上传,就需要改变opcode的值,想想为什么R8 R9会被调换顺序。

13

观看每次的顺序,原本把每段都记下来的,后面做完删了。可以看见正确的方格后面都是跟 206 207 然后进入5渲染。动调分析发现6 和 7就是索引地址。把错误的方格的6 和 7调换。成功

0x4 题目总结

最终的改变就是,静态删除opcode的38F 和 1F4,然后把错误顺序的6和7进行交换。然后保存到exe中,最终就可以得到一个运行就有小旗子的exe。

0x5 做题总结

碰见这题的时候两眼一抹黑,有wp思路和自己一步一步做完全两回事。我先是一行一行的百度搜索,注册窗口啊,创建窗口,里面参数的意义和作用。从头逆到脚。后面百度学习了D3D是如何绘制的,创建Device 交换链,分发message。这些作用,和shellcode里面那些字符串的意义和作用。前面这些完全和题目无关,但是做的时候也不知道这些是在干嘛,也不知道是不是关键点。最终到shellcode里面就是做一个理解opcode做了什么,改变了坐标或者check对错。如果我是复现题目的话,可以知道关键位置,也就不会了解前面那些的作用了。或许这就是自己摸索和看wp写最大的差距


文章作者: Blue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Blue !
评论
  目录