Главная » Файлы » Материалы обучающихся "Радуга талантов" » Информатика

Практический проект "Глазами хакера" (пакет программ)
16.10.2013, 16:01
Оглавление

Введение 2
Основная часть. «Глазами хакера» - пакет системных утилит 3
Хакерские часики 3
Частота процессора 8
Извлечение флешнакопителя 11
Узнать IP-адрес 15
Антивирусная программа «Восстановление после Autorun» 19
Заключение 25


Введение
В мире полно вопросов, на которые большинство людей не знают правильного ответа. Мало того, люди используют множество слов, даже не догадываясь об их настоящем значении. Например, многие сильно заблуждаются в понимании термина "хакер". Однако каждый вправе считать свое мнение наиболее правильным. И я не буду утверждать, что именно мое мнение единственно верное, но оно отталкивается от действительно корректного и правильного понятия.
Прежде чем начать обсуждать то, что известно всем, я должен уйти в историю и вспомнить, как все начиналось. А начиналось все еще тогда, когда не было даже международной сети Интернет.
Понятие "хакер" зародилось, когда только начинала распространяться первая сеть ARPAnet. Тогда это понятие обозначало человека, хорошо разбирающегося в компьютерах. Некоторые даже подразумевали под хакером человека, помешанного на компьютерах. Понятие ассоциировали со свободным компьютерщиком, человеком, стремящимся к свободе во всем, что касалось его любимой "игрушки". Именно благодаря этому стремлению и стремлению к свободному обмену информацией и началось такое бурное развитие всемирной сети. Именно хакеры помогли развитию Интернет и создали FIDO. Благодаря им появились бесплатные UNIX-подобные системы с открытым исходным кодом, на которых сейчас работает большое количество серверов.
В те времена еще не было вирусов, и не внедрилась практика взломов сетей или отдельных компьютеров. Образ хакера-взломщика появился немного позже. Но это только образ. Настоящие хакеры никогда не имели никакого отношения к взломам, а если хакер направлял свои действия на разрушение, то это резко не приветствовалось виртуальным сообществом.
Настоящий хакер — это творец, а не разрушитель. Все, кто приписывает этим людям вандализм, сильно ошибаются. Истинные хакеры никогда не используют свои знания во вред другим.
Из всего вышесказанного родилась идея нашего проекта – изучать компьютер и язык программирования Delphi глазами хакера
Наша главная цель: создать пакет программ в среде Delphi для управления персональным компьютером.
Для достижения поставленной цели необходимо решить задачи:
1. изучить книги программиста Михаила Фленова, посвященные программированию на Delphi;
2. изучить нестандартные приемы программирования и недокументированные функции и возможности языка Delphi;
3. разработать пакет утилит «Глазами хакера»
Основная часть. «Глазами хакера» - пакет системных утилит

Любой хакер должен уметь программировать на каком-нибудь языке программирования. Некоторые заведомо считают, что если человек хакер, то он должен знать и уметь программировать на языке ассемблера. Это не так. Знание ассемблера желательно, но не обязательно. Это не так! Начинать лучше с Delphi. Он достаточно прост, быстр, эффективен, а главное, это очень мощный язык.
Хакерские часики
«Хакерские часики» представляет собой необычную реализацию электронных часов. Наши часы показывают время в двоичной и шестнадцатеричной системах счисления.

Реализация утилиты «Хакерские часики»

Описание программы:
1. Форма
На форме размещены следующие объекты:
1. Popup Menu
2. Color Dialog
3. Timer
4. четыре объекта Label

Форма программы «Хакерские часы»
2. Листинг программы
unit HClck;
interface
uses
Windows, Messages, Controls, SysUtils, Classes, Graphics, Forms,
ExtCtrls, StdCtrls, Menus, IniFiles, Dialogs;
type
TMode = (tmBin,tmHex);
THClockFrm = class(TForm)
HLbl: TLabel;
Timer: TTimer;
PopupMenu: TPopupMenu;
ModeMnu: TMenuItem;
CloseMnu: TMenuItem;
BinMnu: TMenuItem;
HexMnu: TMenuItem;
ColorsMnu: TMenuItem;
BCMnu: TMenuItem;
TCMnu: TMenuItem;
ColorDialog: TColorDialog;
MLbl: TLabel;
SLbl: TLabel;
CopyrightMnu: TMenuItem;
N1: TMenuItem;
procedure TimerTimer(Sender: TObject);
procedure HLblMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CloseMnuClick(Sender: TObject);
procedure BinMnuClick(Sender: TObject);
procedure HexMnuClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BCMnuClick(Sender: TObject);
procedure TCMnuClick(Sender: TObject);
private
Mode: TMode;
OldH,OldM: Word;
Transformed: Boolean;
procedure Transform;
public
{ Public declarations }
end;
var
HClockFrm: THClockFrm;
implementation
{$R *.DFM}
procedure THClockFrm.TimerTimer(Sender: TObject);
var
H,M,S,Ms:Word;
function IntToBin(Value: Longint; Digits: Integer): string;
begin
Result := '';
if Digits > 32 then Digits := 32;
while Digits > 0 do begin
Dec(Digits);
Result := Result + IntToStr((Value shr Digits) and 1);
end;
end;
begin
DecodeTime(Time,H,M,S,Ms);
if Mode = tmBin then
begin
if (OldH <> H) or Transformed then Hlbl.Caption := IntToBin(H,5);
if (OldM <> M) or Transformed then MLbl.Caption := IntToBin(M,6);
SLbl.Caption := IntToBin(S,6);
end else
begin
if (OldH <> H) or Transformed then Hlbl.Caption := IntToHex(H,2);
if (OldM <> M) or Transformed then MLbl.Caption := IntToHex(M,2);
SLbl.Caption := IntToHex(S,2);
end;
Transformed := False;
OldH := H; OldM := M;
end;
procedure THClockFrm.HLblMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
end;
procedure THClockFrm.CloseMnuClick(Sender: TObject);
begin
Close;
end;
procedure THClockFrm.BinMnuClick(Sender: TObject);
begin
Mode := tmBin;
BinMnu.Checked := True;
HexMnu.Checked := False;
Transform;
end;
procedure THClockFrm.HexMnuClick(Sender: TObject);
begin
Mode := tmHex;
BinMnu.Checked := False;
HexMnu.Checked := True;
Transform;
end;
procedure THClockFrm.FormCreate(Sender: TObject);
var
IniFile: TIniFile;
begin
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle,
GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);
OldH := High(Word); OldM := High(Word);
IniFile := TIniFile.Create('HClock.ini');
HClockFrm.Top := IniFile.ReadInteger('POSITION','TOP',HClockFrm.Top);
HClockFrm.Left := IniFile.ReadInteger('POSITION','LEFT',HClockFrm.Left);
Mode := TMode(IniFile.ReadInteger('MODE','MODE',Integer(tmBin)));
HClockFrm.Color := TColor(IniFile.ReadInteger('COLOR',
'BACKGROUND',Integer(clBlack)));
HLbl.Font.Color := TColor(IniFile.ReadInteger('COLOR',
'TEXT',Integer(clGray)));
IniFile.Free;
MLbl.Font.Color := HLbl.Font.Color;
SLbl.Font.Color := HLbl.Font.Color;
case Mode of
tmBin: BinMnu.Checked := True;
tmHex: BinMnu.Checked := False;
end;
HexMnu.Checked := not BinMnu.Checked;
Transform;
end;
procedure THClockFrm.FormClose(Sender: TObject; var Action: TCloseAction);
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create('HClock.ini');
IniFile.WriteInteger('POSITION','TOP',HClockFrm.Top);
IniFile.WriteInteger('POSITION','LEFT',HClockFrm.Left);
IniFile.WriteInteger('MODE','MODE',Integer(Mode));
IniFile.WriteInteger('COLOR','BACKGROUND',Integer(HClockFrm.Color));
IniFile.WriteInteger('COLOR','TEXT',Integer(HLbl.Font.Color));
IniFile.Free;
end;
procedure THClockFrm.BCMnuClick(Sender: TObject);
begin
ColorDialog.Color := HClockFrm.Color;
if ColorDialog.Execute then HClockFrm.Color := ColorDialog.Color;
end;
procedure THClockFrm.TCMnuClick(Sender: TObject);
begin
ColorDialog.Color := HLbl.Font.Color;
if ColorDialog.Execute then
begin
HLbl.Font.Color := ColorDialog.Color;
MLbl.Font.Color := HLbl.Font.Color;
SLbl.Font.Color := HLbl.Font.Color;
end;
end;
procedure THClockFrm.Transform;
begin
if Mode = tmBin then
begin
HLbl.Width := 60;
MLbl.Width := 72;
SLbl.Width := 72;
MLbl.Left := 76;
SLbl.Left := 164;
HClockFrm.Width := 236;
end else
begin
HLbl.Width := 26;
MLbl.Width := 26;
SLbl.Width := 26;
MLbl.Left := 40;
SLbl.Left := 80;
HClockFrm.Width := 109;
end;
Transformed := True;
TimerTimer(nil);
end;
end.

Частота процессора
Эта программа посвящена сердцу компьютера — процессору. Как быстро он работает? Сильно ли его загружает то или иное приложение? На эти вопросы можно ответить самим, написав программу, тестирующую работу процессора. После запуска приложения появляется диалоговое окно с сообщением о текущей частоте процессора.

Реализация утилиты «Частота процессора»

Описание программы
Листинг программы
program Project1;
{$R *.res}
uses Windows;
Var s:string;
function GetCPUSpeed: real;

function IsCPUID_Available: Boolean; assembler; register;
asm
PUSHFD
POP EAX
MOV EDX,EAX
XOR EAX,$200000
PUSH EAX
POPFD
PUSHFD
POP EAX
XOR EAX,EDX
JZ @exit
MOV AL,True
@exit:
end;
function hasTSC: Boolean;
var
Features: Longword;
begin
asm
MOV Features,0 { Features = 0 }
PUSH EBX
XOR EAX,EAX
DW $A20F
POP EBX
CMP EAX,$01
JL @Fail
XOR EAX,EAX
MOV EAX,$01
PUSH EBX
DW $A20F
MOV Features,EDX
POP EBX
@Fail:
end;
hasTSC := (Features and $10) <> 0;
end;
const
DELAY = 500;
var
TimerHi, TimerLo: Integer;
PriorityClass, Priority: Integer;
begin
Result := 0;
if not (IsCPUID_Available and hasTSC) then Exit;
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,
THREAD_PRIORITY_TIME_CRITICAL);
SleepEx(10, FALSE);
asm
DB $0F
DB $31
MOV TimerLo,EAX
MOV TimerHi,EDX
end;
SleepEx(DELAY, FALSE);
asm
DB $0F
DB $31
SUB EAX,TimerLo
SBB EDX,TimerHi
MOV TimerLo,EAX
MOV TimerHi,EDX
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000 * DELAY);
end;
begin
Str(GetCPUSpeed:7:1,s);
MessageBox(0,Pchar(s+' MZ'),’Частота процессора’,0);
end.

Тестирование программы:
Запуск приложения показал: частота тестируемого процессора – 2394,0 мегаГерц, что составляет 2,3гигаГерц
Сравниваем данные приложения с параметрами Системы (Пуск/ Панель управления/ Система): Процессор - 2,4 гигаГерц.
Можно сделать вывод, что наша программа дает более точную информацию о работе процессора

Извлечение флешнакопителя
«Извлечение флешнакопителя» - небольшая программа, с помощью которой быстро и безопасно отключается флешнакопитель перед извлечением.

Реализация программы «Извлечение флешки»
Описание программы
1. Форма программы
Интерфейс программы представляет собой форму с двумя кнопками


Форма программы «Извлечение флешки»
2. Листинг программы
unit USBStateChange;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm6 = class(TForm)
btnEnable: TButton;
btnDisable: TButton;
procedure btnEnableClick(Sender: TObject);
procedure btnDisableClick(Sender: TObject);
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
type
PSP_CLASSINSTALL_HEADER = ^SP_CLASSINSTALL_HEADER;
SP_CLASSINSTALL_HEADER = record
cbSize: DWORD;
InstallFunction: Cardinal;
end;
PSP_PROPCHANGE_PARAMS = ^SP_PROPCHANGE_PARAMS;
SP_PROPCHANGE_PARAMS = record
ClassInstallHeader: SP_CLASSINSTALL_HEADER;
StateChange: DWORD;
Scope: DWORD;
HwProfile: DWORD;
end;
PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
SP_DEVINFO_DATA = record
cbSize: DWORD;
ClassGuid: TGUID;
DevInst: DWORD;
Reserved: Longint;
end;
function SetupDiGetClassDevs(const ClassGuid: PGUID; Enumerator: PChar;
hwndParent: HWND; Flags: DWORD): DWORD; stdcall;
external 'Setupapi.dll' name 'SetupDiGetClassDevsA';
function SetupDiDestroyDeviceInfoList(DeviceInfoSet: DWORD): BOOL; tdcall;
external 'Setupapi.dll';
function SetupDiEnumDeviceInfo(DeviceInfoSet: DWORD; MemberIndex: DWORD;
DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
external 'Setupapi.dll';
function SetupDiCallClassInstaller(InstallFunction: DWORD;
DeviceInfoSet: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
external 'setupapi.dll';
function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: DWORD;
DeviceInfoData: PSP_DEVINFO_DATA; Propertys: DWORD; propertyRegDataType: PWORD;
PropertyBuffer: PByte; PropertyBufferSize: DWORD; RequiredSize: PWORD): BOOL; stdcall;
external 'Setupapi.dll' name 'SetupDiGetDeviceRegistryPropertyA';
function SetupDiSetClassInstallParams(DeviceInfoSet: DWORD;
DeviceInfoData: PSP_DEVINFO_DATA; ClassInstallParams: PSP_CLASSINSTALL_HEADER;
ClassInstallParamsSize: DWORD): BOOL; stdcall;
external 'setupapi.dll' name 'SetupDiSetClassInstallParamsA';
const
DICS_ENABLE = $00000001;
DICS_DISABLE = $00000002;
DIF_PROPERTYCHANGE = $00000012;
DICS_FLAG_GLOBAL = $00000001;
DIGCF_PRESENT = $00000002;
SPDRP_COMPATIBLEIDS = $00000002;
DISK_GUID: TGUID = '{4D36E967-E325-11CE-BFC1-08002BE10318}';
function ChangeDeviceState(AState: DWORD): Boolean;
var
pcp: SP_PROPCHANGE_PARAMS;
DevInfoData: SP_DEVINFO_DATA;
hDevInfo1: DWORD;
I, DataT, Buffersize: DWORD;
Buffer: PAnsiChar;
begin
Result := False;
pcp.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER);
pcp.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;
pcp.StateChange := AState;
pcp.Scope := DICS_FLAG_GLOBAL;
pcp.HwProfile := 0;
hDevInfo1 := SetupDiGetClassDevs(@DISK_GUID, nil, HWND(nil), DIGCF_PRESENT);
try
DevInfoData.cbSize := sizeof(SP_DEVINFO_DATA);
I := 0;
Buffersize := 500;
GetMem(Buffer, Buffersize);
try
while SetupDiEnumDeviceInfo(hDevInfo1, I, @DevInfoData) do
begin
SetupDiGetDeviceRegistryProperty(hDevInfo1, @DevInfoData,
SPDRP_COMPATIBLEIDS, @DataT, PByte(Buffer), Buffersize, nil);
if buffer = 'USBSTOR\Disk' then
begin
if not SetupDiSetClassInstallParams(hDevInfo1,
@DevInfoData, PSP_CLASSINSTALL_HEADER(@pcp), SizeOf(pcp)) then Exit;
if not SetupDiCallClassInstaller(
DIF_PROPERTYCHANGE, hDevInfo1, @DevInfoData) then Exit;
Result := True;
end;
Inc(I);
end;
finally
FreeMem(Buffer);
end;
finally
SetupDiDestroyDeviceInfoList(hDevInfo1);
end;
end;
procedure TForm6.btnEnableClick(Sender: TObject);
begin
if ChangeDeviceState(DICS_ENABLE) then
ShowMessage('Устройство включено');
end;
procedure TForm6.btnDisableClick(Sender: TObject);
begin
if ChangeDeviceState(DICS_DISABLE) then
ShowMessage('Устройство отключено');
end;
end.

Тестирование программы:
Сравним скорость безопасного извлечения флешнакопителя, выполненного тремя способами.
Флешнакопитель: 978 Мегабайт
Операционная система: Windows 7
Результаты эксперимента отражены в таблице:
№ Описание способа Скорость в секундах
1 Безопасное извлечение дисков и устройств 17,8 секунд
2 С помощью команды Извлечь в контекстном меню 6,1 секунды
3 С помощью приложения «Извлечь флешку» 2,4 секунды
Таким образом, наша утилита справляется с безопасным извлечением флешкнакопителя быстрее, чем привычные способы безопасного извлечения флешнакопителя.

Узнать IP-адрес
Полезная утилита, с помощью которой по URL – адресу можно определить IP-адрес и наоборот. Кроме того, эта программа позволяет определить тИЦ - тематический индекс цитирования (тИЦ) (технология поисковой машины «Яндекс», заключающаяся в определении авторитетности Интернет-ресурсов с учётом качественной характеристики — ссылок на них с других сайтов) и PR - Page Rank- алгоритм расчета авторитетности страницы, оценка важности страницы. В отличие от Тиц, PR рассчитывается для каждой странички сайта в отдельности.
Описание программы
1. Форма программы
 Три объекта GroupBox
 На первом и втором объектах GroupBox: Button, два объекта Edit, два объекта Label
 На третьем объекте GroupBox: Button, Edit, Memo
 idHTTP
Примерное расположение объектов на форме показано на рисунке

Форма программы «Узнать IP-адрес»
2. Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, XPMan;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Button1: TButton;
Label2: TLabel;
IdHTTP1: TIdHTTP;
GroupBox2: TGroupBox;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button2: TButton;
GroupBox3: TGroupBox;
Edit5: TEdit;
Memo1: TMemo;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Pars(T_, ForS, _T: string): string;
var
a, b: integer;
begin
Result := '';
if (T_ = '') or (ForS = '') or (_T = '') then
Exit;
a := Pos(T_, ForS);
if a = 0 then
Exit
else
a := a + Length(T_);
ForS := Copy(ForS, a, Length(ForS) - a + 1);
b := Pos(_T, ForS);
if b > 0 then
Result := Copy(ForS, 1, b - 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var p:string;
i:Tstringlist;
begin
i:=Tstringlist.Create;
i.add('T1='+Edit1.Text);
i.add('B1=Узнать IP сайта');
p:=Form1.idhttp1.post('http://ip-whois.net/website_ip.php', i);
Edit2.Text:=(Pars('<h2>',p,'</h2></p>'));
end;
procedure TForm1.Button2Click(Sender: TObject);
var ip:string;
ii:Tstringlist;
begin
ii:=Tstringlist.Create;
ii.add('T1='+Edit3.Text);
ii.add('B1=Узнать IP сайта');
ip:=Form1.idhttp1.post('http://ip-whois.net/host_ip.php', ii);
Edit4.Text:=(Pars('<h2>',ip,'</h2><p>'));
end;
procedure TForm1.Button3Click(Sender: TObject);
var ya:string;
PR:Tstringlist;
begin
PR:=Tstringlist.Create;
PR.add('T1='+Edit5.Text);
PR.add('B1=Узнать ТИЦ и PR');
ya:=Form1.idhttp1.post('http://ip-whois.net/pr_cy_check.php', PR);
memo1.Lines.add(Pars('<h2>',ya,'</h2>'));
memo1.Lines.add('ТИЦ: '+Pars('><h3>ТИЦ: ',ya,'</h3>'));
memo1.Lines.add('PR: '+Pars('<h3>PR: ',ya,'</h3>'));
end;
end.

Тестирование программы
Мы протестировали работу программы на нескольких разных ресурсах. Результаты тестирования отражены в таблице:
№ URL – адрес IP – адрес Имя хоста тИЦ
1 mail.ru 94.100.191.209 mail.ru 70000
2 vkontakte.ru 87.240.156.161 srv161-131.vkontakte.ru 160000
3 odnoklassniki.ru 217.20.147.94 ip94.147.odnoklassniki.ru 29000
4 yandex.ru 87.250.250.11 yandex.ru 290000
5 urengoj1.siteedit.ru 78.46.204.68 domain5.edgestile.net 0
Полученные результаты мы сравнили с результатами, полученными на http://pr-cy.ru – ресурсе, осуществляющем комплексный анализ сайта, который помогает узнать основные характеристики интересующего вас сайта, узнать такие параметры как тИЦ и PR и многое другое.
Сравнение показало 100% совпадение результатов.

Антивирусная программа «Восстановление после Autorun»
Утилита для ПОЛНОГО удаления вируса AutorunVBS , который копируется в корневые каталоги всех дисков. Программа производит поиск всех копий вируса на всех носителях, включая флешнакопители (если они подключены).

Реализация утилиты «Восстановление после Autorun»

Описание программы
Листинг программы
program Restore_after_AutorunVBS;
uses
Windows,
Tlhelp32;
const
ProgramName=’Восстановление после Autorun’;
var
iFiles: Integer;
Files: packed array [0..6] of PChar=('AUTORUN.VBS','AUTORUN.BAT', 'AUTORUN.TXT','AUTORUN.INF','AUTORUN.REG','AUTORUN.BIN','AUTORUN.FCB');
function IntToStr(Value: LongWord): string;
begin
Str(Value, Result);
end;
function ExtractFileName(const FileName: string): string;
var
I: Integer;
begin
i:=Length(FileName);
while (FileName[i]<>'\')and(i>0) do
i:=i-1;
Result:=Copy(FileName,i+1,Length(FileName)-i);
end;
function UpperCase(const S: string): string;
var
Ch: Char;
L: Integer;
Source, Dest: PChar;
begin
L := Length(S);
SetLength(Result, L);
Source := Pointer(S);
Dest := Pointer(Result);
while L <> 0 do
begin
Ch := Source^;
if (Ch >= 'a') and (Ch <= 'z') then Dec(Ch, 32);
Dest^ := Ch;
Inc(Source);
Inc(Dest);
Dec(L);
end;
end;
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function StrPas(lpString: array of Char): String;
var
i:DWord;
begin
Result:='';
for i:=0 to 4096 do
if lpString[i]<>#0 then
Result:=Result+lpString[i]
else
break;
end;
function SysDir: string;
var
buf: packed array [0..4095] of Char;
begin
GetWindowsDirectory(buf,4096);
Result:=StrPas(buf);
Result:=buf+'\system32\';
end;
function GetRegValue(value: PChar; var lpBuffer: array of Char): boolean;
var
Key: HKEY;
dwType: DWord;
dwLength: DWord;
begin
Result:=false;
if RegOpenKey(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',Key)=ERROR_SUCCESS then
begin
if (RegQueryValueEx(Key, value, nil, @dwType, @lpBuffer, @dwLength) <> ERROR_SUCCESS)and(dwType = REG_SZ) then
Result:=false
else
Result:=true;
RegCloseKey(Key);
end;
end;
function WinDir: string;
var
buf: packed array [0..4095] of Char;
begin
GetWindowsDirectory(buf,4096);
Result:=StrPas(buf);
end;
procedure RemoveAutorunVBS;
var
lpBuffer: packed array [0..255] of Char;
userinit: String;
RST:HKEY;
i: DWORD;
begin
KillTask('WScript.exe');
i:=$1;
if RegOpenKey(HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced',
RST)=ERROR_SUCCESS then
begin
RegSetValueEx(RST,'ShowSuperHidden',0,REG_DWORD,@i,4);
RegCloseKey(RST);
end;
if GetRegValue('Userinit',lpBuffer)=True then
begin
Userinit:=StrPas(lpBuffer);
i:=Pos(',autorun.bat',Userinit);
if i<>0 then
Delete(Userinit,i,12);
if RegOpenKey(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',
RST)=ERROR_SUCCESS then
begin
RegSetValueEx(RST,'Userinit',0,REG_SZ,PChar(Userinit),Length(Userinit)+1);
RegCloseKey(RST);
end;
end;
KillTask('explorer.exe');
WinExec(PChar(WinDir+'\explorer.exe'),0);
end;
procedure Search(path: String);
var
fd:_WIN32_FIND_DATA;
hsearch: DWORD;
function VerifyName(FName: String): Boolean;
var
i: byte;
begin
Result:=False;
FName:=UpperCase(FName);
for i:=0 to 6 do
if FName=Files[i] then
begin
Result:=True;
Break;
end;
end;
begin
hsearch:=FindFirstFile(PChar(path+'autorun.*'),fd);
if hsearch<>INVALID_HANDLE_VALUE then
repeat
if VerifyName(fd.cFileName)=true then
try
SetFileAttributes(PChar(path+fd.cFileName), FILE_ATTRIBUTE_NORMAL);
DeleteFile(PChar(path+fd.cFileName));
iFiles:=iFiles+1;
except end;
until FindNextFile(hsearch,fd)=false;
FindClose(hsearch);
end;
procedure FindFiles;
var
ch: Char;
begin
if MessageBox(0,’Вы хотите удалить вирус Autorun?’,ProgramName,MB_ICONQUESTION or MB_YESNO)=idNo then
ExitProcess(0);
RemoveAutorunVBS;
iFiles:=0;
Search(SysDir);
for ch := 'A' to 'Z' do
case GetDriveType(PChar(ch+':\')) of
DRIVE_REMOVABLE,DRIVE_FIXED,DRIVE_REMOTE:
Search(ch+':\');
end;
MessageBox(0,PChar('Удалено:'+ IntToStr(iFiles)+'файлов'),ProgramName,MB_ICONINFORMATION);
ExitProcess(0);
end;
begin
FindFiles;
end.


Заключение
Хакер — это созидатель, человек, который что-то создает. В большинстве случаев это относится к коду, но можно создавать и графику, и музыку. Все это тоже относится к хакерскому искусству. Но даже если вы занимаетесь компьютерной музыкой, знание программирования повысит ваш уровень. Сейчас создавать свои программы стало уже не так сложно, как раньше. С помощью Delphi можно создавать простенькие утилиты за очень короткое время. Так что не поленитесь и изучите программирование.
Список литературы
1. www.delphiexpert.ru
2. www.inattak.ru
3. А. Чиртик, В.Борисок, Ю.Корвель. Трюки и эффекты Delphi. – Спб., 2007 год
4. Веб – ресурс «Королевство Delphi»
5. М. Фленов. Программирование в Delphi глазами хакера. – Спб., 2003
Категория: Информатика | Добавил: ahmadieva
Просмотров: 358 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]