Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Типа Anti троян   Найти похожие ветки 

 
Yttrium   (2003-10-06 02:12) [0]

Как то подцепил такую дрянь которая заражает html и некоторых его братьев ну еще много чего делает, самым сложным оказалось вылечить хтмл"ки.
Написал вот что


program AntiKJ;
//{$DEFINE NOPLAGIAT}
{$DEFINE CONS}
//{$DEFINE DEL_INFECT}
{$IFDEF CONS}
{$APPTYPE CONSOLE}
{$ENDIF}
{$WARNINGS OFF}

uses
Windows{$IFDEF NOPLAGIAT},KOL{$ENDIF};//, sysutils;

const
MaskInfect:array[0..3] of String = ("*.htm","*.php","*.asp","*.sht");
startKJ = 11516;
signature = "KJ_start";
addrSign = 11485;

var
i,rez,k: Integer;
sBuff: array[1..1024] of char;
fl,flr: file;
FileLog: Text;

{$IFDEF CONS}
function Rus(s: string):string;
var i:integer;
begin
for i := 1 to length(s) do
case s[i] of
"ё" : s[i] := #$f1;
"Ё" : s[i] := #$f0;
"А".."п": dec(s[i],64);
"р".."я": dec(s[i],16);
end;
Result := s;
end;
{$ENDIF}

{$IFDEF NOPLAGIAT} // uses KOL;
{$ELSE}
function DirectoryExists(const Name: string): Boolean;
asm // Спёр из KOL
//CALL System.@LStrToPChar // Name must not be ""
PUSH EAX
CALL GetFileAttributes
INC EAX
JZ @@exit
DEC EAX
{$IFDEF PARANOIA}
DB $24, FILE_ATTRIBUTE_DIRECTORY
{$ELSE}
AND AL, FILE_ATTRIBUTE_DIRECTORY
{$ENDIF}
SETNZ AL
@@exit:
end;
{$ENDIF}

procedure WriteWith(s: String);
begin
Writeln(filelog, s);
{$IFDEF CONS}
Writeln(rus(s));
{$ENDIF}
end;

function GOInfect(aDir:string):integer;
var
ifile: THandle;
fd: TWin32FindData;
begin
//Writeln(filelog, "--------<==============================>-------");
WriteWith(adir);
for i := 0 to 3 do
begin
ifile := FindFirstFile(PAnsiChar(adir + MaskInfect[i]), fd);
if ifile <> INVALID_HANDLE_VALUE then
repeat
if fd.nFileSizeLow > pred(startKJ) then
begin
AssignFile(fl,adir+PChar(@(fd.cFileName)[0]));
Reset(fl,1);
try
seek(fl,fd.nFileSizeLow - addrSign);
BlockRead(fl, sBuff, length(signature), rez);
if String(PChar(@sBuff[1])) = signature then
begin

Writeln(filelog, " > ",(""""+PChar(@(fd.cFileName)[0])+""""):40," [ИНФИЦИРОВАН] """, String(PChar(@sBuff[1])), """");
{$IFDEF CONS}
Writeln(" > ",(""""+rus(PChar(@(fd.cFileName)[0]))+""""):40,rus(" [ИНФИЦИРОВАН] """), String(PChar(@sBuff[1])), """");
{$ENDIF}

CloseFile(fl);
Rename(fl,{ChangeFileExt}(adir+PChar(@(fd.cFileName)[0])+".infect"));
AssignFile(flr,{ChangeFileExt}(adir+PChar(@(fd.cFileName)[0])+".infect"));
Reset(flr,1);
try
AssignFile(fl,adir+PChar(@(fd.cFileName)[0]));
Rewrite(fl,1);
for k := 1 to (fd.nFileSizeLow - startKJ) div 1024 do
begin
BlockRead(flr,sBuff,1024,rez);
BlockWrite(fl,sBuff,rez);
end;
BlockRead(flr,sBuff,(fd.nFileSizeLow - startKJ) mod 1024,rez);
BlockWrite(fl,sBuff,rez-1);
finally
CloseFile(flr);
end;
{$IFDEF DEL_INFECT}Erase(flr);{$ENDIF}
end else
begin
Writeln(filelog, " > ",(""""+PChar(@(fd.cFileName)[0])+""""):40, "[OK]");
{$IFDEF CONS}Writeln(" > ",("""" + rus(PChar(@(fd.cFileName)[0]))+""""):40, "[OK]");{$ENDIF}
end;
finally
CloseFile(fl);
end;
end else
begin
Writeln(filelog, " > ",(""""+PChar(@(fd.cFileName)[0])+""""):40, "[OK]");
{$IFDEF CONS}Writeln(" > ",("""" + rus(PChar(@(fd.cFileName)[0])+"""")):40, "[OK]");{$ENDIF}
end;
until not FindNextFile(ifile,fd);
FindClose(ifile);
end;

ifile := FindFirstFile(PAnsiChar(adir + "*"), fd);
if ifile <> INVALID_HANDLE_VALUE then
repeat
if (String(PChar(@(fd.cFileName)[0])) <> ".")
and (String(PChar(@(fd.cFileName)[0])) <> "..") then
if DirectoryExists(adir + PChar(@(fd.cFileName)[0])) then
GOInfect(adir + PChar(@(fd.cFileName)[0]) + "\");
until not FindNextFile(ifile,fd);
FindClose(ifile);
Result := 0;
end;

begin
if Copy(ParamStr(0),length(ParamStr(0))-10,11) <> "\AntiKJ.exe" then exit;
AssignFile(FileLog,Copy(ParamStr(0),1,length(ParamStr(0))-4)+".log");
Rewrite(FileLog);
WriteWith(" -<=Begin=>-");
WriteWith("--------<==============================>-------");
GOInfect(Copy(ParamStr(0),1,length(ParamStr(0))-10));
WriteWith("--------<==============================>-------");
WriteWith(" -<=End=>-");
CloseFile(FileLog);
{$IFDEF CONS}
Write(rus("Нажми <Enter> для выхода"));
Readln;
{$ELSE}
MessageBox(0,"Game Over","AntiKJ",0);
{$ENDIF}
end.


Компилирую, на моей машине работает(по крайней мере работало до того пока я недобавил рекурсию для поиска во вложенных каталогах) ищет сбоев недавало.
В общем проблема такая кидаю ехе коришу, у него либо вылетает без каких либо оповещений об ошибке там, либо говорит что первый попавшийся файл заражён и лечит его, а остальные в порядке.


 
Yttrium ©   (2003-10-07 00:11) [1]

Ну мож косяк где есть, хот на смутные фрагменты укажите!!!
Пыжалста!


 
Yttrium ©   (2003-10-08 01:43) [2]

Ну важно очень!!!!!!!!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-65374
Митяй
2003-09-28 17:24
2003.10.20
Строка в SQL


3-65333
Difar
2003-09-30 08:06
2003.10.20
Восстановление таблицы Paradox


1-65521
Tornado
2003-10-08 11:39
2003.10.20
Посоветуйте компонент


4-65661
Handy
2003-08-14 22:22
2003.10.20
Заголовок окна


3-65317
Vick
2003-09-30 13:21
2003.10.20
Программа в процессе работы пожирает всю память!!!!