Game Maker的GML和RPG Maker XP RGSS的文本文件保护



我一直致力于2个项目,一个在Game Maker 8中制作的程序和RPG Maker XP中制作的RPG,我想做的一件事是让RPG Maker XP读取从Game Maker制作的"分数文件",分数文件本身只是一个基本的文本文件,游戏制造者程序和RPG Maker XP游戏将读取以收集数据。

我面临的问题是,如果有人打开这个分数文件在文本编辑器,如记事本,他们可以改变数据和"作弊",所以我一直试图做的是加密文件,使第一眼,它是不可读的,有Game Maker和RPG Maker XP解密文件,拉出所有的数据,然后加密它

然而,我遇到了一个障碍,我在Game Maker中使用的.dll似乎加密/解密分数文件不同,我通过创建2个相同的.txt文件来测试.dll,其中包含相同的文本,然后在2个程序中加密,内容完全不同,这意味着如果我尝试解密RPG Maker XP中加密的文件在Game Maker中,它会失败

我已经尝试过其他。dll,但他们似乎不工作在RPG Maker XP,从我的理解,RGSS是Ruby的一个类,这意味着任何代码将在Ruby工作应该在RPG Maker XP和Ruby和Game Maker的GML之间的工作,C是通用语言,2可以使用。dll

所以这就是我要问的,是否有任何。dll,脚本,代码等。我可以用它来保护我的文本文件中的数据从被编辑外的Game Maker和RPG Maker XP

Troy " memory - x " memory

PS:如果有一种方法也可以在。php程序中工作,那将是伟大的,但我可以绕过它,如果它不能

异或是解决这个问题的一个非常简单但非常有效的方法。

在GML:

/// script load_xor_file
// arguments: filename
// Prerequisite: Change the "key=" line to your chosen key
var key, kl, file, len, str, i;
key = "YOUR SECRET KEY HERE";
kl = string_length(key);
file = file_bin_open(argument0,0);
len = file_bin_size(file);
str = "";
for( i=0; i<l; i+=1) {
    str += chr(file_bin_read_byte(file) ^ ord(string_char_at(key,i mod kl + 1)));
}
file_bin_close(file);
return str;
/// script save_xor_file
// arguments: filename, data
// Prerequisite: Change the "key=" line to the SAME KEY as in load_xor_file
var key, kl, file, len, i;
key = "YOUR SECRET KEY HERE";
file = file_bin_open(argument0,1);
file_bin_rewrite(file);
len = string_length(argument1);
for( i=0; i<len; i+=1) {
    file_bin_write_byte(file, chr(string_char_at(argument1,i+1)) ^ chr(string_char_at(key,i mod kl + 1)));
}
file_bin_close(file);

我自己从未使用过RPG Maker,但我想为它编写类似的代码不会太难。

需要注意的是,它不能保证安全性。一个人可以反编译Game Maker EXE并显示密钥,或者如果密钥不安全,密钥可以直接被破坏。

一个好的、安全的密钥很长,因为破解加密依赖于密钥的重复。如果密钥是被加密数据长度的一半以上,那么几乎不可能破解加密,除非文件的内容是可预测的(例如,我可以假设文件包含玩家的姓名和分数,因此这些可以用于已知明文攻击)。

总的来说,这并不能保证文件的安全性,但对于您的目的来说,这应该是非常合适的。

还有,既然你在问一个可能的PHP解决方案:

<?php
function load_xor_file($filename) {
    $key = "YOUR SECRET KEY HERE";
    $in = file_get_contents($filename);
    $keyrep = str_repeat($key,ceil(strlen($in)/strlen($key)));
    return $in ^ $keyrep;
}
function save_xor_file($filename,$data) {
    $key = "YOUR SECRET KEY HERE";
    $keyrep = str_repeat($key,ceil(strlen($data)/strlen($key)));
    file_put_contents($filename,$data ^ $keyrep);
}
?>

p。我知道这个问题相当古老,但我只是随机浏览Game Maker标签:p

最新更新