2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ゲームのデータファイルについて語るスレ

1 :名無しさん@お腹いっぱい。:01/11/18 12:27 ID:YbPM6OMf
ゲームのデータファイルについて語るスレです

データファイルの種類(画像、BGM、効果音、音声など)は問いません
データファイルのフォーマット、圧縮、プロテクトなど語りましょう

2 :2:01/11/18 12:35 ID:???
[ヘッダ2byte][チェックサム2byte][データ2byte]

3 :1:01/11/18 12:42 ID:???
とりあえずフォーマットあたりから

ゲームを作るときには当然
データファイルのフォーマットも考えなければなりません
ちなみにいくつかのWINのゲームのデータファイルを見てみると
だいたい下記のような感じになってますね

・ヘッダー情報(識別ID、ファイル内のデータの数など)
 ファイル先頭に(必ずといっていいほど)ある
 特にはじめの4バイトが識別IDになってるものが多い(?)

・データ情報(データの識別名、位置、サイズなど)
 たいてい、ヘッダー情報の後にこれが配列される
 この数はヘッダー情報にある

・実際のデータ
 データ情報の配列の後に来る
 (ヘッダー情報のサイズ+データ情報×配列数の後)

私もゲームのデータファイルはこうしてますが、
他にもよく使われるフォーマットありますか?

4 :1:01/11/18 12:46 ID:???
追加
> 特にはじめの4バイトが識別IDになってるものが多い(?)
例えばYSUEのデータファイル(monde.ys2)は
初めの4バイトは"YS2E"が
メモオフ(***.dat)は"lnk"が識別IDとして入ってます

5 :名無しさん@お腹いっぱい。:01/11/18 13:11 ID:0XqbuScU
可変長データのストアにはどんな構造使ってる?
俺はRIFF-WAVEみたいに、
DWORD ID
DWORD size
BYTE data dup(size)
のチャンク構造でやってるけど。

6 :名無しさん@お腹いっぱい。:01/11/18 13:31 ID:+D6UHFOl
>3,4
コンパイラが(というかCPUが)32ビットごとに
アクセスしたほうがパフォーマンスがいいから
Cで書くと

struct data
{
  long sign;
  long width;
  long height;
  ...
}

という風に宣言しておくのはよくやるみたい。
CGの横幅なんか2バイトで十分そうでも4バイトとるし。

7 :名無しさん@お腹いっぱい。:01/11/18 13:34 ID:CJPmmNZI
ところで、先頭の4バイトの識別子は、
magicが一般的ですか?

8 :名無しさん@お腹いっぱい。:01/11/18 15:22 ID:???
 MAGファイルから直接DirectDrawのサーフェスに
読み込ませてる俺はDQNですか?

9 :(●´ー`●):01/11/18 15:51 ID:???
このスレなぁ、今んとこプログラマの好みの問題にみえるべ。

10 :名無しさん@お腹いっぱい。:01/11/18 17:02 ID:I9nxB+Qv
参考資料
http://www.wotsit.org/

11 :名無しさん@お腹いっぱい。:01/11/18 19:24 ID:JxPdgokv
>10
おお、こんなところ知らなかった。便利だ、感謝。

画像ファイルとかって、皆どうやって扱ってるのかな。
俺はMAGっぽい独自フォーマットで圧縮して、何十枚かまとめて
一つのファイルにしてる。ヘッダにオフセットのサイズの情報を
書いておいて、適宜抜き出してるけど。

12 :名無しさん@お腹いっぱい。:01/11/18 19:32 ID:ZN+7V7L8
圧縮ならS3TCが扱いやすい。
固定長マンセー

13 :11:01/11/18 19:50 ID:???
s/オフセットのサイズ/オフセットとサイズ/

14 :PSEC鍵生成パラメータ教えて:01/11/18 20:06 ID:dvJg5esY
暗号化だが、
http://info.isl.ntt.co.jp/
のEPOC PSEC Camelliaはどうか。
特にCamellia。

15 :8:01/11/18 20:26 ID:???
>>11
俺はMAGそのまんまだ。拡張子もMAG(w

 昔のエロゲなんかでMAGのヘッダ潰して拡張子変えただけ
ってのもあったらしいが。

16 :名無しさん@お腹いっぱい。:01/11/18 20:29 ID:???
オレは画像にはPNG使ってる
データはアーカイブにして、すべてを一つにまとめてる。
データのフォーマットは
struct header {
u32l sign;
u32l size;
u32l crc32;
};
あとは簡単な暗号化を施したカタログ情報と、
その後に圧縮データが続く。

17 :名無しさん@お腹いっぱい。:01/11/19 01:02 ID:mVW1u3JE
MAGフォーマットってフリーの規格なの?
俺もほぼパクリで使ってるけど、なんかそのまま使うと怖いような。

18 :名無しさん@お腹いっぱい。:01/11/19 01:14 ID:???
マルチペイントのマニュアルには
同人ソフトなどでMAGフォーマットのデータを使ったりしても
いいですよ。みたいな事が書いてあった。

19 :1:01/11/19 01:34 ID:???
MAGフォーマットですか・・・
知りませんでした・・・

ちなみにMAGフォーマット検索してたら
こんなページ見つけました
〜 圧縮法入門 〜
http://www.ingnet.or.jp/~kojif/mu/comp/index.htm

20 :1:01/11/19 01:42 ID:???
追加
http://www.gavo.t.u-tokyo.ac.jp/~hosoyama/report/ex2b6.html

21 :名無しさん@お腹いっぱい。:01/11/19 02:15 ID:???
鮪の前身であるMAKIフォーマットが完全なフリーをコンセプトに
開発されたものだから、当然MAGも自由に使えます。
適度な圧縮率と展開の速さ&容易さで今でも便利なMAG萌え。

22 :名無しさん@お腹いっぱい。:01/11/19 02:23 ID:???
ついでに、MAGの仕様は「MAGBIBLE」で検索かけると見つかると思われ。

23 :名無しさん@お腹いっぱい。:01/11/19 05:16 ID:zy4OsR/0
>>14
おお国産ですな。暗号化はAESしかしらないですなぁ
ブロック長より鍵長のほうが重要だと思うんですが AES 互換を全面に出した
ということですかな。Rijndaelより高速で256bit-keyが使えるなら使いたい。。
問題は Optimize されたレベルでより高速かということですが。。。

24 :名無しさん@お腹いっぱい。:01/11/19 11:21 ID:mVW1u3JE
メッセージデータは当然圧縮なり暗号化なりするだろうけど…1byteずらして
ごまかすってのはダメ?(w

というかゲームデータを隠すのに128bit暗号も使わないて。

25 :名無しさん@お腹いっぱい。:01/11/19 11:49 ID:???
>>23
そういうのってすごい気になるけど、データの鍵は
プログラムがもってるわけ?
鍵とデータを一緒に配布するって馬鹿くせえとおもったが・・・

26 :名無しさん@お腹いっぱい。:01/11/19 13:13 ID:???
どの部分が鍵かなんて逆アセでもしないと解らないと思うけど。

27 :名無しさん@お腹いっぱい。:01/11/19 14:51 ID:???
逆汗すりゃわかるんでしょ。

28 :名無しさん@お腹いっぱい。:01/11/19 15:11 ID:???
圧縮の方の技術だけど、
ブロックソート後のデータもほとんど暗号と変わらんよ。
ゲームに使うなら十分でしょ

29 :名無しさん@お腹いっぱい。:01/11/19 15:40 ID:???
http://www.interq.or.jp/www-user/enra/rina/
こんなのどう?

30 :名無しさん@お腹いっぱい。:01/11/19 16:23 ID:???
たかがゲームデータ抜きたさに逆汗するヴァカがいるか!

31 :名無しさん@お腹いっぱい。:01/11/19 16:35 ID:???
とりあえず貼っとくか。
http://www.jisyo.com/viewer/faq/mag_tech.htm
MAG仕様書(原文) もちろん日本語ね。

32 :名無しさん@お腹いっぱい。:01/11/19 16:56 ID:???
>>30
結構いる

33 :名無しさん@お腹いっぱい。:01/11/19 16:57 ID:???
>>29 作者がドキュン

34 :名無しさん@お腹いっぱい。:01/11/19 17:44 ID:???
>>29 waveletにはちょっと興味あるけど。

35 :名無しさん@お腹いっぱい。:01/11/19 18:23 ID:???
解析を楽しむページ
ttp://ku-www.ss.titech.ac.jp/~yatsushi/analyze.html
参考までに。

36 :名無しさん@お腹いっぱい。:01/11/19 20:17 ID:???
基本的に、解析クン一人にでも負けたらツールばら撒かれて終わりだからなあ(藁

37 :名無しさん@お腹いっぱい。:01/11/19 21:36 ID:???
>>25
鍵とデータが一緒になきゃ復号できないじゃん。
勘違いしてるのかもしれないけどこれはゲームの話で、実際に暗号を
使う場面では利用者がそれぞれに鍵を持っているので一緒も糞もない。

38 :名無しさん@お腹いっぱい。:01/11/20 00:12 ID:???
TIM2ってどうよ?

39 :名無しさん@お腹いっぱい。:01/11/20 00:35 ID:???
>38 PS2の開発なんてやったことも機会もなさそうだしなぁ…
PCで使う意義もないし。

40 :名無しさん@お腹いっぱい。:01/11/20 05:03 ID:y/kAXWZY
Camelliaのコードをみましたが、8bitASIC系に特化されてて
16,32bitの最適化ソースが公開されていないようですね。
最適化ソースが無いのでRijndaelには速度で勝てないでしょう。残念ながら。
Feistel回数が比較して多いのとFeistelとSBOXの手間が他の方式と比べて
煩雑です。Feistelを何回か回すだけでも簡単な暗号系になりますから
それでもいいんですけどね。

41 :名無しさん@お腹いっぱい。:01/11/20 11:19 ID:???
>>37
そりゃそうだ。
しかしどんなに強力な暗号化を使っても、鍵と一緒に配布されてるんじゃなあ(藁

42 :名無しさん@お腹いっぱい。:01/11/20 12:29 ID:???
たかがゲーム(失礼)のデータを、そこまで暗号化しなくても
と思うのは、俺だけか?

43 :名無しさん@お腹いっぱい。:01/11/20 13:30 ID:LstOLEvl
俺もそう思う。どうせ>>35のリンク先のようなレベルのにかかったら
何やったって解析されてしまうんだから無駄無駄。
シェアウェアのクラック問題にも似てるけど。

44 :名無しさん@お腹いっぱい。:01/11/20 13:42 ID:???
>>42
同感。
複雑な暗号化は速度的にも不利なうえに鍵添付じゃあ、その鍵で
暗号化を解除してくださいとクラッカーに言ってるようなもの。
暗号化にかける時間があったら他のことやったほうがよい。

45 :名無しさん@お腹いっぱい。:01/11/20 14:13 ID:???
>>43
あのリンク先程度じゃ、変形算術圧縮とか、TripleDES掛けただけでも解析できなくなるだろ

46 :名無しさん@お腹いっぱい。:01/11/20 14:17 ID:???
まぁしばしばルーチンの解析なんかしないで、ルーチンごと
ブッこぬいて使ったりするけどね。

47 :名無しさん@お腹いっぱい。:01/11/20 15:56 ID:???
複雑になればなるほど、所詮手動の解析では手間がかかる。
つまり、複雑度を限りなくあげてやればよい。

48 :名無しさん@お腹いっぱい。:01/11/20 16:04 ID:???
結局、複合化後のデータを抜き出すようなコード書けば
意味無いんじゃないの?
ネトゲなんかで課金がからむと真面目にやったほうがいいんだろうが、
普通のオフラインゲームであんまり気張ってもなぁ。

49 :名無しさん@お腹いっぱい。:01/11/20 16:04 ID:???
暗号化アルゴリズムをどう複雑にしたって、たとえば
bool decrypt(byte *out, byte *in, int len);
みたいな関数の入り口見つけられたら、そこからそのまま
ひっこぬかれておしまい。
アルゴリズムではなくてプログラムを複雑にすると
今度はプログラムが単に汚くなる。

50 :48:01/11/20 16:05 ID:???
>>49 かぶった。結婚する?(ワラ

51 :名無しさん@お腹いっぱい。:01/11/20 16:18 ID:???
こういう暗号化は、暗号化アルゴリズムをいかに
複雑にして解読を防ぐかじゃなくて、復号ルーチンを
どうリバースエンジニアリングから守るかだよ。

52 :名無しさん@お腹いっぱい。:01/11/21 04:09 ID:XcI+VzyT
皆さんソフトにリバースエンジニアリングを防ぐ建設的な手法を使って
いらっしゃいますか?(結局理論的には解析可能だから対策をしないと
いうのはとても簡単なことですが…)

>>51
>暗号化アルゴリズムをいかに複雑にして解読を防ぐかじゃなくて

おおむね同意します。でも暗号アルゴリズムなんてXORでもない限り
複雑なものを導入しても大してコストはかからないですよ。感覚としては
XORをかけるならAESかけるのもさして違いはないです。

53 :52:01/11/21 04:13 ID:???
>XORでもない限り
すみません "s/XORでもない限り/"

54 :名無しさん@お腹いっぱい。:01/11/21 12:09 ID:???
XORとAESってそうとう違うような・・・

55 :名無しさん@お腹いっぱい。:01/11/21 13:01 ID:kTxoHJqc
どうせ鍵を同梱するなら、XORでももっと凝った暗号でも
防御力は一緒だと思ってたんだけど、違うの?

56 :名無しさん@お腹いっぱい。:01/11/21 13:45 ID:???
>>55
鍵と暗号済みのデータがあれば、解読できるわけ?

57 :名無しさん@お腹いっぱい。:01/11/21 14:46 ID:???
ゲームを普通に起動して、
メモリ上に展開された解読済みデータを
ReadProcessMemory で抜き取るとか。

58 :名無しさん@お腹いっぱい。:01/11/21 15:13 ID:K8u4BtIq
>>49
グローバルなレジストフラグをプログラム全体に散りばめておいて、
レジストチェックルーチンの中でそのフラグを直接操作する。
こうすることで、レジストチェックルーチンをスキップしただけでは
動作しないようになる。
あとはひたすらチェックルーチンを冗長に複雑にする。
例えば、チェックルーチンは仮想マシンコードで実装する。
これによって直接の逆アセンブラは防げる。
あとは、そのルーチンを圧縮して、展開コードを仮想マシンで書いて
インタプリタで動かして、無駄なコードをつけまくって、ひたすら頑張る。

一度このシステムを作れば、プログラムにフラグを生めこむだけなので再利用はきくよ。

59 :名無しさん@お腹いっぱい。:01/11/21 15:20 ID:???
なんか話がいつのまにかレジストチェックルーチンの話に
すりかわってますぜ旦那・・・

60 :名無しさん@お腹いっぱい。:01/11/21 15:27 ID:???
みんなサウンドやBGMのコーデックに何使ってる?

61 :名無しさん@お腹いっぱい。:01/11/21 15:45 ID:K8u4BtIq
>>59
暗号化も鍵を隠すという点ではにたようなものでしょうが。

62 :名無しさん@お腹いっぱい。:01/11/21 15:51 ID:???
>>60
OggVorbis

63 :名無しさん@お腹いっぱい。:01/11/21 16:10 ID:???
暗号の鍵を暗号化する?w まぁがんばれや
ネットゲーの場合はときどきサーバからあたらしい
アルゴリズムの復号化DLLが送られてくる、とかで
結構なんとかなるかな。

64 :名無しさん@お腹いっぱい。:01/11/21 17:21 ID:???
>>60
漏れもOggVorbis使ってる

65 :名無しさん@お腹いっぱい。:01/11/21 18:41 ID:???
普通のゲームの場合、暗号化されたデータと鍵と復号ルーチンを全部配布してるわけで、
その辺が普通の暗号解読とは違う。

個人的にはあんまりむきになっても仕方ないと思ってるんだけど

66 :名無しさん@お腹いっぱい。:01/11/21 20:11 ID:16mzDT/7
鍵と金庫を一緒にユーザにしてんのに、
南京錠だろうがIDカードだろうが同じことだと思う今日この頃。
シェアウェアなら、パスワードにデータの解除キー混ぜたり
できるかもしらんけどどのみち気休めでんな。

67 :名無しさん@お腹いっぱい。:01/11/21 20:12 ID:16mzDT/7
s/してんのに/渡してんのに/

68 :名前は開発中のものです。:01/12/16 02:56 ID:inKSfJGH
age

69 :名前は開発中のものです。:01/12/16 06:56 ID:???
OggVorbis 重くない?
これ入れてから FPS が激減しちゃったんだけど・・。

70 :名前は開発中のものです。:01/12/17 00:01 ID:7KBcu3BJ
MP3 2%, OGG 5%, APE 15%, MPC 1%, AAC 15% (Celeron450MHz@Winamp における負荷調べ)

どこぞから拾ってきた参考資料
多少は重いかも

71 :名前は開発中のものです。:01/12/17 01:57 ID:???
www.din.or.jp/~glit/TheOddStage/Progs/audioplayer/
こんなのがある。CPU使用率調べ。

72 :名前は開発中のものです。:01/12/17 06:58 ID:???
>>71
やっぱ、mp3もoggも遅いマシンだと負荷は馬鹿にならないなー。

73 :名前は開発中のものです。:01/12/17 06:58 ID:???
いやそのページのPenIIIマシンが遅いという気はないんだが。にんともかんとも

74 :名前は開発中のものです。:01/12/23 03:58 ID:nVi8CRdJ
OggVorbis RC3 早くでないかな・・・。

75 :名前は開発中のものです。:02/01/09 13:03 ID:4uvwfI59
>74
でまして。

76 :名前は開発中のものです。:02/01/09 23:33 ID:SWMCUrMt
OggVorbis RC3 すごく音がいいぞ

77 :名前は開発中のものです。:02/02/03 13:30 ID:???
>>29,33
去年の話でなんですけど、閉鎖ということでご勘弁を。

78 :名前は開発中のものです。:02/02/04 09:16 ID:eg/wWGzG
>>76
160kbpsとか?

79 :名前は開発中のものです。:02/04/26 09:07 ID:???
プレイ中のゲームの変数改竄方法と対策について語り合ってるスレはないですか?

80 :名前は開発中のものです。:02/04/26 10:44 ID:???
プレイ中のゲームの変数改竄方法と対策について語り合ってるスレはないですか?

81 :名前は開発中のものです。:02/04/26 11:43 ID:???
>プレイ中のゲームの変数改竄方法と対策について語り合ってるスレはないですか?
プログラムコードを書き換えることで、変数改竄をするパターンが
多いです。なので、これに対する対策は、全てのアプリケーションデータを
プログラムコード全領域をキーとする暗号をかけてしまうことです。
こうすれば、プログラムコードを変化させようものならば、
アプリケーションデータも解凍時に支障が起きます。
プログラムコードが変更するたびにデータも作成しなければならないという
点がデメリットと、絶対に常駐するコード領域をキーにするというのが
必要条件です。

もっとも気休め程度の暗号なのですが。

82 :名前は開発中のものです。:02/04/26 12:27 ID:???
>>81
結局、コード書き換えされればいつかは改造されるのか。

オフラインなら良いかもしれないんだけど、ネットゲーだと致命的だよな。
課金とか絡んでくるし。
チートキャラだらけのネトゲに金払うなんてバカバカしいってことで
ゲームの存続にもかかわってくるから結構重要な問題かと…

83 :名前は開発中のものです。:02/04/26 12:54 ID:???
プレイ中にプログラムを切り替えてターゲットゲームの変数の増減を検索して
何の値であるか推定し、書き換えるアプリがありますね。
プロセスの切替時の各パラメータチェックサムの変化で書き換えを検出
できそうですが、いずれ高度な書き換えソフトが出ないとも...

84 :名前は開発中のものです。:02/05/04 04:02 ID:???
折れは男らしく全部ビットマップ
ダブルキュリックで中身が見える親切設計だ折れもユーザーも大ハッピー。まいったか

85 :名前は開発中のものです。:02/05/14 09:00 ID:???
ネットだと結局、改竄してもらっては困るデータ(能力値等)をサーバーに、
改竄してもどうでもいいデータ(テクスチャ)を置いて、完全にクライアント
とサーバーを分割するしかない。 というか、それでオケな気もする。

86 :名前は開発中のものです。:02/05/14 21:45 ID:x.mXxrcs
 

87 :名前は開発中のものです。:02/08/22 20:45 ID:???
>84
まいった。
アナタ最強でつ。

88 :1:02/09/07 01:56 ID:???
おお、このスレまだあったんだなぁ・・・(涙


89 :名前は開発中のものです。:02/09/23 06:51 ID:???
ねぇ3Dのデータ扱うのに「これ使っとけヽ(`Д´)ノゴルァ!!」って感じの
フォーマット教えて下さい……

90 :名前は開発中のものです。:02/09/23 07:18 ID:hVSm4E2G
自作

91 :名前は開発中のものです。:02/09/23 07:56 ID:???
xsi

92 :名前は開発中のものです。:02/09/23 07:58 ID:???
いややっぱしtmd使っとけ

93 :名前は開発中のものです。:02/09/23 08:12 ID:???
いやrokだろう

94 :89:02/09/23 21:13 ID:???
>91>92>93
ありがとうございます、試してみます。
でもみんな>90みたいに自作の独自フォーマット使ってたら(((( ;゜Д゜))))ガクガクブルブル

95 :名前は開発中のものです。:02/09/23 23:07 ID:???
マジレスすると世間では基本的に自作フォーマットだ。がんがれ

96 :名前は開発中のものです。:02/09/28 22:55 ID:???
>>66
個別に違う鍵を渡すなら漏洩元を特定でるるから無意味でもないのでは?

97 :名前は開発中のものです。:03/02/23 02:53 ID:pM6P4J9p
保守あげ

98 :名前は開発中のものです。:03/02/23 03:12 ID:1ggXx80g
            o.
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは見苦しく.  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /    モララーより     /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ・∀・) /                /(・∀・ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)

99 :名前は開発中のものです。:03/02/25 01:43 ID:/DNQkTBe
データは全部変数に代入してコンパイラすればいいんではないか
というのはだめか?

100 :名前は開発中のものです。:03/02/25 07:36 ID:UeuqW1xz
                o.
                /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
               /   このスレは無事に .  /
               /  終了いたしました    /
              / ありがとうございました  /
              /                /
             /   ペイピッニダより     /
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            /
          . /
   __<`∀´>./
  /__ \ /
  | |   |  |
  (_) (__)


101 :名前は開発中のものです。:03/04/05 09:34 ID:6xZbet/l
保守

102 :名前は開発中のものです。:03/04/27 23:39 ID:CROTLl3J
http://yokohama.cool.ne.jp/rr_ri/html/SoftWare/GpcFileMaker.exe

103 :名前は開発中のものです。:03/05/19 00:02 ID:993Tdot1
??

21 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)