.

 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
WebMoney ぷちカンパ

PSP-3000脆弱性Part2?! 

GripShift という米国のゲームでセーブデータにバグが発見されたそうです。

こちらのフォーラムにソースコードとHelooWorldのプログラム、Q&Aがあったので簡単に解説します。

~バグについて~
このバグはまたまた「GripShift」というソフトのセーブデータに独自のセーブデータを埋め込んで起動させ、読み込ませたところ自分のプログラムが起動したとのこと。


~下準備~
・GripShift・・・バグ対策されていないUMD
・PSP
埋め込んだセーブデータ


~利用方法~
①まず埋め込んだセーブデータをダウンロードし、
ms0:/PSP/SEVEDATA/に保存します。
②GripShiftを起動させます。
③セーブデータをロードすれば、完了。


~応用~
・ソースコードが公開されているので、以下の部分を改変することにより、任意のプログラムを起動させることが出来ます。(⇒ソース


void _start(unsigned long arglen, unsigned long *argp) {
sceKernelDcacheWritebackAll();
int a=0,sway=0;

InitGlobals();

initScreenAndCtrl();

fadeIn();
fadeOut();

Print (22,15,colours[INDEX_GREEN]," - Hello World! -");
changeBuffer();
Sleep(1000);
changeBuffer();

fadeIn();
fadeOut();

for (i = 0; i<100; i++) {
snowflake[i].x = rand()%480;
snowflake[i].y = rand()%272;
snowflake[i].flake = rand()%3;
}

for(;;)
{
gpaddata.Buttons = 0;

sceCtrlReadBufferPositive(&gpaddata,1);

ProcessKeys(gpaddata.Buttons);

Fillvram(colours[INDEX_BLACK]);

for (a = 0;a<100;a++) {
sway = rand()%4;
if (sway == 1 || sway == 2) {
snowflake[a].x -= 1;
}
if (sway == 3 || sway == 4) {
snowflake[a].x += 1;
}
snowflake[a].y += rand()%4;
if (snowflake[a].y > 272) {
snowflake[a].y = 0;
snowflake[a].x = rand()%480;
}
if(snowflake[a].flake==0) {
drawPixel(snowflake[a].x,snowflake[a].y,1,1,colours[color]);
}
if(snowflake[a].flake==1) {
drawPixel(snowflake[a].x,snowflake[a].y,2,2,colours[color]);
}
if(snowflake[a].flake==2) {
drawPixel(snowflake[a].x,snowflake[a].y,3,3,colours[color]);
}
}

drawPixel(0,247,480,272,colours[INDEX_DARKGREEN]); // ground
Print (0,0,colours[INDEX_WHITE],"Hello World for PSP firmwares 1.52-5.02");
Print (0,1,colours[INDEX_WHITE],"This... is... SPARTAAAAAAAAAAAAAAAAAAAAAA!!!");
Print (0,2,colours[INDEX_WHITE],"Exploit by MaTiAz");
Print (0,3,colours[INDEX_WHITE],"SDK by FreePlay");
Print (0,4,colours[INDEX_WHITE],"Greets and thanks to everyone who deserves it.");
Print (0,5,colours[INDEX_WHITE],"You know who you are ;)");

changeBuffer();
//Sleep(40);
}
}


問題点
ユーザーモードで起動しているので、カーネルモードの機能は利用出来ません。
また、sceKernelLoadExecという関数を利用して、3.XXカーネルでFlash0~3の読み込み・書き込みが出来るFilerを起動させるにも、カーネルモードでないので、制限かかってしまうので、いまのところオリジナルのプログラムを読ませるくらいのようです。
Filerのソースコードがあれば、埋め込むことでCFWの導入も出来るかもしれません。
*但し、前回紹介した記事(⇒こちら)にもありましたが、PSP-2000とPSP-3000では出力方法が違うので、書き換えると画面が表示されなくなると思います。


~最後に~
YouTubeにてセーブデータ実行映像があったので、載せておきます。
WebMoney ぷちカンパ

この記事へのコメント

コメントをお寄せ下さい

 必須
 必須
 必須
       
 必須
(コメント編集・削除に必要)
(管理者にだけ表示を許可する)

トラックバック

この記事のトラックバックURL
http://psp0kaizou.blog36.fc2.com/tb.php/537-9421f29a

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。