-1

私はゲームメーカー8で作られたプログラムとRPGツクールXPで作られたRPGの2つのプロジェクトに取り組んできました。私がやろうとしていることの1つは、RPGツクールXPにゲームメーカーで作られた「スコアファイル」を読み取らせることです。 、スコアファイル自体は、ゲームメーカープログラムとRPGツクールXPゲームの両方がデータを収集するために読み取る基本的なテキストファイルです。

私が直面している問題は、誰かがこのスコアファイルをメモ帳などのテキストエディタで開くと、データを変更して「チート」する可能性があることです。そのため、私がやろうとしているのは、ファイルを暗号化して、一見したところ、判読不能、GameMakerとRPGMaker XPにファイルを復号化させ、ファイルからすべてのデータを引き出してから暗号化します

ただし、問題が発生しました。GameMakerで使用していた.dllは、スコアファイルの暗号化/復号化が異なるようです。同じテキストを含む2つの同一の.txtファイルを作成して、.dllをテストし、 2つのプログラムでは、内容が完全に異なっていました。つまり、GameMakerで暗号化されたRPGMaker XPでファイルを復号化しようとすると、失敗します。

私は他の.dllを試しましたが、RPG Maker XPでは機能しないようです。私が理解していることから、RGSSはRubyのクラスです。つまり、Rubyで機能するコードはRPGMakerXPおよびRubyとGameの間で機能します。 MakerのGML、Cは、2人が.dllを使用できる一般的な言語です。

だからここに私が求めているものがあります、.dll、スクリプト、コードなどはありますか?これを使用して、テキストファイルのデータをGameMakerおよびRPGMakerXPの外部で編集されないように保護できます。

トロイ「メモ-X」メモ

PS:.phpプログラムでも機能するメソッドがあれば、それも素晴らしいでしょうが、それができない場合は回避できます

4

1 に答える 1

0

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ツクールを使ったことはありませんが、似たようなコードを書くのはそれほど難しいことではないと思います。

注意点として、セキュリティを保証するものではありません。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。この質問はかなり古いことは知っていますが、ゲームメーカーのタグをランダムに閲覧していました:p

于 2012-02-25T02:59:24.850 に答える