защита текстовых файлов для Game Maker GML и RPG Maker XP RGSS - PullRequest
0 голосов
/ 04 ноября 2011

Я работал над 2 проектами, программой, созданной в Game Maker 8, и RPG, созданной в RPG Maker XP. Одна из вещей, которую я пытаюсь сделать, - заставить RPG Maker XP прочитать «Файл оценки», сделанный из Game Maker сам файл партитур представляет собой простой текстовый файл, который программа Game Maker и игра RPG Maker XP будут читать для сбора данных.

проблема, с которой я сталкиваюсь, заключается в том, что если бы кто-то должен был открыть этот файл результатов в текстовом редакторе, таком как блокнот, он мог бы изменить данные и «обмануть», поэтому я пытался зашифровать файл так, чтобы сначала на первый взгляд, это нечитаемо, чтобы Game Maker и RPG Maker XP расшифровали файл, извлекли из него все данные и затем зашифровали его

однако я наткнулся на загадку, DLL-файл, с которым я работал в Game Maker, похоже, по-другому шифрует / дешифрует файл партитуры, я протестировал .dll, создав 2 идентичных файла .txt с одинаковым текстом в них и затем зашифрованные в 2 программах, содержимое было совершенно другим, что означает, что если я попытаюсь расшифровать файл в RPG Maker XP, который был зашифрован в Game Maker, он потерпит неудачу

я пробовал другие .dll, но они не работают в RPG Maker XP, насколько я понимаю, RGSS - это класс Ruby, что означает, что любой код, который будет работать в Ruby, должен работать в RPG Maker XP и между Ruby и Game Maker's GML, C - это общий язык, который 2 могут использовать .dll для

так вот что я спрашиваю, есть ли .dll, сценарий, код и т. Д. который я могу использовать для защиты данных в моем текстовом файле от редактирования вне Game Maker и RPG Maker XP

Трой "Memor-X" Memor

PS: если есть метод, который также может работать в программе .php, это было бы замечательно, но я могу обойти это, если он не может

1 Ответ

0 голосов
/ 25 февраля 2012

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

...