一个unity引擎写的贪吃蛇游戏,功能挺齐全的,看代码里,C#,和C++都有
搜索知道unity有两个主要特点,程序代码会打包进Assemblely-CSharp.dll库文件下,他主要储存这文件间的相互联系与文件所包含函数,其中gameobject()是用来创建对象的函数包含该函数的模块文件即为游戏的入口,可以看到在Interface下
查壳发现该文件为C++编写,不能用dnspy打开,换回ida
通过定位很容易发现主函数,且刚好位于GameObject()函数下,看到有几个大整数,并且有两次flag提醒,开始以为是RSA,但好像不是,运算比较复杂,师傅说可以直接调用dll函数进行爆破,在函数头我们可以发现确实有一个a1参数被传入
wp
import ctypes
dll =ctypes.cdll.LoadLibrary("F:\\w4nty0u\Plan-A\\6.1\\attachment\\Snake\\Snake_Data\\Plugins\\Interface.dll")
for i in range(255):
print(i)
dll.GameObject(i)
flag{Ch4rp_W1th_R$@}
学到两点:
- 一是unity框架的定位
- 二是dll函数的调用