まさかの星さんにコメントを頂いて、コミュニティに書き込んでなくて全くフィードバックしておらず使えない奴ですいませんすいませんと思いつつ返信を書いていたんですが、やっぱ具体的な事書いたほうがマトモっぽい奴に見えるかなーと思って、だけどあれはまだ試してないんだよなー試してない事を書くのは良くないよなーと思ってやってみた。
ってことで、今日は、コミュニティでちょっと話題に上がってたなんちゃって暗号化をやってみました。

まず、ruby.pngという画像があるとします。
これに、先頭に5byte分ゴミをくっつけて、普通じゃ開けないようにします。
ちなみに、色々ゴミのくっつけ方をやってみたんですが、後ろにゴミをくっつけても普通に見れました。調べてみたんですが、先頭は画像を識別するコードみたいなのが埋め込まれていて、これを騙せば手っ取り早いという結論です。
Emacsでバイナリファイルを見れるところまでいったんですが、数値の書き換えしかできなくてずらしたり出来なかったので(マニュアル見たんですけどダメっぽくて…)、Rubyでプログラム書きました。

file = File.open("ruby.png","r")
f = file.read

file2 = File.open("ruby2.png","w")
file2.write "aiueo"+f

puts "finish"

こんな感じで、5byte分くっつけます。
次は戻すやつ。

f = File.new("ruby2.png","r")
f.seek(5,IO::SEEK_SET)
file = f.read

f2 = File.new("ruby3.png", "w")
f2.puts(file)

puts "finish"

5byte分シークして読み込ませると、ちゃんと元に戻せます。

で、この元に戻すプログラムを利用して、テクスチャを読み込んでみます。

filename = "ruby2.png"#ゴミがついてるやつ
File.open(filename,"r") {|file|
file.seek(5,IO::SEEK_SET)
texture = Texture.load(file)
}


僕の場合はこれで出来ました。ただ、Windowsは、こんな普通に読み書き出来たっけ…って感じです。何か用意されてるんじゃなかったっけ。忘れた。

結果としては、結構良さげです。
まぁ、上で言ったように、pngは始めの8byteは決まっているのでバイナリエディタで開けば細工してるのバレバレですけどね。
とは言え、細工する場所を変えたりしても、そもそもソース覗ける人が見たら一発なんですが、僕としては普通に画像が見えてなければ問題無いので。

あ、あと、Texture.loadにはファイルのバイトの長さが渡せるようになってるので、色々なファイルをくっつけといて、簡単にバラすみたいな事も出来るらしいです。
ただまぁ、pngだけだったら、最初にヘッダみたいなのがあるらしいので、これ使って分解した方が綺麗に書けるんじゃね?とか思いました。
今作ってるのはラッパーライブラリなので、そういう意味で考えると、バイトのサイズを手書きで記述するのはちょっと頂けないかなぁ。Todoに入れとこう。まぁダメだったらそれで。
(うーん、でも画像以外も全部一緒に固めときたいと思ってしまうかな、実際ゲーム作ってみると。)
2008.11.21 Fri l Star Ruby l COM(0) TB(0) l top ▲

コメント

コメントの投稿












       

トラックバック

トラックバックURL
→http://kazekyou.blog61.fc2.com/tb.php/197-afbe94b0
この記事にトラックバックする(FC2ブログユーザー)