Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PwnAdventure3:一款专为黑客而开发易受攻击的MMORPG游戏

PwnAdventure3:一款专为黑客而开发易受攻击的MMORPG游戏

作者头像
FB客服
发布于 2018-07-31 01:57:47
发布于 2018-07-31 01:57:47
1.7K00
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行
Pwn Adventure 3是一款专为黑客而开发的,易受攻击的第一人称MMORPG游戏,其目的旨在提升游戏开发人员的安全编码能力。

Pwn Adventure 3的游戏场景设置在一座美丽的岛屿上,在这个岛上任何情况都有可能发生,例如飞行,无限游戏虚拟币等。

  • 官方网站:http://www.pwnadventure.com/

视频系列

以下是该视频系列的一部分,涵盖了游戏中各类不同的挑战任务。

  • 使用Docker创建私人服务器 - Pwn Adventure 3:part 2
  • 信息收集/侦察 - Pwn Adventure 3:part 3
  • 使用gdb恢复游戏类 - Pwn Adventure 3:part 4
  • 使用LD_PRELOAD Hooking Linux - Pwn Adventure 3:part 5
  • 飞行以及我们的第一个flag!- 大冒险3:part 6
  • 远程跳转和悬停(难以承受的复仇) - Pwn Adventure 3:part 7
  • 找到隐藏的金蛋 - Pwn Adventure 3:part 8
  • 开发一个TCP网络代理 - Pwn Adventure 3:part 9

服务器安装

安装条件

来自官方README文档:

  • 至少需要2GB的内存,内存越大则能运行的实例越多。
  • 游戏服务器不需要任何的图形硬件,纯粹运行在控制台上。 我们推荐你使用Amazon AWS和Digital Ocean VPS
  • 游戏服务器的运行需要占用大量内存,使用fork和写时复制将允许在单个主机上运行更多的实例。
  • 对于内存仅为2GB的服务器,我们建议运行的实例不要超过5个。而具有8GB RAM的服务器通常可以运行的实例数量与CPU可以处理的数量相同。
  • 如果有足够的RAM,建议每个CPU core只运行2-3个实例,以免造成游戏的卡顿现象。
  • 客户端和服务器的文件也超过了2GB,因此需要你的磁盘有足够的空闲空间。

你可以通过以下3种方法来构建和部署自己的服务器。

1.官方文档

根据官方提供的文档说明来构建和部署服务器。官方文档:http://www.pwnadventure.com/#server

2.指南

@Beaujeant创建了一个简易的分步指南,你可以参考该指南来构建和部署服务器。https://github.com/beaujeant/PwnAdventure3/blob/master/INSTALL-server.md

3.Docker

如果你的主机上已安装了docker和docker-compose,那么这个方法应该说是最简便的了。它可以轻松运行和TEARDOWN服务器,而无需更改实际的主机系统。

首先,我们下载并安装PwnAdventure3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/LiveOverflow/PwnAdventure3.git
cd PwnAdventure3
wget http://pwnadventure.com/pwn3.tar.gz
tar -xvf pwn3.tar.gz

想要运行服务器,必须要安装docker和docker-compose。Docker的更新发展速度较快,因此建议大家最好通过PwnAdventure3的官方文档安装部署。

  • Docker CE Ubuntu: https://docs.docker.com/install/linux/docker-ce/ubuntu/.
  • docker-compose: https://docs.docker.com/compose/install/
  • 确保当前用户为docker组:sudo usermod -a -G docker $ USER。重启或重新登录并使用id验证用户是否为docker组。

然后在项目目录下运行docker-compose build来重新构建服务,并启动主服务器和游戏服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose build
docker-compose up

你也可以在docker-compose up后添加-d参数,使其在后台运行。

客户端安装

首先从官方网站下载客户端:http://www.pwnadventure.com/#downloads

要使客户端连接到新服务器,必须修改客户端的server.ini文件。docker启动的服务器主机名master.pwn3和game.pwn3(理论上是可以在docker/setup文件中进行修改的)。

客户端的server.ini文件必须遵循以下内容格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[MasterServer]
Hostname=master.pwn3
Port=3333

[GameServer]
Hostname=game.pwn3
Port=3000
Username=
Password=
Instances=

确保客户端可以访问这些主机,例如将它们添加到/etc/hosts文件。在本例中,服务器运行在192.168.178.57上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
192.168.178.57  master.pwn3
192.168.178.57  game.pwn3

警告:在server.ini中使用IP作为主机名将不起作用!在这个问题上我被折腾了2个多小时。

终止服务器,只需输入docker-compose。

警告:数据库文件并不是永久保存的 - 取下容器将会重置所有内容。所以为了以防万一,请提前做好备份。

故障排除

Error: docker-compose build

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker-compose build
Building init
ERROR: Error processing tar file(exit status 1): write /client/PwnAdventure3_Data/PwnAdventure3/PwnAdventure3/Content/Paks/Characters.pak: no space left on device

原因:你的磁盘空间可能不足。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker-compose build
Building init
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

原因:你的用户可能不属于docker组。sudo usermod -a -G docker pwn3,用id验证。或service docker restart重启docker服务。

文件完整性

检查文件是否已损坏:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ md5sum pwn3.tar.gz
d3f296461fa57996018ce0e4e5a653ee  pwn3.tar.gz
$ sha1sum pwn3.tar.gz
022bd5174286fd78cd113bc6da6d37ae9af1ae8e  pwn3.tar.gz

PwnAdventure3 Client Errors

Connection Error: Unable to connect to master server

这可能意味着MasterServer不可访问。

客户端问题:

  • 检查客户端server.ini中的[MasterServer]条目
  • 你是否能从系统中的主机ping通master.pwn3?
  • /etc/hosts文件中的IP是否正确?

服务器问题:

  • 服务器没有运行并在3333端口侦听?
  • 通过sudo netstat -tulpn命令检查
    • 主服务器侦听:tcp6 0 0 :::3333 :::* LISTEN 31913/docker-proxy
  • 如果两个容器都在运行,请检查docker ps
    • 主服务器运行?880f93374070 pwn3server “/opt/pwn3/setup/mas…” 0.0.0.0:3333->3333/tcp, 5432/tcp pwnadventure3_master_1

Waiting in connection queue…

这说明MasterServer可以访问,现在正在等待一个可以提供给客户端的免费GameServer。这可能意味着没有GameServer正在运行,或者无法连接到MasterServer。

服务器问题:

  • 游戏服务器是否在端口3000-3005上运行并侦听?
  • 使用sudo netstat -tulpn命令查看服务及监听端口
  • tcp6 0 0 :::3000 :::* LISTEN 32160/docker-proxy
  • pwnadventure3_game_1容器是否正在运行?使用docker ps -a命令进行检查
    • 84343f81034f pwn3server “/opt/pwn3/setup/gam…” 0.0.0.0:3000-3010->3000-3010/tcp, 5432/tcp pwnadventure3_game_1
  • 你是否在docker-compose up中看到以下内容:line 1: 7 Killed ./PwnAdventure3Server; pwnadventure3_game_1 exited with code 137
    • 获取更多内存

Docker版本

以下是在测试期间的主机版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ uname -a
Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ docker-compose version
docker-compose version 1.19.0, build 9e633ef
docker-py version: 2.7.0
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
$ docker --version
Docker version 17.12.1-ce, build 7390fc6

*参考来源:GitHub, FB小编 secist 编译,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3 游戏后端开发需要掌握的知识
这篇是从网上找到牛人的博客总结下来的: 实战方面: (1)两种在知名IT公司使用的游戏服务器架构设计 点击图片可以放大 1 各个服务器的功能以及作用: CenterServer服务器管理器:管理所有
范蠡
2018/07/25
1.4K0
3 游戏后端开发需要掌握的知识
探索使用 Kubernetes 扩展专用游戏服务器:第1部分-容器化和部署
尽管容器(containers)和 Kubernetes 是很酷的技术,但为什么我们要在此平台上运行游戏服务器?
为少
2021/05/27
2.8K0
探索使用 Kubernetes 扩展专用游戏服务器:第1部分-容器化和部署
Unity3D-游戏开发移动端网络游戏服务器架构
弱联网的游戏,主要是指对游戏数据实时性要求比较低的联网游戏,比如卡牌游戏,休闲游戏等。
孙寅
2020/06/02
2.5K0
Unity3D-游戏开发移动端网络游戏服务器架构
探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架
nano 是一个轻量级的服务器框架,它最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端。当然还不仅仅是游戏,用 nano 开发高实时 web 应用也非常合适。
为少
2021/05/27
8K0
探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架
Leaf 游戏服务器框架简介
下载地址: https://github.com/name5566/leaf/blob/master/TUTORIAL_ZH.md Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 H5(HTML5)游戏服务器。 Leaf 的关注点: 良好的使用体验。Leaf 总是尽可能的提供简洁和易用的接口,尽可能的提升开发的效率 稳定性。Leaf 总是尽可能的恢复运行过程中的错误,避免崩溃 多核支持。
李海彬
2018/03/26
2.6K0
探索 Nano 内置分布式游戏服务器方案测试用例
How to build distributed system with Nano
为少
2021/05/27
1K0
探索 Nano 内置分布式游戏服务器方案测试用例
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇
这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程。
为少
2021/05/27
7750
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇
【专业技术】如何搭建游戏服务器?
存在问题: 手游越来越火了,听听业内人士的分析,他山之石,多多借鉴,那么手游的服务器到底如何搭建的? 解决方案: 从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术。(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑。 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用。 业界主要的是c/c++ + Pyt
程序员互动联盟
2018/03/15
12.7K0
游戏服务器框架 Leaf/go
Leaf 是一个使用 Go 语言开发的开源游戏服务器框架,注重运行效率 并追求极致的开发效率。Leaf 适用于几乎所有的游戏类型。其主要的特性: * 良好的使用体验。Leaf 总是尽可能的提供简洁和易用的接口,尽可能的提升开发的效率 * 稳定性。Leaf 总是尽可能的恢复运行过程中的错误,避免崩溃 * 多核支持。Leaf 通过模块机制和 leaf/go 尽可能的利用多核资源,同时又尽量避免各种副作用 * 良好的模块支持。 一个 Leaf 开发的游戏服务器由多个模块组成(例如 LeafServer),模块有以
李海彬
2018/03/22
5.8K0
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第2篇
这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程。
为少
2021/05/27
1K0
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第2篇
【教程】搭建咸鱼之王私服,附源码下载
【CentOS】虚拟机忘记密码,如何重置密码。_centos重置密码-CSDN博客文章浏览阅读1.5w次,点赞16次,收藏83次。1.重启系统2.在这个选择界面,按e3.找到如下位置,插入init=/bin/sh。4.填写完成后按Ctrl+x引导启动5.输入mount -o remount, rw /6.重置密码出现以下为重置成功7.执行touch /.autorelabel8.退出exec /sbin/init9.输入你的新密码即可登录,到此重置密码完成!..._centos重置密码
小锋学长生活大爆炸
2024/05/25
1.9K0
11 一种高性能网络游戏服务器架构设计
网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制。客户端与服务器通过网络数据包交互完成每一步游戏逻辑,由于游戏逻辑是由服务器负责处理的,要保证面对海量用户登录时,游戏具有良好的流畅性和用户体验,优秀的服务器架构起到了关键的作用。
范蠡
2018/07/25
6K0
11 一种高性能网络游戏服务器架构设计
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(中)
快速上手多人游戏服务器开发。后续会基于 Google Agones,更新相关 K8S 运维、大规模快速扩展专用游戏服务器的文章。拥抱☁️原生? Cloud-Native! 系列 ColyseusJS
为少
2021/05/27
2.1K0
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
快速上手多人游戏服务器开发。后续会基于 Google Agones,更新相关 K8S 运维、大规模快速扩展专用游戏服务器的文章。拥抱☁️原生? Cloud-Native! 系列 ColyseusJS
为少
2021/05/27
8.5K0
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存
在本系列的第 1 部分中,我们讨论了如何使用专用游戏服务器,将其与 Docker 打包,然后在Kubernetes 上托管和管理它,这是一个很好的开始。然而,由于我们的 Kubernetes 集群通常是固定大小的,我们可能会耗尽所有可用容量来运行我们需要的所有游戏服务器容器,以匹配所有想玩我们的游戏的玩家——这将是一件非常糟糕的事情。
为少
2021/05/27
2.7K0
探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存
探索 Golang 云原生游戏服务器开发,硬核实战之调试 NanoServer 生产级麻将游戏服务器
因为 nanoserver 使用了 xorm,它会自动的根据定义的 model 生成数据库表 schema。
为少
2021/05/27
1.6K0
探索 Golang 云原生游戏服务器开发,硬核实战之调试 NanoServer 生产级麻将游戏服务器
4 关于游戏服务端架构的整理
一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须)。其中业务逻辑可能根据具体需要,又划分为好几个子模块。
范蠡
2018/07/25
3K0
4 关于游戏服务端架构的整理
使用 Kubernetes 扩展专用游戏服务器:第4部分-缩减节点
在前三篇文章中,我们将游戏服务器托管在 Kubernetes 上,测量并限制它们的资源使用,并根据使用情况扩大集群中的节点。现在我们需要解决更困难的问题:当资源不再被使用时,缩小集群中的节点,同时确保正在进行的游戏在节点被删除时不会中断。
为少
2021/05/27
7010
使用 Kubernetes 扩展专用游戏服务器:第4部分-缩减节点
游戏服务器端有什么特别
在游戏服务器端开发所有要面对的问题中,有两个是最核心和最普遍的:一是和客户端的通讯;二是游戏登录用户的数据处理。
韩伟
2018/03/05
3.3K1
游戏服务器端有什么特别
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第5篇
这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程。
为少
2021/05/27
3520
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第5篇
推荐阅读
相关推荐
3 游戏后端开发需要掌握的知识
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验