Няшная / Говнокод #25561 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
//"вирус" в стиле кулхацкеров
#include <stdlib.h>
int main() {
int i = 1;
while( i == 1)  {
	system("start calc");
}
return 0;
}

Запостил: pozhiloy pozhiloy, (Updated )

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

  • шутки за трисита
    ржали всем девятым бэ
    Ответить
    • триста? АБСТРАГИРУЙСЯ ОТ СУЕТЫ ДОСТИГНУВ С КОСМОСОМ ЕДИНСТВА, О КАК! (шутки за 150 ващет)
      Ответить
  • Оптимизировал. Заодно программа кроссплатформенной стала:
    #include <stdlib.h>
    void main(int argc, char** argv) {
        system(*argv);
    }

    P.S. Кобенатор неподвижной программы.
    Ответить
  • var
    i:DWORD;
    begin
    for I:=0 to MaxInt do
    MessageBox(I, nil,nil,0);
    end.

    Подвешивает систему намертво, она не возвращается даже после завершения программы.
    Ответить
    • чото ты пиздиш кмк

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

        Тут дело даже не в хэндлах, а в смене владельца окна. Код перебирает хэндлы и вызывает MessageBox для окон всех уровней и типов. Таким образом, диалог становится дочерним окном <randomwindow> и не закрывается, даже после звершения вызвавшего приложения.
        Ответить
        • я ебанулся чтоли делфи ставить


          или это обычный MessageBox из win32?
          Ответить
              • Окно диалога по умолчанию имеет флаг WS_EX_TOPMOST.
                Возможно, при аварийном завершении проги происходит какой-то сбой в счётчике Z-порядков, если он есть.
                Ответить
                    • а ты знаешь как можно засрать все программы использовав все GDI хендлы?
                      Ответить
                      • Функции GIDP весьма опасны и могут стать причиной утечек памяти. Хлебнул в свое время немало горюшка, когда вручную оскинивал делфийские контролы, вроде ListView.
                        Я больше скажу: была весьма опасная функция - ScaleWindowEx, способная ронять комп в синьку из-за внутренней ошибки DivisionByZero. Баг воспроизводился путём вызова функции с аргументами MinInt и -1
                        Ответить
                        • ScaleWindowExtEx

                          Самое ужасное, что деление происходит в ядре системы.

                          Исправили в 2013-м году.
                          Ответить
                          • Очевидно что в ядре, иначе с чего бы там синева расплескалась?

                            Впрочем, GDI это не совсем ядро. У него там своя пришлепка на уровне executive, но поверх ядра. НЕ помню уже
                            Ответить
            • #include <windows.h>
              #include <limits.h>
              void main()
              {
                HANDLE hwnd;
                for (hwnd=0; hwnd < INT_MAX; ++hwnd)
                MessageBoxA(hwnd, 0,0,0);
              }
              Ответить
              • Перевёл на «Питон»:

                #!/usr/bin/python
                
                import ctypes
                
                user32 = ctypes.windll.LoadLibrary('user32.dll')
                
                for hwnd in range(0, sys.maxsize):
                    user32.MessageBoxA(hwnd, 0, 0, 0)
                Ответить
                  • Я не знаю, есть ли для «PHP» готовое расширение, умеющее дёргать функции из произвольных DLL. Для COM-объектов готовое расширение есть.

                    Можно попробовать дёрнуть через rundll32.exe:
                    <?php
                    
                    for($hwnd = 0; $hwnd <= PHP_INT_MAX; ++$hwnd) {
                        system("rundll32.exe user32.dll,MessageBoxA $hwnd,0,0,0");
                    }
                    Ответить
                    • rundll32.exe user32.dll,MessageBoxA 0,0,0,0 показывает окошко с абракадаброй, начинающейся с букв «MZ». Похоже, что нолик интерпретируется как смещение от начала образа экзешника в памяти.

                      Кстати, нафига «Windows» грузит экзешники вместе с досовской частью, которая не нужна?
                      Ответить
                      • Нолик это указатель на нультерминировную аскишную строку, но мне казалось что первые Н байт во всех осях не имеют записи в таблице страниц ровно чтобы ловить указатели нануль. Или это только в яблах так?

                        Иными словами почему не случился пиздец при разыменовывании ноля?
                        или это вовсе не ноль, а rundll32 как-то иначе его интерпретирует?
                        Ответить
                          • Ты посмотри на сигнатуру функции, которую ожидает rundll...
                            Ответить
                            • Я не могу найти по ней документацию. Вероятно, проще будет её дизассемблировать.

                              Оказывается, она в dll первым параметром передаёт указатель на строку, состоящую изо всех своих параметров, начиная со второго. А в остальные параметры функции пихает нули или что-то типа того. Какой багор )))
                              Ответить
                              • Исходники были в сети совсем недавно. Поищи.
                                Знаю, потому, что сам смотрел. Даже не зная с++, уже с первых строк становится ясно, какое это ужасное нагромождение хаков.
                                Ответить
                                • Я не думаю что оно на плюсах написано, скорее на няшной
                                  Ответить
                                • Нашёл. Вот так rundll32 вызывает функцию:
                                  g_lpfnCommand(g_hwndStub, hInstance, pchCmdLine, nCmdShow)

                                  где
                                  g_lpfnCommand = (RUNDLLPROC)GetProcAddress(g_hModule, lpstrFunctionName);
                                  
                                  g_hwndStub = CreateWindowEx(WS_EX_TOOLWINDOW,
                                                                      g_szAppName, c_szNULL, WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, hInst, NULL);

                                  • hInstance –— дескриптор экземпляра rundll32;
                                  • pchCmdLine –— указатель на разобранную строку, передаваемую rundll32;
                                  • nCmdShow is a flag that says whether the main application window will be minimized, maximized, or shown normally.

                                  Таким образом, с помощью rundll32 нельзя вызвать функцию с произвольным количеством параметров. Она всегда передаёт ровно четыре параметра: дескриптор экземпляра самого rundll32, дескриптор вспомогательного окна («песочницы»), указатель на переданную пользователем строку, флажок минимизации/максимизации окна rundll32.
                                  Ответить
                                  • Теперь попытаемся понять, почему у меня окно вывело Марка Збыковского.

                                    int MessageBox(
                                      HWND    hWnd,
                                      LPCTSTR lpText,
                                      LPCTSTR lpCaption,
                                      UINT    uType
                                    );


                                    В hWnd передалось g_hwndStub –— дескриптор временного окна, открытого rundll32.

                                    В lpText передалось... hInstance. По документации это чёрный ящик, но в текущих реализациях «Windows» это тупо указатель на образ экзешника в памяти, отсюда и «MZ» в окошке.

                                    В lpCaption передаётся строка, собранная из параметров кокококомандной строки.

                                    В uType передаётся nCmdShow.
                                    Ответить
                                    • Этот ланчер годится только для дерганья ограниченного количества функций из системных библиотек, которые писались специально для него и по сути является плохо замаскированным костылем. Универсальное решение (чтобы любую функцию можно было вызвать) придется пейсать самим. Один из вариантов - перед каждым параметром командной строки в кавычках идет его тип:

                                      rundll32 somedll, "MessageBoxA", "int", 0, "str", "майкрософт-говно", "str", "", "int", 0
                                      Ответить
                                      • Я уже понял. Оказывается, в shell32.dll есть несколько функций-переходников, предназначенных для вызова функций из некоторых других DLL:
                                        RUNDLL32 shell32.dll,Control_RunDLL access.cpl,,4

                                        Костыль для костыля.
                                        Ответить
                              • А сигнатуры нету в символах разве?
                                Ответить
                      • Потому что отбрасывать эти 60 байт (или сколько там?) - бесполезная боль на ровном месте. Только мапать сложнее будет.
                        Ответить
                        • зачем мапать если можно фапать?

                          Как звали этого чувака который отлил себя в граните выдумав MZ?
                          Майкл какой-то там, да?
                          Ответить
                        • Сотня байт –— это если ты прикрепляешь заглушку, выводящую «This program cannot run in DOS mode». А ведь можно прикрепить полноценный экзешник на полмегабайта.
                          Ответить
                          • конечно можно. Это будет Fat Binary: он работает и под дос и под windows.
                            Ответить
                • Прикол в том, что дважды либа не грузится, если она уже в памяти. А user 32 грузят множество прог.

                  user32 = ctypes.windll.LoadLibrary('user32.dll') - это обязательно?
                  обязательно. на loadlibrary стоит счётчик. /fxd
                  Ответить
                  • Да, нам нужно получить экземпляр объекта, который умеет дёргать функции из 'user32.dll'.

                    Питон –— это же не Delphi и не Си, чтобы можно было напрямую использовать таблицу импорта.
                    Ответить
                    • на самом деле таболица импорта там есть
                      например
                      "import foo"
                      Ответить
                • шебанг очень важен для виндопроги
                  Ответить
                  • На двойке не важен, а вот тройке нужен. Прыщемудачье не осилило сделать отдельное расширение для тройки.
                    Ответить
                    • и как у тебя шебанг не винде работает? хорошо?

                      юниксоидам срать вообще на расширения
                      Ответить
                      • Сарказм не в тему. На винде с 12 года есть pylauncher, который по шебангу запускает нужную версию. С 12 сука года, притом что тройка хуй знает когда вышла!

                        >юниксоидам срать вообще на расширения
                        И хуле ж вы на винду претесь? Пишите под свои прыщи.
                        Ответить
                        • >И хуле ж вы на винду претесь? Пишите под свои прыщи.
                          я не пер питон на винду, мамаклянусь да
                          Ответить
                      • > юниксоидам срать вообще на расширения
                        Питушанский подход. С расширением сразу понятно, что за файл, достаточно посмотреть метаданные в каталоге.
                        Без расширения метаданные хранятся с данными, всегда нужно прочитать один кусок файла.
                        Ответить
                        • Смотря для чего. Конечно, jpg или txt я хочу видеть сразу.
                          Но для исполняемых файлов это не важно:
                          Я написал программу
                          /bin/pitux
                          Все на нее завязались

                          Я взял, и переписал её на JavaScript, и написал в шебанге #!/bin/node
                          и для клиегнтов ничего не изменилось
                          Ответить
                          • В таких случаях нужны алиасы, регистрация в реестре или файлы ярлыков. Чтоб программа хранилась где-то в своём каталоге в системе/у пользователя/рядом с каталогом с предыдущей версией, а команда шелла/ярлык преобразовывались в вызов нужной питушни.
                            Ответить
                        • Для сравнения: в классической «MacOS» файлы назывались вилками (“forks”). Они состояли из двух частей: из данных (то, что мы называем файлом) и ресурсов (а это метаданные, описывающие, что это за файл). Проблема была в том, что при копировании из эппловской файловой системы в другую ресурсы отклеивались.
                          Ответить
              • Программа-кукушка. Подкладывает свои окна другим программам.
                Ответить
        • Винда не проверяет, из какого приложения была вызвана функция MessageBox? Т. е. не проверяет, владеем ли мы hwnd, и открывает окно, являющееся модальным для чужого приложения?
          Ответить
          • Да в общем-то тебе никто не мешает управлять чужими окнами. Вроде только окна "повышенных" приложений трогать нельзя.
            Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8