HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0523
M−yセーブデータ19未解決


M−y

リンク

2014/5/23(Fri) 22:09:45|NO.62147

セーブデータを変数Xが1だったら1ステージクリアみたいにしてとして、
txtだったら、チートされるような(というか、簡単すぎる)ので、どんなファイルに
どうやってセーブしたらいいですか。単に、数字を書き込むだけです。



この記事に返信する


check

リンク

2014/5/23(Fri) 23:08:44|NO.62150

バイナリファイルにxor演算で暗号化して保存しておけば、ほとんどバレることはないんじゃないか?

// xor暗号化 x = 100 // データ key = 47 // 暗号化キー mes x x^key mes x x^key mes x



T.T

リンク

2014/5/24(Sat) 14:26:38|NO.62157

Unicodeに変換する。(他のものと混ぜて)

/*Unicodeで暗号化(他のものと組み合わせると良い)*/ Data = 0 //データ objsize 300,50 button "セーブ",*Save button "ロード",*Load button "チェック",*chk button "ステージクリア",*Plus button "データクリア",*Minus stop *chk dialog Data stop *Plus Data = 1 stop *Minus Data = 0 stop *Save cnvstow Sav,str(Data) //unicodeに変換 notesel Sav notesave "data.sav" stop *Load notesel Sav noteload "data.sav" Data = cnvwtos(Sav) //unicodeを変換 stop



774

リンク

2014/5/24(Sat) 18:40:51|NO.62163

いっそファイル名にしてしまうとか

*save repeat 9 fn = strf("data%02d.dat", cnt) exist fn if(strsize>0){delete fn} loop fn = strf("data%02d.dat", X) i = rnd bsave fn, i, 4 return *load X = 0 repeat 9 fn = strf("data%02d.dat", cnt) exist fn if(strsize>0){X = cnt} loop return



3ルキー

リンク

2014/5/26(Mon) 18:27:21|NO.62204

ネットショッピング等で使用されているRSA暗号がおすすめです。
検索すれば出てくると思います。
少し複雑ですが、これ以外だとプログラミング上級者くらいだと解析出来るそうです。



check

リンク

2014/5/26(Mon) 21:25:22|NO.62207

>これ以外だとプログラミング上級者くらいだと解析出来るそうです。
逆に考えるんだ、自分の作品が解析までして遊んでもらえた証拠だと。
複雑な暗号化には時間が掛かるため、復号化にかかる時間も増える。
まずはパッと見でわからないくらいがいいと俺は思うが。



リンク

2014/5/27(Tue) 09:25:10|NO.62211

扱いには非常に注意しなければいけませんが、レジストリに保存するという手もありますよ。



3ルキー

リンク

2014/5/27(Tue) 21:35:00|NO.62221

checkさんの言う通りでした。
私は昔、sqrtを使ったSQR方式というものを開発して使っていました。(弱点だらけだったが)
解析は簡単だが、自分で暗号化する数式を作ってみるというのが案外いいかも知れないですよ。



HK2

リンク

2014/5/30(Fri) 23:48:27|NO.62253

チートを防ぐ目的であれば、ハッシュを使う方法もあります。
暗号化していないので書き換えは簡単にされますが、読み込み時に書き換えを検知できます。



cats

リンク

2014/5/31(Sat) 11:26:01|NO.62254

暗号化技術が優れていてもセーブデータのファイルが流れてしまうと
それを上書きするだけでゲームを進ませてしまいます。
そのため、ユーザーに割り当てられる変化しないユニークな文字列を
使うことが好ましいです。
下のスクリプトではステージデータにユーザー名を付加して
MD5で暗号化しています。

//パスワードは「stage01」です。 #include "hspinet.as" sdim con, 256 ; ステージ情報 sdim pass, 256 ; 暗号化済みステージ情報 con = "stage01" + sysinfo(2) ; ステージ名 + コンピュータ名(仮) varmd5 pass, con, 64 ; MD5を取得 sdim buf, 64 sdim ret, 256 sdim tmp, 256 input buf, 120, 20 button "認証", *chk stop // 確認 *chk tmp = buf + sysinfo(2) varmd5 ret, tmp, 64 mes "暗号化されたステージ名 : " + pass mes "入力されたパスワード : " + buf mes "仮の情報を付加 : " + tmp mes "暗号化 : " + ret if pass == ret : mes "認証成功\n" : else : mes "認証失敗\n" stop
ただし、ユーザー名は変化しますし、これではコンピュータの乗り換えなどで
データが引き継げなくなってしまいます。
Windowsにはユニークで変化しないファイルがたくさんありますので
それを使ってみるのもいいかと思います。



Ve

リンク

2014/5/31(Sat) 12:55:41|NO.62255

セーブデータの暗号化を頑張るのも良いのですが、
メモリやソフトウェアを弄るツールは沢山あるので、
ゼッタイにチートされないゲームを作るのは難しいです。

セーブデータの暗号化はホドホドに・・・ゲーム内容に力を入れましょう。



Hathino

リンク

2014/5/31(Sat) 22:09:29|NO.62259

セーブデータを暗号化するのもいいですが、チートされたときに備え、
セーブデータの矛盾を探すのはどうでしょうか。
例えば、主人公の最高レベルが99なのに、データを読み込むと100以上になっている場合に、
データを消す、のようなことにしてはどうでしょうか。



リンク

2014/6/4(Wed) 17:41:46|NO.62294

こんな方法はどうですか?

#const KEY 121 // 暗号化キー #const DATAOFFSET 5 // #const TABLESHIFT 2 #const TABLEELEMENT 6 #const TABLEELEMENTSIZE 2 // 現在のstage stage = 120 // 保存する値を割り出す。 // データにマイナス符号が付かない為範囲内に収まる様に加算。 word = stage + dataoffset // セーブデータの定義 例として 3*4 12バイト dim savedata,3 /*暗号化*/ randomize KEY // 暗号化乱数の初期化 repeat TABLEELEMENT wpoke savedata,cnt*TABLEELEMENTSIZE,(word-TABLESHIFT+cnt)^rnd(0xffff) logmes ""+(word-TABLESHIFT+cnt)// 保存された値 loop logmes "--------------" /*復号化 と 値の割り出し*/ randomize KEY // 暗号化乱数の初期化 table=wpeek(savedata)^rnd(0xffff) before=table er = 0 logmes ""+table.cnt repeat TABLEELEMENT-1,1 table.cnt=wpeek(savedata,cnt*TABLEELEMENTSIZE)^rnd(0xffff) logmes ""+table.cnt if(table.cnt-before)!=1{ dialog "セーブデータが不正です。" er=1 break } before=table.cnt loop mes "" if(er==0){ font msGothic,32 mes ""+(table(TABLESHIFT)-DATAOFFSET)+" 階層" }



きのよー

リンク

2014/6/4(Wed) 19:56:41|NO.62296

友人が考えたものに、数字を使うものがある。
例えば5という数字を保存したいときに
21458763123
81234695453
64532845134
94321564875
81345927551
とか、とりあえずそれっぽく暗号化みたいな事ができる。
原理は一番最初の数字の数だけ飛ばして読む、みたいな。



Mizuho

リンク

2014/6/7(Sat) 14:56:52|NO.62339

配布(頒布)したものは最後まで見て欲しいという考えで、私の場合は
むしろセーブデータの内容や書き替え方法までマニュアルに書いちゃうんですけど、

クレジットカードのCCV2(でしたっけ?)みたいに、1ならば487、2ならば190など
1桁目が面で、2〜4桁目が、「1の場合は487でなければいけない」というように
するのが簡単かと。



ミント

リンク

2014/6/13(Fri) 21:26:24|NO.62420

あまりレスばかりしてしまうと、質問者が追いつかないような気がします・・・
っというより質問者いるのかな?



M-y

リンク

2014/6/15(Sun) 21:01:13|NO.62443

ありがとうございました
たくさんありがとうございます
いろいろ試していきたいです

ところで、パスワード忘れてしまったのですが・・・



ZAP

リンク

2014/6/15(Sun) 21:58:30|NO.62446

パスワード?記事を削除するのですか?

ここに書き込まれた皆さんの回答も、
後日、似たような疑問を持った人のためには役に立つ内容を含んでいるので
みんなの財産です。残しておくほうがよいと思います。
自分の質問目的が達成されたからといって消す必要はないですよ。



M-y

リンク

2014/6/16(Mon) 16:10:09|NO.62464

パスワードじゃないです。
クッキーけしちまったんで
べつじんになっています



kanahiron

リンク

2014/6/16(Mon) 17:44:12|NO.62468

この掲示板で個人を識別できるものはユーザー名とIPアドレスですが両方変わっていませんよ
削除用パスワードは(見える範囲で)保存されていません



ONION software Copyright 1997-2023(c) All rights reserved.