Прикалываемся
над explorer'ом
В этой статье я расскажу, как можно
приколоться над компьютером-жертвой. Прикол основан на одном
интересном эффекте замены картинки с флагом Windows
в explorer (или в
Internet Explorer) на свою собственную.
Чтобы проделать этот трюк, надо
открыть редактор реестра и перейти в следующий ключ:
HKEY_CURRENT_USER\Software\
Microsoft\Internet Explorer\Toolbar.
В нем создать два строковых параметра:
BrandBitmap
и SmBrandBitmap
и в качестве значения указать путь к
bmp-файлу.
Но, допустим, времени на выполнение
вышеперечисленных действий у вас нет. Тогда пойдем по пути
прогресса и автоматизируем процесс. Запустите Delphi и создайте
новое консольное приложение.
Добавьте в
раздел uses модули Registry, Windows и Graphics. Первый позволит
работать с реестром, второй нужен для определения папки Windows,
а с помощью третьего можно создать bmp файл и сохранить его в
директорию windows.
Создадим функцию, которая будет
выполнять нужные нам действия.
function Force():boolean;
var
Reg:TRegistry;//объект
для работы с реестром
s:string;
p:TPicture;//будущий рисунок
begin
try
s
:= GetWinDir(); s := s + '\logo.bmp';//вычисляем
путь к папке windows
p
:= TPicture.Create;
p.Bitmap.Width := 800; p.Bitmap.Height := 600;
//установим цвет заливки и контура белым
p.Bitmap.Canvas.Brush.Color := clWhite;
p.Bitmap.Canvas.Pen.Color := clWhite;
p.Bitmap.Canvas.Rectangle(0,0,800,600);
p.SaveToFile(s);//сохраняем
p.Destroy;
Reg := TRegistry.Create;//открываем
реестр
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Internet Explorer\Toolbar',false);
Reg.WriteString('BrandBitmap', s);//записываем
значение
Reg.WriteString('SmBrandBitmap', s);
Reg.CloseKey;
Reg.Destroy;
Result := true;
except
Result := false;
end;
end;
Если все прошло успешно, то функция
вернет true, иначе – false. Теперь напишем функцию, которая
исправляет то, что мы натворили.
function Repair():boolean;
var
Reg:TRegistry;
begin
try
Reg := Tregistry.Create();
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Internet Explorer\Toolbar',false);
if Reg.ValueExists('BrandBitmap') then
Reg.DeleteValue('BrandBitmap');
if Reg.ValueExists('SmBrandBitmap') then
Reg.DeleteValue('SmBrandBitmap');
Reg.CloseKey;
Reg.Destroy;
Result := True;
except
Result := false;
end;
end;
Ну и функция определения
расположения папки windows:
function GetWinDir():String;
var
buffer:string;
len:UINT;
begin
SetLength(buffer, MAX_PATH + 1);
len
:= GetWindowsDirectory(PAnsiChar(buffer),MAX_PATH);
SetLength(buffer, len);
GetWinDir := buffer;
end;
А теперь
основной код:
var
str:string;
b:boolean;
begin
WriteLn('Welcome! This program break the Explorer.');
WriteLn('Select: 1 - Break');
WriteLn(' 2 - Repair');
WriteLn;
Write('Your choise: ');
ReadLn(str);
if
(not ((str='1')or(str='2'))) then
begin
WriteLn('Unknown command. Press Enter to exit');
ReadLn;
Halt;
end
else
begin
if str = '1' then b := Force();
if str = '2' then b := Repair();
if b then WriteLn ('Ok!') else WriteLn ('Error!');
end;
ReadLn;
Вот и все. Запускаете программу,
вводите «1» и нажимаете Enter – значения записываются в реестр.
Запускаете снова и вводите «2» - значения реестра удаляются.
Благодаря тому, что мы не используем визуальный интерфейс и
создает bmp-изображение программно, наше приложение получилось
маленьким и быстрым. К тому же, на белом фоне
нашей картинки гордо красуется флаг Windows,
и непросветленный пользователь подумает, что это глюк самой ОС.
Прогу можно спокойно передавать через Internet или
записать на флешку.
Ну и, наконец, весь код:
program
ieforce;
{$APPTYPE
CONSOLE}
uses
SysUtils,
Registry,
Windows, Graphics;
function GetWinDir():String;
var
buffer:string;
len:UINT;
begin
SetLength(buffer, MAX_PATH + 1);
len
:= GetWindowsDirectory(PAnsiChar(buffer),MAX_PATH);
SetLength(buffer, len);
GetWinDir := buffer;
end;
function Force():boolean;
var
Reg:TRegistry;
s:string;
p:TPicture;
begin
try
s
:= GetWinDir(); s := s + '\logo.bmp';
p
:= TPicture.Create;
p.Bitmap.Width := 800; p.Bitmap.Height := 600;
p.Bitmap.Canvas.Brush.Color := clWhite;
p.Bitmap.Canvas.Pen.Color := clWhite;
p.Bitmap.Canvas.Rectangle(0,0,800,600);
p.SaveToFile(s);
p.Destroy;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Internet Explorer\Toolbar',false);
Reg.WriteString('BrandBitmap', s);
Reg.WriteString('SmBrandBitmap', s);
Reg.CloseKey;
Reg.Destroy;
Result := true;
except
Result := false;
end;
end;
function Repair():boolean;
var
Reg:TRegistry;
begin
try
Reg := Tregistry.Create();
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Internet Explorer\Toolbar',false);
if Reg.ValueExists('BrandBitmap') then
Reg.DeleteValue('BrandBitmap');
if Reg.ValueExists('SmBrandBitmap') then
Reg.DeleteValue('SmBrandBitmap');
Reg.CloseKey;
Reg.Destroy;
Result := True;
except
Result := false;
end;
end;
var
str:string;
b:boolean;
begin
WriteLn('Welcome! This program break the Explorer.');
WriteLn('Select: 1 - Break');
WriteLn(' 2 - Repair');
WriteLn;
Write('Your choise: ');
ReadLn(str);
if
(not ((str='1')or(str='2'))) then
begin
WriteLn('Unknown command. Press Enter to exit');
ReadLn;
Halt;
end
else
begin
if str = '1' then b := Force();
if str = '2' then b := Repair();
if b then WriteLn ('Ok!') else WriteLn ('Error!');
end;
ReadLn;
end.