codegate final 2018 writeup

远程支援,做了三个逆向,一个《GoCrack》,两个游戏题《Game》,输出还行。

文件链接;https://github.com/LeadroyaL/attachment_repo/tree/master/codegate_final

一、G0Crack

很简单的循环 xor,将输入xor上预期的 key,与输出比较。

二、gameServer

这是一个类似宠物妖怪的游戏,有两个 flag,都是满足一定条件时服务器直接返回。

提供一个 binary 文件,服务器是一个 web server,搭建环境需要开一个 apache 使用80端口,再运行 binary 文件,使用8080 端口。官方提供的 web都是静态页面,爬回来就可以自己用了,使用 js 控制 websocket 来和 binary 文件进行交互,协议都在 js 和 binary 里,不需要猜协议。

整个过程就是控制宠物妖怪,到处走,随机战斗,战斗不受控制,会告诉你战斗结果,打不过也没关系,扣血扣到1。

嘛,然后就逆向嘛,elf 64bit。

(写这篇文章时候发现 idb 打不开了,我这台机器 ida 版本太低)

两个 flag,一个是升级升到100时候给 flag(正常情况升不到100级),一个是在某个地形站着,触发剧情就给 flag。

没有 idb 么,那就说思路吧:

1、 其实这道题很像游戏安全的一些东西,有些数据是客户端主动给服务器的,假设战斗数据是本地扔过去的,就可以刷怪刷经验什么的。

2、 尝试找一些整数溢出。因为各个属性都是整数,正面刚肯定是打不过怪物的,所以用整数溢出去打可能会有用。

3、尝试找一些能够给角色属性赋值的 API,篡改角色数据。

很遗憾,角色数据存放于远程,最后似乎是可以溢出一个东西,刚好溢出到角色属性,就可以随意刷怪,打到100级了。

有个迷惑的地方,通过进入特殊的房间可以累积一个值,当累积的刚好94时候可以获得状态”enable cheat”,会加9999金币,然而金币没有任何卵用。

第二个 flag 是在意外发现的,有一个很特殊的道具叫炉石。顾名思义,炉石就是用来传送的,使用了几次总会被传到奇奇怪怪的地方,一开始没有在意。后来找到了存放地图的地方,观察一遍,发现放 flag 的地板所在的房间是不可达的,而且发现地图末尾存放着传送点,每个地图末尾传送点都不一样。

炉石使用传送点时候是瞎 jb 写的,所以可以传送到那个房间。最后也是这样做的。

有空时候把 idb 补上。


=============================================================
随着访客的增多,LeadroyaL在本站流量的开支越来越多了,曾经1元能用1个月,现在1元只能用3天。如果觉得本文帮到了你,希望能够为服务器的流量稍微打赏一点,谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code