RPG游戏《军官之歌官网》如何解密?

【RPG Maker MV插件编程】【实例教程6】存档的加密解密与保护 - 简书
【RPG Maker MV插件编程】【实例教程6】存档的加密解密与保护
作者:Mandarava(鳗驼螺)
微博:@鳗驼螺pro
这篇文章前半部分将研究MV游戏的存档、读档过程,从而实现一个MV游戏存档修改器。后半部分则是实现一个防止存档被修改的MV存档保护插件。
找出MV存档和读档的方式
DataManager 类用于管理数据库和游戏对象,包括游戏的存档、读档。DataManager 使用DataManager.saveGame() 方法来存档,用DataManager.loadGame() 方法来读档。在存档过程中,它会实际调用DataManager.saveGameWithoutRescue() 来保存存档数据。看一下这个方法的具体实现:
DataManager.saveGameWithoutRescue = function(savefileId) {
var json = JsonEx.stringify(this.makeSaveContents());
if (json.length &= 200000) {
console.warn('Save data too big!');
StorageManager.save(savefileId, json);
this._lastAccessedId = savefileId;
var globalInfo = this.loadGlobalInfo() || [];
globalInfo[savefileId] = this.makeSavefileInfo();
this.saveGlobalInfo(globalInfo);
首先,它会先用DataManager.makeSaveContents() 方法将需要存入存档的数据(包括
$gameSystem,$gameScreen,$gameTimer,$gameSwitches,$gameVariables,$gameSelfSwitches,$gameActors,$gameParty,$gameMap,$gamePlayer 等10个全局变量的数据)合并成一个对象contents。DataManager.makeSaveContents的实现代码如下:
DataManager.makeSaveContents = function() {
// A save data does not contain $gameTemp, $gameMessage, and $gameTroop.
var contents = {};
contents.system
contents.screen
contents.timer
contents.switches
contents.variables
contents.selfSwitches = $gameSelfS
contents.actors
contents.party
contents.map
contents.player
然后使用JsonEx.stringify 方法将这个对象进行json序列化转换成json字符串。(说句题外话,从这里也可以看出,如果我们要保存自定义的变量、数据到存档中,只需要以属性的方式添加给这10个全局对象中的任意一个即可,非常简单。)然后再调用StorageManager.save(savefileId, json) 方法将json字符串保存到存档文件中(在读档时,这个json字符串会被反序列化成那10个全局对象)。
再看一下StorageManager.save 方法的实现(如下面的代码)。对于本地数据,它会实际调用saveToLocalFile 方法去保存数据。
StorageManager.save = function(savefileId, json) {
if (this.isLocalMode()) {
this.saveToLocalFile(savefileId, json);
this.saveToWebStorage(savefileId, json);
下面的代码是StorageManager.saveToLocalFile 方法的实现。在正式保存前它会用LZString.compressToBase64 方法将json字符串编码成Base64字符串。
StorageManager.saveToLocalFile = function(savefileId, json) {
var data = LZString.compressToBase64(json);
var fs = require('fs');
var dirPath = this.localFileDirectoryPath();
var filePath = this.localFilePath(savefileId);
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
fs.writeFileSync(filePath, data);
类似的,对于读档过程,我们最终也会追踪到一个类似的方法,StorageManager.loadFromLocalFile 方法。在这个方法里,它会将存档中的内容使用LZString.decompressFromBase64 方法来还原成json字符串。
StorageManager.loadFromLocalFile = function(savefileId) {
var data =
var fs = require('fs');
var filePath = this.localFilePath(savefileId);
if (fs.existsSync(filePath)) {
data = fs.readFileSync(filePath, { encoding: 'utf8' });
return LZString.decompressFromBase64(data);
所以,实际上MV的存档内容就是使用LZString.compressToBase64 方法编码过的Base64字符串,而存档的解密方法就是用LZString.decompressFromBase64 方法进行反向解码操作。
制作MV存档的修改器
经过以上分析,现在只需要将LZString 的代码复制出来,简单的用HTML+Javascript技术就能做出一个MV存档的解密、加密工具,这个工具我放在github上,有兴趣的可以从
用这个工具来测试一下MV的存档数据,效果如下图,真实数据都被解密出来了,只需要将真实数据进行一下修改,然后再重新加密,将加密的内容复制回存档保存就完成了存档的修改。
MV存档测试
如何保护存档?
为防止存档被随意修改,可以对存档内容进行加密,在读档时也要相应的作解密操作。通过分析,进行加密操作的最佳位置是在DataManager.saveGameWithoutRescue 方法中进行,当全局对象被序列化成json字符串后,立即对json字符串进行加密。而解密过程相应的放在DataManager.loadGameWithoutRescue 中进行。LZString的作用是对字符串进行压缩,当然你也可以只重写LZString.compressToBase64和LZString.decompressFromBase64方法,在实现压缩/还原的时候同时实现字符串的加密与解密,本质上没有差别,但直接修改LZString 影响面会比较广,所有调用这二个方法的代码都会有影响,包括global.rpgsave 的数据也会被加密。
制作一个存档保护插件
接下来就来制作一个存档保护插件。这里只需要重写DataManager.saveGameWithoutRescue方法,实现json字符串加密,重写DataManager.loadGameWithoutRescue方法,实现json字符串的解密还原即可。完整的代码如下(本插件的最新版本可以在下载)。其中encrypt和decrypt方法是字符串的加密、解密方法。加密时,它会先对json字符串先进行一次LZString压缩,然后用凯撒加密算法(本算法修改自 )对压缩过的字符串进行加密,解密时就是反向操作。凯撒加解密算法简单、强度不高,好处是不会增加字符串长度, 还有个相对高强度的版本,可以设定字符串密码,但缺点是会增加存档内容的长度。你也可以用自己的算法(比如DES, AES等)来代替(PS:如果要更换算法,注意验证算法是否支持对中文的加密解密,如果不支持中文,你可以像这里一样先用LZString对它进行一次压缩操作)。
//==============================
// MND_ProtectProfile2.js
// Copyright (c) 2017 Mandarava
// Homepage: www.popotu.com
//==============================
* @plugindesc 用于加密存档的插件,可指定加密密码。(v1.0)
* @author Mandarava(鳗驼螺)
* @version 1.0
* @param Password
* @text 存档密码
* @desc 任意数字,通常取0~26之间的数字。
* @type Number
* @default 66
* 使用时请修改存档密码,不要使用默认值哦!
* 本插件采用凯撒加密算法,强度较低,好处是不会增加存档内容长度。可以采取的提高
* 算法强度的方法,包括:对几偶数上的字符采用不同的偏移量,在特定位置添加混淆字
* 符或字符串等。要使用加密强度较高的版本请使用 MND_ProtectProfile.js 插件。
* by Mandarava(鳗驼螺)
(function($){
var params=PluginManager.parameters("MND_ProtectProfile2");
var password=Number(params["Password"]) || 66;
DataManager.saveGameWithoutRescue = function(savefileId) {
var json = JsonEx.stringify(this.makeSaveContents());
if (json.length &= 200000) {
console.warn('Save data too big!');
json=encrypt(json, password); //对json字符串进行加密
StorageManager.save(savefileId, json);
this._lastAccessedId = savefileId;
var globalInfo = this.loadGlobalInfo() || [];
globalInfo[savefileId] = this.makeSavefileInfo();
this.saveGlobalInfo(globalInfo);
DataManager.loadGameWithoutRescue = function(savefileId) {
var globalInfo = this.loadGlobalInfo();
if (this.isThisGameFile(savefileId)) {
var json = StorageManager.load(savefileId);
json=decrypt(json, password); //对加密过的json字符串进行解密
this.createGameObjects();
this.extractSaveContents(JsonEx.parse(json));
this._lastAccessedId = savefileId;
//===字符串加密解密算法=========
//凯撒加密算法改自:https://github.com/bukinoshita/caesar-encrypt
function numToChar(num){
return String.fromCharCode(97 + num);
function charToNum(char){
return char.charCodeAt(0) - 97;
function caesar(char, shift){
return numToChar(charToNum(char) + (shift % 26));
function caesarDec(char, shift){
return numToChar(charToNum(char) - (shift % 26));
function encryptByCaesar(value, shift){
var letters = value.split('');
return letters.map(function (letter) { return caesar(letter, shift); }).join("");
function decryptByCaesar(value, shift){
var letters = value.split('');
return letters.map(function (letter) { return caesarDec(letter, shift); }).join("");
* 加密字符串
* @param text 要加密的字符串
* @param shift 解密密码(任意数字,通常取0~26之间的数字)
* @returns {*}
function encrypt(text, shift) {
var result=LZString.compressToBase64(text);
result=encryptByCaesar(result, shift);
* 解密字符串
* @param text 要解密的字符串
* @param shift 解密密码(任意数字,通常取0~26之间的数字)
function decrypt(text, shift) {
var result=decryptByCaesar(text, shift);
result=LZString.decompressFromBase64(result);
//===========================
现在,可以运行一下游戏,然后保存游戏,退出游戏再加载游戏,一切都没有问题,说明存档、读档都是正常的。然后,再用前面做的MV存档修改工具测试一下存档数据是否能被解密。在开发期间,存档会保存到[项目目录]\save 文件夹下,用记事本打开该文件夹下的名称类似file1.rpgsave、file2.rpgsave 的存档文件,复制其内容,粘贴到存档修改工具的密文框中,点击“解密”,解出来的数据仍然是加过密的字符串,根本无法修改。这样,这个存档保护插件就完成了。
存档解密测试
PS:在DataManager.saveGame 方法中,在存档时,如果玩家是以覆盖旧存档的方式进行新存档的,那么MV会使用StorageManager.backup 方法对被覆盖的旧存档进行一次备份,以便在存档失败时通过StorageManager.restoreBackup 方法恢复。在StorageManager.backup 方法中看似对存档数据又进行了一次LZString.compressToBase64压缩,但际上它在使用StorageManager.loadFromLocalFile 方法读取旧存档数据时,那个方法会对数据进行一次LZString.decompressFromBase64解压。所以,二相抵消,实际上它并没有改变任何数据。所以StorageManager.backup和StorageManager.restoreBackup方法不需要重写。
by Mandarava(鳗驼螺)
一个码农界的小学生。
作者:Mandarava(鳗驼螺)微博:鳗驼螺Pro 这个传送插件可以用来制作传送道具或传送技能。当玩家使用传送道具或传送技能后,会弹出一个窗口显示可以传送到的地点列表,玩家选择地点后,角色可以瞬间转移到该地。制作出的道具可以是可消耗的物品,也可以是永久有效的物品。本文将完...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
2018-Read-Record 记录我的2018学习历程 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用m...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
原文地址:数字证书原理,公钥私钥加密原理 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成...
资深少年Valar Morghulis.Valar Dohaeris. 17世纪,在美国马里兰州安纳波利斯卸茶叶的码头工人都穿一种短袖衣,人们把“Tee”(茶)缩写为“T”,将这种衬衫称为T-Shirt,即T恤衫。 19世纪中叶,牛仔裤的发明者列维o司特劳斯创出了第一个牛仔...
由于公司业务需要多次预加载(3次以上),所以就去查了一些资料,最后还是问了别人才知道了如何多次预加载,下面展示下 1-4次预加载的方法。 1次预加载: 这个大家应该都会一次preload(从post预加载与他相关的comments) posts = Post|& Repo....
文|Danica 温暖的午后,来一杯咖啡,插上耳机,听一段经典老歌,这样的时光应该很惬意!可惜,今日又不见温暖的阳光,陪伴的依旧是窗外绵绵的细雨声。 很久没有潜下心来听音乐了,也很久没有学习新的歌唱曲目了,我一直不是音乐的追随着,对于唱歌,我也没有刻意去学习,只是听到喜欢的...
项目中有个模块某个页面需求是两个tab切换,刚好上篇文章也是写的是tablayout+viewpager+fragment问题,自然想到用tablayout来实现,UI的效果图是这样的。 吧啦吧啦代码实现了,还实现了滑动功能的,可效果却是这样的。 好吧,这效果我都不能忍,设...
内衣会让女人变得风情万种,能够更加凹凸有致妩媚动人,帮她们尽情展示内衣真是美好的一面。梦幻、性感的设计,精致的蕾丝,恰到好处的弧线,温柔的色彩,让女性对这件贴身之物有很大的期盼和想象空间。但是各位女孩子们,你们可知道内衣是讲究穿法的,没有穿对内衣对健康会造成多大危害? 首先...《军官之歌》11月迎来新章节剧情 华人打造PC免费RPG!
17:25:35来源:巴哈姆特编辑:
& &早前,白色十一月(White November)负责开发的PC单机游戏《军官之歌》获得了不少玩家的好评,而现在,官方正式宣布,这款原创微女性向SRPG将在11月公布全新的章节,同时为我们带来了游戏的宣传PV。
& &宣传PV:
& &官方指出,游戏将继续採取分章节长篇连载的形式推出,并将保持免费,目前推出的是第一章,游戏包括之前的序章在内,这次将带给玩家两个章节、10 个小时游戏时间的体验。另外,目前游戏尚有部分系统 UI 仍然在更新和开发中,还有很多丰富的搜集要素和系统仍未开放,希望之后会带给玩家更多惊喜和期待。
& &官方同时公开了由日津树伶老师绘制的游戏封面海报图和新的人物设定、美化 UI 和新增的CG。
& &关于《军官之歌》:
& &《军官之歌》是由俄国华人雅沙及俄国、台湾、美国、中国、澳大利亚、泰国和日本的朋友共同努力和参与下制作的作品,作品拥有庞大的文本量和详实的历史背景考证。
& &海报图、人设图及游戏内截图:
友情提示:支持键盘左右键← →翻页
如果你想在挤公交的时候,高峰期有座位坐,那么请你叫醒一个睡的特别香的人。告诉他到站了,他一定会飞奔下车,还会不断的感谢你。别问我为什么知道,我也不知道我怎么就下车了……
一款哥到婚介公司想找个漂亮女人包养。工作人员问是包月,还是包年,还是包日?款哥:能按照流量计算吗。。。
相信很多玩家都知道,现在《绝地求生》中外挂泛滥,十分影响游戏的平衡,很多玩家因此毫无游戏体验,而在最近,一名外挂售卖者公开叫嚣嘲讽《绝地求生》玩家,这句话直接引起了很多玩家们的愤怒。
在游戏世界中有形形色色的角色,但对于男玩家来说,小姐姐是他们最想看到的。所以开发商们在游戏中加入了不少令人印象深刻的女性角色,今天我们就找了一些出来,看看有没有你喜欢的。
从一开始的“春节左右”到现在反反复复的“未能过审”,《绝地求生》国服等的玩家心累。不过就在最近几天,不少小伙伴都通过右下角的弹窗接收到了一份特殊的“调查问卷”。
《绝地求生》是一个非常火的FPS生存游戏,每隔一段时间就会更新新的内容。在最新的更新公告中,此前曝光的武器皮肤和新箱子将加入游戏。官方表示将于北京时间3月27日上午10点开始正式服的停机维护,进行此次的更新与赛季重置。
动漫和游戏是两个联系非常紧密的行业,将超人气漫画改编成游戏,在日本可以说是司空见惯。所以我们就看到了各种各样的漫改游戏,虽然不一定每一款都会成功,但其中的内容确实也非常有趣。下面我们就为大家介绍15款最爽快的漫改游戏!
游戏是自由的,因此每个人在游戏中的追求也有所差异,只不过,有些玩家在游戏中的行为确实让人感觉无聊……
“开放世界”类的游戏,以其超高的自由度、广阔的地图、丰富的支线剧情和任务以及探索的无穷乐趣,深受广大玩家的欢迎,开放世界的游戏现在也有很多,但是那些值得去玩耍呢?一起来看看吧~
在游戏圈也存在一些意外取得成功的经典作品,它可能原本是一款游戏的MOD、对战地图,或者只是个人作品,但在机缘巧合下,最后成为了经典。那么今天就给大家盘点下那些“无心插柳”的经典游戏吧~
去年的今天,《绝地求生》正式登陆Steam开启抢先体验,当时的它就像一颗小石子,在Steam的汪洋大海没有溅起水花,没想到在接下来的一年内,它引发全民吃鸡的浪潮,席卷了整个游戏界。
最近有玩家发现,Steam版《孤岛惊魂5》只能购买DLC,本体目前无法购买。也有人询问了育碧方面,得到的回应是,官方也已经意识到了这个问题,目前正在沟通解决,请玩家耐心等待。有兴趣的小伙伴一起来看看吧。
48小时热点资讯
热门手游推荐(您的评论需要经过审核才能显示)
共0人参与,0条评论
其它游戏排行
01020304050607080910
020304050607080910
本站资源均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的资源,请来信告知,我们将及时撤销相应资源。
Copyright &
www.Cncrk.com. All Rights Reserved. 浙网文[8号
浙公网安备 47号
请简要描述您遇到的错误,我们将尽快予以修订军官之歌第二章正式版下载 军官之歌破解版下载 _k73电玩之家
游戏介绍:
《军官之歌》是白色十一月工作室推出的一款SRPG游戏,游戏结合了文字+策略两种元素,玩家们既可以玩到策略要素,又可以体验到文字游戏的魅力,小编这里就来和大家分享下其第二章正式版的资源下载,喜欢该作的玩家可千万别错过了哦!
游戏第二章破解资源缺失,暂时提供第一章下载资源
军官之歌特色
-策略+文字的双重魅力
-剧情内容十分丰富
-丰富的挑战及关卡
军官之歌说明
游戏名称:军官之歌游戏类型:SRPG游戏制作:白色十一月工作室游戏发行:白色十一月工作室游戏平台:PC游戏语言:中文
《军官之歌》,是一款可以在「普通模式」享受战棋策略的乐趣又可以「简单模式」体验游戏剧情的微女性向 SRPG。
军官之歌游戏信息
最低配置: 操作系统: Windows XP/Vista/Windows 7/8/8.1/10 (32bit/64bit) 处理器: 1.6 GHz 内存: 128 MB RAM DirectX 版本: 9.0 存储空间: 声卡: DirectX 9.0 Compatible Sound
展开更多 >
收起内容 >
相关游戏:
版权所有 鄂ICP备号
k73所有游戏及软件下载资源均来源自互联网,并由网友上传分享。如有侵权,请来电来函告之。
K73电玩之家【RPG游戏】军官之歌
通知: 网站已恢复~
军官之歌游戏下载剧情以一战前后的俄罗斯帝国历史、革命和俄国内战为蓝本改编,日系动漫风格。作品拥有庞大的文本量和详实的历史背景考证。历经5年的剧本酝酿和将近两年的团队辛苦制作的一款RPG游戏。
解压 密码 :
访问密码1:
评分: 5.00星
打赏积分给作者
分享到QQ空间下载地址失效了的话

我要回帖

更多关于 陆军军官学校歌 的文章

 

随机推荐