【问题标题】:text file protection for Game Maker's GML and RPG Maker XP RGSS [closed]Game Maker 的 GML 和 RPG Maker XP RGSS 的文本文件保护 [关闭]
【发布时间】:2011-12-21 16:26:27
【问题描述】:

我一直在从事 2 个项目,一个用 Game Maker 8 制作的程序和一个用 RPG Maker XP 制作的 RPG,我想做的一件事是让 RPG Maker XP 读取制作的“分数文件”来自 Game Maker,乐谱文件本身只是一个基本的文本文件,Game Maker 程序和 RPG Maker XP 游戏都会读取它来收集数据。

我面临的问题是,如果有人要在记事本等文本编辑器中打开此乐谱文件,他们可能会更改数据并“作弊”,所以我一直在尝试做的是加密文件,以便一开始一看,不可读,让 Game Maker 和 RPG Maker XP 解密文件,取出所有数据然后加密

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

我尝试过其他 .dll,但它们似乎无法在 RPG Maker XP 中工作,据我了解,RGSS 是 Ruby 的一个类,这意味着任何可以在 Ruby 中工作的代码都应该在 RPG Maker XP 和两者之间工作Ruby 和 Game Maker 的 GML,C 是两者可以使用 .dll 的通用语言

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

特洛伊“记忆-X”记忆

PS:如果有一种方法也可以在 .php 程序中工作,那也很好,但如果不能,我可以解决这个问题

【问题讨论】:

    标签: ruby game-maker


    【解决方案1】:

    XOR 是解决这个问题的一个非常简单但非常有效的解决方案。

    在 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);
    }
    ?>
    

    PS。我知道这个问题已经很老了,但我只是随机浏览 Game Maker 标签:p

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多