Текущий архив: 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