2024腾讯游戏安全大赛PC初赛


2024腾讯游戏安全大赛PC初赛

0x1 题目要求1:在64位Windows10+系统上运行exe, 找到内存中的两串token,作为答案提交(2分)

Toke1

问题3编写程序,运行时修改尽量少的内存,让shellcode 往自行指定的位置写入token1成功

根据题目3要求指定位置写入token1,说明shellcode会写入文件,所以监控NtCreateFile

img

可以看见一直在c盘下创建2024GameSafeRace.token1,后续打印了一下pid发现是任务管理器在调用,但是没有在c盘下发现文件,查看报错code 0x034 是找不到指定目录或路径,所以我将CreateDisponsition参数置为2

img

成功得到token1 757F4749AEBB1891EF5AC2A9B5439CEA

Token2

既然是shellcode肯定会创建线程来运行,所以编写一个监控线程创建的程序,顺便打印start_address

img

启动顺序为:启动监控-加载ace.sys,然后发现hack.exe没有创建任何线程,而且加载ace.sys的时候会卡住一段时间,在这段加载到成功的时间发现了一个不在内核模块的内核线程,非常明显,在加载的时间里只创建了这一个内核线程

img

Dump这段线程,分析发现了token%02x的字符串,通过函数地址在模块中引用发现是用DbgPrintEx这个函数打印参数为(0,5,”token%02x”,v5),已知参数5为指向特定打印,编写代码修改线程的DbgPrintEx level 参数为0,成功打印输出。

img

得到token2

img

8b3f14a24d64f3e697957c252e3a5686

最终得到整个flag:

flag{757F4749AEBB1891EF5AC2A9B5439CEA-8b3f14a24d64f3e697957c252e3a5686}

0x2 题目要求2:编写程序,运行时修改尽量少的内存,让两段token输出成功(满分2分)

根据题目1已经实现token2的输出,通过遍历tid得到PETHREAD,再得到线程的加载地址,实验中虚拟机为win10 1903,所以偏移为写死的0x6a0,通过特征码匹配修改线程。

img

一样根据题目1知道输出不出来是createfile的参数不对,找到注入的线程

img

找到注入到任务管理器中的线程调用createfile的位置

img

调试之后发现 mov [rsp+20],3 就是,当它存在时才创建,将参数改成1,2都可

img

0x3 编写程序,运行时修改尽量少的内存,让shellcode 往自行指定的位置写入token1成功(满分3分)

分析线程发现路径是被异或后的数据,修改两段异或的数据即可往指定的位置写入token1

img

我修改了Game的G变成B 写进c盘,只要将想指定的路径写好异或即可

img


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