1. C++ / Говнокод #28187

    0

    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
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    #define _CRT_SECURE_NO_WARNINGS
    #pragma comment(lib, "ntdll.lib")
    
    #include <Windows.h>
    #include <string>
    
    #define FLG_HEAP_ENABLE_TAIL_CHECK 0x10
    #define FLG_HEAP_ENABLE_FREE_CHECK 0x20
    #define FLG_HEAP_VALIDATE_PARAMETERS 0x40
    #define NT_GLOBAL_FLAG_DEBUGGED (FLG_HEAP_ENABLE_TAIL_CHECK | FLG_HEAP_ENABLE_FREE_CHECK | FLG_HEAP_VALIDATE_PARAMETERS)
    
    typedef NTSTATUS(NTAPI* pfnNtSetInformationThread)(
    	_In_ HANDLE	ThreadHandle,
    	_In_ ULONG ThreadInformationClass,
    	_In_ PVOID ThreadInformation,
    	_In_ ULONG ThreadInformationLenght);
    
    const ULONG ThreadHideFromDebugger = 0x11;
    
    typedef NTSTATUS(NTAPI* pfnNtQueryInformationProcess)(
    	_In_ HANDLE	ProcessHandle,
    	_In_ ULONG ProcessInformationClass,
    	_In_ PVOID ProcessInformation,
    	_In_ ULONG ProcessInformationLenght,
    	_Out_opt_ PULONG ReturnLenght);
    
    const UINT ProcessDebugPort = 7;
    
    void HideFromDebugger()
    {
    	HMODULE hNtDll = LoadLibrary("ntdll.dll");
    
    	if (!hNtDll)
    		throw std::exception("can't load kernel");
    
    	pfnNtSetInformationThread NtSetInformatioThread = (pfnNtSetInformationThread)
    		GetProcAddress(hNtDll, "NtSetInformationThread");
    
    	NTSTATUS status = NtSetInformatioThread(GetCurrentThread(), ThreadHideFromDebugger, NULL, NULL);
    }
    
    PVOID GetPEB()
    {
    	return (PVOID)__readfsword(0x0C * sizeof(PVOID));
    }
    
    int main()
    {
    	pfnNtQueryInformationProcess NtQueryInformationProcess = nullptr;
    	NTSTATUS status;
    	DWORD IsDebuggerPresent = 0;
    	HMODULE hNtDll = LoadLibrary("ntdll.dll");
    
    	if (!hNtDll)
    		throw std::exception("can't load kernel");
    	
    	NtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, "NtQueryInformationProcess");
    	void HideFromDebugger();
    
    	while (true)
    	{
    		PVOID pPEB = GetPEB();
    		DWORD offsetNtGlobalFlag = 0x68;
    		DWORD NtGlobalFlag = (DWORD)((PBYTE)pPEB + offsetNtGlobalFlag);
    
    		NTSTATUS stat = NtQueryInformationProcess(GetCurrentProcess(), ProcessDebugPort,
    			&IsDebuggerPresent, sizeof(DWORD), NULL);
    
    		if ((NtGlobalFlag & NT_GLOBAL_FLAG_DEBUGGED) || (stat == 0x00000000 && IsDebuggerPresent != 0))
    		{
    			MessageBox(NULL, "Close your fucking debuger!", "FUCK YOU", MB_OK);
    			return -1;
    		}
    	}
    
    	return 0;
    }

    Запостил: PVOID, 23 Мая 2022

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

    • Где здесь Si××?!
      Ответить
      • > throw std::exception
        Ответить
        • А ты как думаешь, не гомосячество ли кидать исключение не сделав наследника?
          Ответить
          • Не большее, чем пользоваться нестандартной либой, в которой std::exception имеет коструктор, приниающий строку.
            Ответить
            • я тут бегал и срал кирпичом как-то про это, пока мне не пояснили, что это расширения MS
              Ответить
        • Слона-то я и не заметил.
          Ответить
    • HMODULE hNtDll = LoadLibrary("ntdll.dll");

      А ничего, что эта либа всегда в памяти и хэндл неизменен?

      HMODULE hNtDll = LoadLibrary("ntdll.dll");

      if (!hNtDll)
      throw std::exception("can't load kernel");

      Ох, лол...
      Ответить
    • Внимательным пользователям предлагается сосчитать количество повторяемых блоков кода.
      Ответить
      • ненавижу микс из си и си плюс плюс
        или пусть трусы наденут, или крестик снимут

        а ты правда беркли пэкет фильтр?
        Ответить
    • > void HideFromDebugger();
      чзх, вызов с указанием типа?
      Ответить
      • Обычное объявление функции посреди другой функции...
        Ответить
        • так это ж не объявление а хуйня какая-то. Типа вызов.
          А, или это он объявил и не определил? А почему компилируется?
          Ответить
          • это не вызов, конечно, откель бы там void?
            Ответить
          • 1) Эта функция уже определена вше
            2) В С и С++ ты можешь наобъявлять и не определять функций. Пока не пытаешься их вызвать/взять адрес/как-то ещё использовать, это не ошибка.
            Ответить
            • а нахуя оьъявлять функцию внутри скоупа? это как-то влияет на видимость?
              Ответить
            • В С и С++ еще можно наобъявлять функций, а реализовать их на ассемблере.
              Ответить
              • Вроде бы существование функции ебет линкера, а не компилятора.
                Я могу вообще не реализовывать функцию, а в момент линковки подсунуть .a файл с реализацией хоть на Object Pascal (лишь бы колнвеншены совпали)
                Ответить
          • Там нужен void, чтобы результат не передавался в cout::write
            Ответить
            • 1) Где ты cout здесь увидел?
              2) Приедение к void делается (void)pitux. Или, если ты анально правильный — static_cast<void>(pitux)
              Ответить
              • >анально

                мне кажется, что за скорбочковое приведение крестовики бьют с вертушки по ибалу, не?
                Ответить
        • чзх?
          Ответить
    • Кировский районный суд Кропивницкого обязал 19-летнего сторонника "русского мира" выучить наизусть гимн Украины, а также ознакомиться с классикой украинской литературы.

      Согласно приговору суда, 19-летний харьковчанин должен выучить наизусть гимн Украины, IX раздел Конституции о территориальном устройстве, а также песню "Батько наш Бандера, Україна – мати!", стихотворение Сосюры "Любіть Україну". Кроме того, суд требует, чтобы парень прочитал повесть Гоголя "Тарас Бульба" и роман Димарова "І будуть люди".
      Ответить
      • > повесть Гоголя "Тарас Бульба"
        Это та, где протагонист решает быстренько провести спецоперацию в соседней стране под высосаным из пальца предлогом и устроить гуманитарную катастрофу в отдельно взятом городе?
        Ответить

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