Y1rannn 发表于 2022-3-23 20:37

[2019红帽杯]Snake


## Snake

好久没上线了,长春疫情但是我的设备都在寝室,封寝来的太突然,好久没能做两道逆向,但是要备战今年国赛了.

看到大师傅BUU上一个月刷了7000分,顺序刷题不管分数, 我觉得我也得有这种精神, 一道题磕不动就继续磕!

题目本身很简单, 或者说是不难吧, 但是之前没怎么碰过U3D,也算是接触一下.

今年国赛队伍的web和misc都走掉了, 估计也碰不到邬江兴院士的可信计算, 估计国赛要三等扑街了...

---

这题看上去应该是一道.NET U3D, 先玩了几百分, 感觉没啥用, 没有遇到过这种类型的题, 先放在 Dnspy 里看一眼

!(https://tianyu.xin/usr/uploads/2022/03/2056209337.png)


失策了,它不是, 那翻翻DLL

!(https://tianyu.xin/usr/uploads/2022/03/3115171165.png)


在./Manage下

!(https://tianyu.xin/usr/uploads/2022/03/2052455246.png)


把CSharpAssembly扔进Dnspy, 尝试找找关键函数, 整个MainUIController实现了游戏的启动升级之类的, 但是直到无尽模式也看不到flag相关的信息

去找GameObject, 发现用到了interface这个dll, 反编译之

!(https://tianyu.xin/usr/uploads/2022/03/2932353816.png)


!(https://tianyu.xin/usr/uploads/2022/03/2029013406.png)


直接去到Gameobject里, 看看怎么达成这个you win

!(https://tianyu.xin/usr/uploads/2022/03/558434197.png)


感觉这个地方是类似某种高精度数据结构, 我讨厌SSE, 第一个参数是Dst, 第三个参数是数字长度

A9D0这个函数就是一个数字转字符, 但是两个涉及高精度的函数还是很麻烦的. 这时候我疑惑输入在哪里.

整个函数只有一个参数传进来, 并且也是唯一参与后面运算的. 当这个参数在0~100中才能走到win, 否则有一大堆SKTEDG什么的东西, 还有7777, 玩梗大师

那么根据猜测v74里面有一个1399...的大整数, v64里第二个大整数, v71里是传入的参数

!(https://tianyu.xin/usr/uploads/2022/03/4091683753.png)


它们三个被扔进了6250这个函数, 结果应该是扔到了v67里, 6250这个函数实在不是人能分析的, 现在摆在我面前可行的路至少有两条, 一是爆破, 因为只有100个值,不会时间太长, 二是动调, 看看这个函数是干啥的, 但是后面还有一个函数AAB0需要动调, 动调本身也是个猜的过程, 我感觉时间成本太高, 还是爆破吧...

```python
import ctypes

for i in range(0, 100) :
    dll = ctypes.cdll.LoadLibrary(".\Snake_Data\Plugins\Interface.dll")
    dll.GameObject(i)
# flag{Ch4rp_W1th_R$@}
```

宅友 发表于 2022-3-23 21:38

小白看哭了

Panel 发表于 2022-3-24 00:19

我最近在写的也是叫Snake😂,只不过不是同一道题

sergin 发表于 2022-3-24 06:45

大佬,小白路过一脸懵

cheny12120 发表于 2022-3-24 09:03

路过懵一脸

starlin 发表于 2022-3-24 10:10

小白一脸懵啊

bzhan 发表于 2022-3-24 10:51

小小白实名崇拜

eutaxy 发表于 2022-3-24 11:04

白白路过

penghaoaini 发表于 2022-3-24 14:22

完全看不懂呀,这是干嘛的了?

dl0618 发表于 2022-3-24 15:49

感谢分享,感谢楼主
页: [1] 2
查看完整版本: [2019红帽杯]Snake