在本地架设手游服务器

有一类弱联网的手游,他的战斗过程及奖励结果都在客户端,服务器端通过http协议返回一些排名信息等,通过捕获他的http请求和服务器返回数据,就可以在本地计算机架设一个简单的服务器,提供给自己的游戏使用。

例如,游戏大唐好徒弟的PVP模式是需要联网的,根据捕获的http请求做本地服务器。这里用的是Django。

游戏端POST数据给url: idt.17hf.cn/DaTangServer/htdServlet

idt project

$ django-admin startproject idt
$ cd idt

修改idt/settings.py,在其中添加idt到安装的应用,添加'*'到允许的hosts.

添加json模版文件

$ mkdir -p idt/templates/idt

在 idt/templates/idt 目录中添加templates

模版文件1.html

{"act32":{"yjList":[{"id":"54480","type":1,"btype":0,"bnum":45000,"bstr":"恭喜您获得今日PVP竞技场第19名!\n您获得了以下奖励:","tstr":"2016-05-11 00:00"},{"id":"54738","type":1,"btype":0,"bnum":22000,"bstr":"恭喜您获得今日PVP竞技场第42名!\n您获得了以下奖励:","tstr":"2016-05-12 00:00"},{"id":"54657","type":1,"btype":0,"bnum":10000,"bstr":"恭喜您获得今日无尽模式第61名!\n您获得了以下奖励:","tstr":"2016-05-12 00:00"},{"id":"54932","type":1,"btype":0,"bnum":53000,"bstr":"恭喜您获得今日PVP竞技场第11名!\n您获得了以下奖励:","tstr":"2016-05-13 00:00"},{"id":"54886","type":1,"btype":0,"bnum":10000,"bstr":"恭喜您获得今日无尽模式第65名!\n您获得了以下奖励:","tstr":"2016-05-13 00:00"},{"id":"55192","type":1,"btype":0,"bnum":36000,"bstr":"恭喜您获得今日PVP竞技场第28名!\n您获得了以下奖励:","tstr":"2016-05-14 00:00"},{"id":"55113","type":1,"btype":0,"bnum":15000,"bstr":"恭喜您获得今日无尽模式第49名!\n您获得了以下奖励:","tstr":"2016-05-14 00:00"},{"id":"55316","type":1,"btype":-1,"bnum":0,"bstr":"赞!您的好友[福尔摩斯]使用了您的邀请码获得了丰厚奖励!您的邀请人数+1","tstr":"2016-05-14 15:07"},{"id":"55490","type":1,"btype":0,"bnum":28000,"bstr":"恭喜您获得今日PVP竞技场第36名!\n您获得了以下奖励:","tstr":"2016-05-15 00:00"},{"id":"55408","type":1,"btype":0,"bnum":10000,"bstr":"恭喜您获得今日无尽模式第54名!\n您获得了以下奖励:","tstr":"2016-05-15 00:00"},{"id":"55600","type":1,"btype":-1,"bnum":0,"bstr":"赞!您的好友[天才高亚奇]使用了您的邀请码获得了丰厚奖励!您的邀请人数+1","tstr":"2016-05-15 14:21"},{"id":"55785","type":1,"btype":0,"bnum":18000,"bstr":"恭喜您获得今日PVP竞技场第46名!\n您获得了以下奖励:","tstr":"2016-05-16 00:00"},{"id":"1","type":0,"btype":-1,"bnum":0,"bstr":"欢迎您进入大唐好徒弟!如果您在游戏中遇到任何问题,请使用邮件功能和我们取得联系!我们会及时为您解答,祝您游戏愉快!","tstr":"639-09-12 12:00"}]},"act1060":{"pList":[]},"act1047":{"status":41,"msg":""},"act1044":{"uid":1246625,"cxList":[]}}

模版本件1033.html

{"act1041":{"userList":[{"uid":1104245,"name":"Player","head":3,"pm":3,"exc":3,"exc_pz":0,"cList":[{"npcId":4,"siteId":0,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":0,"txLvl":10,"aid":3,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":10,"atkLvl":10,"defLvl":10,"txLvl":10,"aid":30,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":3,"siteId":2,"star":2,"hpLvl":10,"atkLvl":20,"defLvl":10,"txLvl":10,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":68,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":11,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]},{"uid":1285185,"name":"Player","head":3,"pm":108452,"exc":0,"exc_pz":0,"cList":[{"npcId":4,"siteId":0,"star":1,"hpLvl":0,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":0,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":30,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":3,"siteId":2,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":0,"txLvl":10,"aid":1,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":47,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":0,"txLvl":10,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":11,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]},{"uid":1136269,"name":"Player","head":3,"pm":108649,"exc":0,"exc_pz":0,"cList":[{"npcId":3,"siteId":2,"star":1,"hpLvl":20,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":1,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":4,"siteId":0,"star":1,"hpLvl":20,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":10,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":30,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":20,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":11,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]}]},"act1033":{"uid":1246625,"name":"听我指挥","head":18,"pm":108503,"power":250,"exc":0,"exc_pz":5,"xcList":[{"ot":0,"exp":7319,"maxExp":0,"pz":5},{"ot":1,"exp":0,"maxExp":30,"pz":0},{"ot":2,"exp":0,"maxExp":30,"pz":0},{"ot":3,"exp":152,"maxExp":0,"pz":5},{"ot":4,"exp":0,"maxExp":30,"pz":0},{"ot":5,"exp":418,"maxExp":0,"pz":5}]}}

模版本件1037.html

{"act1041":{"userList":[{"uid":1279568,"name":"Player","head":1,"pm":10,"exc":0,"exc_pz":1,"cList":[{"npcId":3,"siteId":2,"star":2,"hpLvl":30,"atkLvl":30,"defLvl":30,"txLvl":20,"aid":25,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":68,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":104,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":20,"atkLvl":20,"defLvl":20,"txLvl":20,"aid":30,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":104,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":20,"atkLvl":20,"defLvl":20,"txLvl":20,"aid":15,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":60,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":105,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":7,"siteId":0,"star":2,"hpLvl":30,"atkLvl":30,"defLvl":30,"txLvl":30,"aid":13,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":64,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":109,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]},{"uid":1290979,"name":"Player","head":3,"pm":2,"exc":0,"exc_pz":0,"cList":[{"npcId":3,"siteId":2,"star":1,"hpLvl":10,"atkLvl":0,"defLvl":0,"txLvl":10,"aid":1,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":4,"siteId":0,"star":1,"hpLvl":0,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":0,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]},{"uid":1290907,"name":"Player","head":7,"pm":108587,"exc":4,"exc_pz":0,"cList":[{"npcId":3,"siteId":2,"star":1,"hpLvl":10,"atkLvl":10,"defLvl":20,"txLvl":10,"aid":1,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":18,"siteId":5,"star":1,"hpLvl":10,"atkLvl":20,"defLvl":20,"txLvl":10,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":11,"dlvl":1,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":4,"siteId":0,"star":1,"hpLvl":0,"atkLvl":0,"defLvl":0,"txLvl":0,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":0,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0},{"npcId":6,"siteId":1,"star":2,"hpLvl":0,"atkLvl":0,"defLvl":10,"txLvl":10,"aid":0,"alvl":0,"aid_ahp":0,"aid_aap":0,"aid_adef":0,"aid_atx":0,"did":10,"dlvl":0,"did_ahp":0,"did_aap":0,"did_adef":0,"did_atx":0,"jid":0,"jlvl":0,"jid_ahp":0,"jid_aap":0,"jid_adef":0,"jid_atx":0,"bid":0,"blvl":0,"bid_ahp":0,"bid_aap":0,"bid_adef":0,"bid_atx":0,"xid":0}]}]},"act1033":{"uid":1246625,"name":"听我指挥","head":18,"pm":20000,"power":250,"exc":0,"exc_pz":5,"xcList":[{"ot":0,"exp":7324,"maxExp":0,"pz":5},{"ot":1,"exp":0,"maxExp":30,"pz":0},{"ot":2,"exp":0,"maxExp":30,"pz":0},{"ot":3,"exp":152,"maxExp":0,"pz":5},{"ot":4,"exp":0,"maxExp":30,"pz":0},{"ot":5,"exp":418,"maxExp":0,"pz":5}]}}

模版文件10.html

{"act10":{"systime":"{{today}}","sRtnTime":"{leftsec}"}}

修改idt/views.py

# idt/views.py
#coding: utf-8
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render

def index(req):
	return HttpResponse('idt game serv.')

@csrf_exempt
def handler(req):
	print 'see below===='
	print dict(req.POST)
	print req.POST["act_id"]

	if req.POST["act_id"] == '1':
		print 'hello 1....'
		return render(req, 'idt/1.html', content_type='application/json')
	elif req.POST["act_id"] == '1033':
		print 'hello 1033'
		return render(req, 'idt/1033.html', content_type='application/json')
	elif req.POST["act_id"] == '1037':
		print 'hello 1037'
		return render(req, 'idt/1037.html', content_type='application/json')
	# checkday
	elif req.POST["act_id"] == '10':
		print 'hello 10'
		leftsec = 30
		today = 20100517

		return render(req, 'idt/10.html', {"leftsec": leftsec, "today": today}, content_type='application/json')

	#meiri jiangli
	elif req.POST["act_id"] == '1072':
		print 'hello 1072'
		leftsec = 25
		today = 20100517

		return render(req, 'idt/10.html', {"leftsec": leftsec, "today": today}, content_type='application/json')
	else:
		print 'else'
		return HttpResponse("test else.")

修改idt/urls.py

#idt/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from idt import views

urlpatterns = [
    # Examples:
    # url(r'^$', 'idt.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', views.index),
    url(r'^DaTangServer/htdServlet$', views.handler),
]

运行idt project

$ python manage.py runserver 0.0.0.0:80

使用该服务器

在win10上新建一点热点,供给iPad使用。

> netsh
> wlan
netsh wlan> set hostednetwork ssid=win10 key=20101010
netsh wlan> set hostednetwork mode=allow
netsh wlan> start hostednetwork

更该win10网络适配器设置,将本地连接或者无线连接共享给win10这个网络。

修改win10的hosts文件

> notepad c:/windows/system32/drivers/etc/hosts

添加记录192.168.100.120 idt.17hf.cn

其中192.168.100.120为本地服务器的IP地址。

使用iPad连接热点网络win10,就可以了。

如何捕获iPad的请求

这里是使用的网络嗅探,利用 ethercap 进行arp欺骗,以捕获iPad游戏大唐好徒弟对服务器的请求,然后利用 curl 发送数据请求并保存服务器返回的JSON数据进行进一步的分析。

到底有什么用

本地的服务器连接更快,PVP时人物的属性值和排名可以调节,缩短了战斗难度,节约了战斗时间。经验证,PVP战斗的奖励是游戏客户端生成的,其奖励的数量或类别不由服务器直接返回决定,所以,对本地服务器的修改,并不能异常的增大奖励结果,要想要丰厚的奖励,只能一次又一次打了。

突破每天PVP只能5次的限制,可以无限刷物质;每日奖励由每日一次提升到每半分钟就有一次。

利用游戏中邮件系统,更改奖励类型btype=0改为btype=1,可以实现奖励无限铜钱和玉如意,不花钱。

手游服务器

四个程咬金

四个程咬金

故意奖励的物质

大唐好徒弟 玉如意

关于本文如您有任何想法和意见,欢迎与我们联系,邮箱地址zhi@uqugu.com
您对本文有什么看法,喜欢或者不喜欢都可以发表意见。