- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
//"вирус" в стиле кулхацкеров
#include <stdlib.h>
int main() {
int i = 1;
while( i == 1) {
system("start calc");
}
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−1
//"вирус" в стиле кулхацкеров
#include <stdlib.h>
int main() {
int i = 1;
while( i == 1) {
system("start calc");
}
return 0;
}
guest8 22.04.2019 16:16 # −999
pozhiloy 22.04.2019 16:46 # −1
PACTPOBblu_nemyx 22.04.2019 16:33 # −1
1024-- 22.04.2019 16:45 # +1
P.S. Кобенатор неподвижной программы.
neTyx_npoTKHyTbIu 13.05.2019 03:15 # 0
guest8 22.04.2019 16:54 # −999
cmepmop 22.04.2019 21:18 # 0
i:DWORD;
begin
for I:=0 to MaxInt do
MessageBox(I, nil,nil,0);
end.
Подвешивает систему намертво, она не возвращается даже после завершения программы.
guest8 22.04.2019 21:34 # −999
cmepmop 22.04.2019 21:44 # 0
Тут дело даже не в хэндлах, а в смене владельца окна. Код перебирает хэндлы и вызывает MessageBox для окон всех уровней и типов. Таким образом, диалог становится дочерним окном <randomwindow> и не закрывается, даже после звершения вызвавшего приложения.
guest8 22.04.2019 21:46 # −999
cmepmop 22.04.2019 21:48 # 0
guest8 22.04.2019 21:54 # −999
cmepmop 22.04.2019 21:58 # 0
Возможно, при аварийном завершении проги происходит какой-то сбой в счётчике Z-порядков, если он есть.
guest8 22.04.2019 22:09 # −999
cmepmop 22.04.2019 22:10 # 0
guest8 22.04.2019 23:50 # −999
cmepmop 23.04.2019 21:32 # +1
Я больше скажу: была весьма опасная функция - ScaleWindowEx, способная ронять комп в синьку из-за внутренней ошибки DivisionByZero. Баг воспроизводился путём вызова функции с аргументами MinInt и -1
PACTPOBblu_nemyx 23.04.2019 21:48 # 0
Самое ужасное, что деление происходит в ядре системы.
Исправили в 2013-м году.
guest8 23.04.2019 21:52 # −999
PACTPOBblu_nemyx 23.04.2019 21:56 # 0
guest8 22.04.2019 22:02 # −999
cmepmop 22.04.2019 22:07 # 0
PACTPOBblu_nemyx 22.04.2019 22:31 # 0
OCETuHCKuu_nemyx 22.04.2019 22:33 # 0
PACTPOBblu_nemyx 23.04.2019 01:32 # 0
Можно попробовать дёрнуть через rundll32.exe:
PACTPOBblu_nemyx 23.04.2019 20:44 # 0
Кстати, нафига «Windows» грузит экзешники вместе с досовской частью, которая не нужна?
guest8 23.04.2019 20:48 # −999
PACTPOBblu_nemyx 23.04.2019 20:54 # 0
bormand 23.04.2019 20:55 # 0
PACTPOBblu_nemyx 23.04.2019 21:05 # 0
Оказывается, она в dll первым параметром передаёт указатель на строку, состоящую изо всех своих параметров, начиная со второго. А в остальные параметры функции пихает нули или что-то типа того. Какой багор )))
cmepmop 23.04.2019 21:59 # 0
Знаю, потому, что сам смотрел. Даже не зная с++, уже с первых строк становится ясно, какое это ужасное нагромождение хаков.
guest8 23.04.2019 22:01 # −999
PACTPOBblu_nemyx 24.04.2019 12:11 # 0
где
• 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.
PACTPOBblu_nemyx 24.04.2019 12:29 # +1
В hWnd передалось g_hwndStub –— дескриптор временного окна, открытого rundll32.
В lpText передалось... hInstance. По документации это чёрный ящик, но в текущих реализациях «Windows» это тупо указатель на образ экзешника в памяти, отсюда и «MZ» в окошке.
В lpCaption передаётся строка, собранная из параметров кокококомандной строки.
В uType передаётся nCmdShow.
cmepmop 24.04.2019 13:41 # +1
rundll32 somedll, "MessageBoxA", "int", 0, "str", "майкрософт-говно", "str", "", "int", 0
PACTPOBblu_nemyx 24.04.2019 14:14 # 0
Костыль для костыля.
guest8 23.04.2019 22:01 # −999
bormand 23.04.2019 20:50 # 0
guest8 23.04.2019 20:51 # −999
PACTPOBblu_nemyx 23.04.2019 20:53 # 0
guest8 23.04.2019 20:54 # −999
PACTPOBblu_nemyx 23.04.2019 20:56 # 0
guest8 23.04.2019 20:57 # −999
OCETuHCKuu_nemyx 23.04.2019 20:49 # 0
cmepmop 22.04.2019 22:35 # 0
user32 = ctypes.windll.LoadLibrary('user32.dll') - это обязательно?
обязательно. на loadlibrary стоит счётчик. /fxd
PACTPOBblu_nemyx 22.04.2019 22:36 # 0
Питон –— это же не Delphi и не Си, чтобы можно было напрямую использовать таблицу импорта.
guest8 23.04.2019 00:15 # −999
guest8 22.04.2019 23:50 # −999
guest8 23.04.2019 01:07 # −999
guest8 23.04.2019 01:19 # −999
guest8 23.04.2019 01:40 # −999
guest8 23.04.2019 01:49 # −999
1024-- 23.04.2019 22:35 # 0
Питушанский подход. С расширением сразу понятно, что за файл, достаточно посмотреть метаданные в каталоге.
Без расширения метаданные хранятся с данными, всегда нужно прочитать один кусок файла.
guest8 23.04.2019 22:38 # −999
1024-- 23.04.2019 22:57 # 0
PACTPOBblu_nemyx 25.04.2019 11:42 # +1
cmepmop 25.04.2019 12:04 # 0
neTyx_npoTKHyTbIu 13.05.2019 03:15 # 0
Steve_Brown 25.04.2019 11:22 # 0
PACTPOBblu_nemyx 23.04.2019 11:26 # 0
bormand 23.04.2019 11:49 # 0
guest8 23.04.2019 12:37 # −999
guest8 22.04.2019 21:44 # −999