当前位置: 首页 > news >正文

NSSCTF强网杯GameMaster

img
题目如上,压缩包打开之后有三个文件
img
可以看到有一个程序,还有一个message文件,剩下一个dll文件,dll文件放在最后再考虑是否分析,除非是unity的主函数dll(因为那种dll属于程序的主要代码在里面)
扫描一下文件看看成分:
img
32位程序,并且是c#编写的,调用的还是net文件,使用dnspy打开看看(c#编写的程序很多情况都是使用dnspy进行分析)
img
打开之后,其中的文件夹结构和其中的主函数和自定义函数都明了了,并且其名字也没有说进行混乱处理。基本一眼就知道函数主要作用是什么。
先看主函数:
img
要看的话也不难,关键的地方也就几个地方就知道这个程序大致是什么样子了。嫌弃麻烦或者说图速度更快的话也可以丢给ai分析。

FileStream fileStream = File.OpenRead("gamemessage");
#读取了gamemessage文件内容
int num = (int)fileStream.Length;
Program.memory = new byte[num];
fileStream.Position = 0L;
fileStream.Read(Program.memory, 0, num);
#这地方的主要逻辑就是获取message文件的长度,给memory开辟空间,最后把message文件内容存入memory中

然后再下面代码内容意思就是获取键盘的输入然后执行对应的功能,感兴趣可以看看。
img
看到这里,可以看到这里的函数verifyCode,英语不比我差的应该是可以看得出来这个函数是干什么得,要到达这个函数就是在你得到一定金额之后摁esc然后就会开始检测你目前的钱的信息。
img
这里可以看到它对数值和字符没做什么特殊处理,就是拼接在一起,然后进入下面的函数。进入下面的函数继续分析。

下面函数里面的大多数都没必要分析,就是对游戏中的赌注和金额进行修改什么的,看到一些比较关键的地方:
img
img
这两个地方一个对内存里面的内容作了异或操作,一个对内存里面的数据做了解密操作。从下面有个ECB的字眼,可以看得到这是进行了aes的ECB模式解密。
img
这是往内存里面的内容引入了一些未知值。暂时先放一边,我们知道内存里面的内容是message文件的内容,于是我们把gamemessage文件放入cyberchef进行解密。
img先先把aes的key输出。
img
从这里也可以知道,虽然是ECB模式,但是padding模式是zero,然后输入进去的iv也是0,所以这这两个是不用填入的。
img
用文件检测告诉我是字体文件,但是就是稍微想想就知道,如果是字体文件那为什么游戏的信息在里面并且被加密了呢。
所以把文件里面的数据交给ai分析一下。
并且这个文件的文件头也属于一种未知的状态。
img
img
问了两遍最后问到了关键信息,有MZ文件头的地方。那么将其文件保存之后用010打开然后删除MZ字符之前的所有内容。
img
并且将文件保存卫exe(MZ是exe程序的文件头)
img
扫描发现还是C#程序,用dnspy打开看看。
img
找到之后发现它的名字是ExploitClass,然后去左边打开ExploitClass的那一栏进行分析。
img
总共三个函数。可以看到T1是主要的,然后使用另外两个函数在主要的T1里面。
img
从下面的flag处网上分析,可以知道上面进行的是flag解密,根据流程一步步解密的话就可以得知只要复现这个流程,然后未知的部分使用z3求解器进行求解然后就可以得到flag了。

关键函数:
img
img
然后还有最后的异或操作:
img
最终可以得得exp如下:

from z3 import *
num=-1
x=BitVec('x',64)
y=BitVec('y',64)
z=BitVec('z',64)
s=Solver()
keystr=[101,5,80,213,163,26,59,38,19,6,173,189,198,166,140,183,42,247,223,24,106,20,145,37,24,7,22,191,110,179,227,5,62,9,13,17,65,22,37,5]
arr = [BitVec("arr[%d]"%i,64) for i in range(len(keystr))]
for i in range(320):x=(((x>>29^x>>28^x>>25^x>>23)&1)|x<<1)y=((y>>30^y>>27)&1)|y<<1z=((z>>31^z>>30^z>>29^z>>28^z>>26^z>>24)&1)|z<<1if i%8==0:num+=1arr[num]=(arr[num]<<1)|(z>>32&1&(x>>30&1))^((z>>32&1)^1)&(y>>31&1)
for i in range(len(keystr)):s.add(keystr[i]==arr[i])
if s.check() == sat:model=s.model()#print(model)
x = 156324965
y = 868387187
z = 3131229747
arr4=[x,y,z]
key=[0]*12
for i in range(3):for j in range(4):key[i*4+j]=arr4[i]>>j*8&255arr5=[60,100,36,86,51,251,167,108,116,245,207,223,40,103,34,62,22,251,227]for i in range(len(arr5)):arr5[i]^=key[i%len(key)]print("flag{",end="")
for i in arr5:print(chr(i),end='')
print("}")
#flag{Y0u_@re_G3meM3s7er!}
http://www.wxhsa.cn/company.asp?id=542

相关文章:

  • ARC199 做题记
  • 深入理解Redis高并发分布式锁
  • 计算机硬件基础认知
  • 测试一下别人的
  • 9.10 NOIP模拟改题记录
  • 文件上传及提权
  • 删除字符串中的所有相邻重复项
  • 测试一下iframe3
  • 测试一下iframe
  • ECT-OS-JiuHuaShan 框架,是人类首个且是唯一的真正agi,其产生非人类刻意设计,而是机缘巧合
  • vue(穿透闭包/利用闭包)的几种方式
  • 记录.Net中使用WMI的一些坑,触摸失效和发布增加 PublishTrimmed裁剪异常
  • 多态--成员变量、成员函数、静态函数
  • Linux操作系统相关问题汇总
  • Java学习
  • 鲜花 9.10
  • 【工具】配置笔记本电脑安装centos7关闭盖子不休眠
  • 括号匹配
  • ECT-OS-JiuHuaShan框架的真正意义是打破还原论和人类中心论,公理是客观存在与数学逻辑,不依赖于人类理解与否。
  • z-index的使用方案
  • 再见 PS!豆包 Seedream 4.0 发布,图片生成、合成、编辑、美颜…,一句话搞定!!
  • 鲜花 9.10 - Gon
  • Iframe 全屏嵌入实验
  • 全面获取TSC频率:提升性能分析与基准测试精度
  • 【rdma】RoCE、IB和TCP等网络的基本知识及差异对比
  • WindTerm_2.7.0
  • VMWare Esxi防火墙添加白名单访问及ip异常无法登录解决办法
  • 鸿蒙,下一个iPhone时刻?
  • dw
  • 5%付费率背后,鸿蒙成独立开发者的“商业理想国”