本家より:ブート時のバッファオーバフローを利用して、プレステ2でソニーからライセンスを受けていないコードをmodchip等のハードウェア改造なしでも動かす手法が公開された。メモリカードに書き込む手段と正規のプレステ1ゲームさえ1枚もっていれば活用できる。
質問形式でお送りします (スコア:3, おもしろおかしい)
A.不定長のデーターに対して下のようなコードを書くからです。
void func()
{
}
Q.何年も前からわかっていながら、なぜ対処しないのですか。
A.このようなコードを書いてある本が存在するからという説と
わざと入れているという説があります。
Q.信じられません。自分のプログラムに穴をあけるなんて。
A.一部のプログラマーは、これを指摘すると「仕様です」というので
間違いありません。意図的にやっているのです。
Q.彼らの目的は何なのですか。
A.考えてみてください。われわれの周りにどれほどコンピューターがあるか
DVDプレイヤー、カーナビ、携帯電話、自動販売機、パチンコ、ATM
これらを自由に操ってみたいと思いませんか。
実際には、パソコン以外には一般の人にはプログラムを作ることは許されていません。
Q.それはバックドアという犯罪なのではないですか
A.いいえ、問い詰められたら、バグということにします。
Re:質問形式でお送りします (スコア:3, すばらしい洞察)
このQAは表面しか見ていません。BUFSIZEを定義していることが、バッファーオーバーフローに直結するわけではありません。
問題はBUFSIZEを限界チェックをしていなことです。限界チェックをしないのなら、#defineする必要もないはずです。
BUFSIZEという形式だけを見て、その目的まで覚えなかった、学習者のミスです。
Re:質問形式でお送りします (スコア:3, おもしろおかしい)
A.サイズをチェックするのは、みんな気がついている思います。問題はその後です
Q.scanfを使うなとか fgets(buf,BUFSIZE,fp)ですか
A.それほど簡単な問題ではありません。bufに収まらなかった時の処理が必要です。
Q.それはどんなものがありますか
A.
1.切り捨てる
2.さらに大きなバッフアーを確保する
3.ループで順次処理する
1の切り捨てるのは乱暴なようですが、背に腹は代えられません。
2の方法はmallocを使って確保したバッフアーならreallocできます。
3の方法はプログラムがかなり複雑になります。本質ではない部分に多くの力を注がねばなりません。
Q.1はかっこ悪いし2は使えないし3は大変です。ほかに方法はありませんか
A.気づかなかったふりをして、チェックしないという方法をとる人もいます。
Q.最低ですね
A.世渡り上手と言ってください
Re:質問形式でお送りします (スコア:0)
ネタにマジレスするのは、礼儀です。
Q.ではどうしたらいいんでしょう?
A.パフォーマンスが落ちるからという理由で、たまたま知っているルーチンで処理をおこなうのがいけないのです。じっくり読み込んでいけば、バッファーオ
Re:質問形式でお送りします (スコア:0)
A.たとえば最初の例だとbuf[2][BUFSIZE]というようにバッフアーを二つとります。
そして、データを奇数バッフアー、偶数バッフアーの交互に読み取ります。
Q.なぜそんな面倒なことをするのですが
A.BUFSIZEで切断されたデーターの前後をみたいからです。たとえば2バイト文字コードのとか。分断されたキーワードとかです。圧縮されたデーターなどでは11bitとかの半端なビット長がまたがっていることもあります。
Q.文字列処理ばりばりのコンパイラならいざしらず、滅多にないようなデーターに対して、おおがかりすぎませんか。
A.そ
Re:質問形式でお送りします (スコア:1, 参考になる)
たとえば組み込み機器で考えると、携帯PDA端末なんかであれば以下のような攻撃が予想されます
1.ping of deathのような場合
巨大なパケットを意図して送ってきてますから返事を返さなくていいです。
2.mp3プレイヤーなどで曲名に異様に長い曲名が入っている場合。
十分な長さが確保できていれば、曲名が途中で切れていても文句は出ないでしょう。
3.WEBブラウザーでhttpヘッダーがとんでもなく長い場合
捨てたデーターの中に大事なものがあるかもしれません。
プログラムを中断して「このページは表示できません」というエラーを出すべきでしょう。
必死にがんばって何が何でも処理することがよいこととは限らないです。
要は「たとえ死んでも悪の手先にはならない。」ということでは。
Re:質問形式でお送りします (スコア:1)
(´д`;)
Re:質問形式でお送りします (スコア:0)
え?そんな人にCode書かせていいの?
Re:質問形式でお送りします (スコア:1)
まあでも入門書とかもあまり良いのがないような気がするな。
# バッファ長を考慮しない gets() や sprintf() がある
# というのも問題といえば問題かな?
(´д`;)
Re:質問形式でお送りします (スコア:0)
素直にポインタだけにしておけば自分で管理しなきゃならんって気がつくだろうに、あんな配列なんてBASICだのCOBOLだのから流れてきたやつはみんなしくじるよ。
Re:質問形式でお送りします (スコア:1)
#次はギガ単位でmallocしてNULL検査しない奴が増えそう。。。
wild wild computing
Re:質問形式でお送りします (スコア:0)
世の中のホールの半分くらいは、無知が原因なのではなくて
うっかりミスが原因でしょう。
自動的に strict な境界チェックするようなライブラリを
用意しない限り、この手の穴は防げません。
Re:質問形式でお送りします (スコア:0)
Re:質問形式でお送りします (スコア:0)
それはとらえ方が違うんじゃないか?
char buf[1024]
と
#define BUFSIZE 1024
char buf[BUFSIZE]
では大きく違うぞ。
前者は仕様変更があった場合に穴になりやすかろう。
(まさか違いがわからんとか言わないだろうな)
気安く動的確保すんな(喝 (スコア:1)
もともとメモリが少ない上に仮想メモリが存在しないんで、
ちょっとしたフラグメンテーションがすぐ動作不安定につながる。
こんな環境では、ヒープをスタック気味に使っていけるような
設計にせなあかん。
確保したメモリをいつでも再配置できるような設計にしてもいい
けど、こんなバイオレンスな設計が必要なほどデンジャラスな
仕事はハナから手をつけずに蹴り返すが吉。
大抵のゲームはリアルタイム性が要求されますからねぇ。
しかも、マルチプロセスの上にバックグラウンドでDMAが飛び交って
いるような最近の環境でそれやらかすのは自殺行為。
# ACなのでAC
Re:質問形式でお送りします (スコア:1)
BASIC とか。(Subject out of range エラーだったっけ?)
Re:質問形式でお送りします (スコア:0)
Re:質問形式でお送りします (スコア:0)
A.コンシューマーゲーム機はCPU速度、メモリ容量ともに非常に制限されており
エラーチェックルーチンなんぞ、入れる余裕がないからです。
ゲームの場合、ユーザー入力などほとんど無く、必要性も認められません。
#今回は起動時のBI
Re:質問形式でお送りします (スコア:1, 参考になる)
A.認めるわけではないのですが、気持ちはわかります。
たとえば近年発見されたBufferOverflowの例としては
zlib
libpng
Apple QuickTime ActiveX v5.0.2
Apple Quicktime/Darwin MP3 Broadcaster
IE4.0
など、本来は絵や音を取り扱うプログラムがあります。
これらのソフトにとってはバッフアーオーバーを起こした文字列処理の部分はまったく本質でないわけです。
そもそもBufferOverrunという報告書のもとになった事件はフィンランドのOUSPGグループが
Outlook ExpressとNetscape Messengerで長いファイル名のファイルを添付するというものでした。
手を抜いてはいけないのですが、手を抜きたくなる気持ちはわかります。
Q.でもSendMailなんかは、テキストを扱うプログラムですが、ひどいものですよ。
A.SendMailの歴史はセキュリティの歴史といっても過言ではないでしょう。BufferOverflowなんてSendMailには小さなことです。
でも、彼らを攻めないでください。必要以上に複雑になったあのプログラムをメンテし続けているというだけで私は頭が下がります。
ワザとやった覚えがあるなぁ (スコア:0)
CPUが6811って言えば解る人には解る目的か?
でも、マジでヤバイんでAC
Re:質問形式でお送りします (スコア:0)
いや、実際にこういうコード書くヤツがいたりするから、マジで疑問なんだけど。
# 元ネタACさんを煽るつもりはない。
Re:質問形式でお送りします (スコア:0)
A.stdio.hぐらい読みましょう。
#include <stdio.h>はおまじないではありません。
SCOが儲けてしまうのか! (スコア:2, おもしろおかしい)
PS2が$699も値上がり [srad.jp]しちゃうじゃないか :-P
_.. ._._._ _... ._._._ ._. ._._._
物は試しだ。コメントのしきい値を2にしてごらん
Re:SCOが儲けてしまうのか! (スコア:1)
マラソンで二位を抜いたら何位?
Re:SCOが儲けてしまうのか! (スコア:2, 興味深い)
#ネタにマジレス?
Re:SCOが儲けてしまうのか! (スコア:1)
#つー事で上は忘れてやって下さい
Re:SCOが儲けてしまうのか! (スコア:0)
Re:SCOが儲けてしまうのか! (スコア:1)
HDDもいらない。
「PS2独立記念日」 (スコア:1, 興味深い)
ソニーよる承認 (スコア:0)
Re:ソニーよる承認 (スコア:0)
Re:ソニーよる承認 (スコア:0)
Re:ソニーよる承認 (オフトピック) (スコア:1)
Re:ソニーよる承認 (オフトピック) (スコア:0)
XBOXと同じ? (スコア:0)
探せば他のゲーム機もこれと同じ方法でプロテクトを
MODチップ無しでクリアできるんじゃない?
Re:XBOXと同じ? (スコア:3, 参考になる)
# ↑ちなみにたれこんでも却下でした
GBAとかDCのように手軽な方法論が用意されたゲーム機は少ないようで。
NEOGEOは (スコア:1)
開発環境がアセンブラだったこともあり、メモリカードへの
読み書きはデータ長決め打ちで行っていました。
※あと、メモリカードへの実行可能なデータの保存と
ワークエリア(RAM)上でのプログラムの実行禁止の
規約もあったような…たしかこの辺を違反すると、
SNKのダメが出たはず。
ゲーム機のセーブデータなら、データは
固定長として、最大のサイズでもスタック領域に
踏み込まないようにするのが簡単だと思うんですが、
最近のゲームはそれではいけないんでしょうか。
Re:XBOXと同じ? (スコア:0)
PS2バッファオーバーフローの活用についての質問 (スコア:0, 荒らし)
Re:無理かと (スコア:0)
初期のゲームなら動くかも知れませんが後のほうは無理じゃないですかね。
プロテクトがどう発展してきたかを考えればお分かりでは?
始めはブートのみクリヤーすればよかったので本物で起動してから
タイトルが出たところでニセモノと交換すると動いた。
※サターンリングとか、黄金軸ってやつですね。
この程度ならクラックすれ恐らく動くかもしれませんが
実際はディスク共に専用の書く必要があるかもしれません。
以後のものは適度にディスクのプロテクト部分をチェックするので
ダメだと思います。
#君、シーガルで中古買った方が面倒なくていいよ。
うーんと元リン
Re:無理かと (スコア:1)
現在は復活しているようです。
Re:無理かと (スコア:0, おもしろおかしい)
元のレスポンスにタイトルで結論を言ったまで、
本文読まなくても書いてある内容がわかるだろ
時間のない人や読みたくない人ならタイトル見て止めれば効率的
2ちゃんとかダラダラ時間を浪費するところに入るからタイトルに無頓着になるのだよ
タイトルは適切に分かりやすくね。
そんなこと書くと (スコア:2, 参考になる)
さんざんいいつくされたネタですが、
そんなこと書いちゃうと荒れるかも。
re [goo.ne.jp] で辞書ひいてください。(罠 [goo.ne.jp])
Kiyotan
Re:そんなこと書くと (スコア:1)
#確かに goo の辞書でわかるのは re は
#ラテン語由来の言葉だってだけなんだけどさ。
と思って一応某英々辞典で re をひいてみました。
語源のところに
Ablative of L. res thing, affair. (但し、 e の上には横棒)
って書いてあります。
そんなわけでそんなに嘘言ってないと思います。
Kiyotan
メモリカード (スコア:0)
#単にメモリーカードといえば1Mbitの奴を指すものだと思うのでAC
Re:メモリカード (スコア:1)
Re:メモリカード (スコア:1)
ざっと読んでは、いないな。嘘付き。<ヲイ
BIDATA-SYSTEMって言うのはPS2の設定ファイルの事なんですよ。
黒いメモカの形してる奴。
あとは、上の手順やって
メモリジャグラーとか使って書き込めばいいんだけど。
コンバーター作らないと・・。うむ。
http://homepage2.nifty.com/tsg/ps2mcsm/index.html
PS2-BASICスタジオを久しぶりに起動したのは秘密だ。
Re:メモリカード (スコア:1)
まあ「ファイル」と言ってる時点でPS2だわなあ。
Re:メモリカード (スコア:1)
てっきりPCのBIOSみたいに本体のCMOSに保存されているのかと…。
でもさ、PS2ってメモリカード別売りでしょう? それにPS1のゲームはPS2のメモリカードにセーブできないでしょう?
よくわからんままだけど、これ以上質問を繰り返すと恥の上塗りになりそうだな…。
Re:メモリカード (スコア:0)