「強制終了して下さい」が無限ループで現れるプログラム作ったら逮捕されるらしい。
無限ループ作って逮捕されるって!
中学生が無限ループ作って補導されたっぽいです。
非行内容は昨年8月5日ごろ、パソコンのソフトを立ち上げると「強制終了してください」と書かれた画面が連続して現れ、画面上で操作ができなくなるウイルスをパソコンで作ったというもの。
http://www.asahi.com/national/update/0704/OSK201207040085.html
非行内容は12歳だった昨年8月5日ごろ、感染するとパソコンを強制終了させる通称「ブラウザクラッシャー」というウイルスを、自宅のパソコンで作成したとされる。少年は「インターネットで情報を集めてウイルスを作った」と認めているという。
府警によると、このウイルスに感染すると、パソコンの画面に「強制終了してください」と表示され、強制終了以外の操作ができなくなる。ただ、実害は確認されていない。
http://mainichi.jp/select/news/20120705k0000m040073000c.html
どういうプログラム?。
- 強制終了して下さいという画面が連続で現れる
- 強制終了ボタンを押す以外に操作不能になるらしい。
- しかもブラウザを起動したら起動する。
もしかして、無限ダイアログ表示.exeでiexplorer.exeを上書きしたってこと?
作ってみた。
強制終了して下さい、(」・ω・)」うー!(/・ω・)/にゃー
画面に「強制終了してください」が無限に発生し、パソコンが動くなるプログラム作りました。(」・ω・)」うー!(/・ω・)/にゃーが無限に画面に出てきます。さて、これでWindowsは操作不能になるのか?
もちろん、Windowsは死なない。。。
タスクマネージャーでちゃんとKILL出来る。最近のWindowsはこれくらいで操作不能になるわけない。よね?
CTRL+SHIFT+ESCでタスクマネージャー起動してプロセス落とせば綺麗に消えて行く。Windowsカッコイイ。
コンパイル
takuya@win-air:~/desktop$ i686-w64-mingw32-gcc -mwindows windows.c
ソースコード
どっかのソースコードの寄せ集め。イベント待ちはなしで、createWindowを無限呼び出し。
#include <windows.h> #include <tchar.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); /* エントリポイント */ int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { HWND hWnd; WNDCLASSEX wc; MSG msg; BOOL bRet; /* ウィンドウクラスの定義 */ wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hCurInst; wc.hIcon = (HICON)LoadImage( NULL, IDI_APPLICATION, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, IDC_ARROW, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = _T("SampleClass"); wc.hIconSm = (HICON)LoadImage( NULL, IDI_APPLICATION, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); /* ウィンドウクラスの登録 */ if(RegisterClassEx(&wc) == 0) return FALSE; //画面サイズ取得 RECT rec; HWND hDeskWnd = GetDesktopWindow(); GetWindowRect( hDeskWnd, &rec ); //乱数 SYSTEMTIME st; srand((unsigned)st.wMilliseconds); /* ウィンドウの作成 */ int i,j; i=0; j=0; int cnt=0; while(cnt++<20000){ i=rand()%rec.right; j=rand()%rec.bottom; hWnd = CreateWindow( wc.lpszClassName, _T("逮捕だ"), WS_OVERLAPPEDWINDOW, i, j, 240, 80, NULL, NULL, hCurInst, NULL); /* ウィンドウの表示 */ ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); /* メッセージループ */ //while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { //if (bRet == -1) //break; //else { //TranslateMessage(&msg); //DispatchMessage(&msg); //} //} } sleep(10); return (int)msg.wParam; } /* ウィンドウプロシージャ */ LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: ShowMyText(hWnd); break; default: return DefWindowProc(hWnd, msg, wp, lp); } return 0; } void ShowMyText(HWND hWnd) { HDC hdc; PAINTSTRUCT paint; char *str = "(」・ω・)」うー!にゃー"; hdc = BeginPaint(hWnd, &paint); TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str)); EndPaint(hWnd, &paint); return; }
感想とか
ニュースを確認する限り、即強制終了でもない。し、セーフモードでリカバリもできるし。データを壊すわけでも、どこかのサーバーにアタックするわけでもないし。なんでこれで事件なんだ。。。
強制終了するプログラミングはWindowsXPの時に脆弱性として修正されてた気がする、不可能じゃなかったっけ。使用者の意図した動作と違うという話でもWindowsの設計者の意図通りには動いてるわけで。ボタンを押すという、使用者の意図を汲んで強制終了するわけだし。それが嫌ならタスクマネージャーで殺せばいいし。ログオフして、システム復元したら元通りなわけでしょ?不正指令電磁的記録にあたるのこれ?
ニュース読む限り全く理解できない。
どういうプログラムだったか公開してほしいものです。模倣犯の防止の為にプログラムが非公開されてる?。その意図は理解できる。けどさ、中学生の作ったプログラムが本当に凶悪だったかなんてわかりゃしないし、マスコミが晒しあげるほどのプログラミングだったんだろうか。
プログラミングするの怖いね。
警察の恣意的解釈で個人の人生を狂わせることが可能になってとても怖い時代です。