ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Программа для восстановление отчетов Pincha v 2.99
  #1  
Старый 29.05.2008, 10:37
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Программа для восстановление отчетов Pincha v 2.99

Давно написал. И вот решил выложить на общий обзор.
Программа предназначена для лечения кривых и не докаченных отчетов от Пинча,
которые парсер не может прочитать.

Использование программы:

Первый вариант:
pld.exe -d [-o] in_dir_name [out_dir_name]

где in_dir_name - путь к папке с кривыми отчетами
out_dir_name - путь к папке в которую будут кидаться излеченные отчеты,
если не указать этот параметр, то излеченные файлы будут находиться в
папке с кривыми отчетами.
-o - не обязательный параметр. При его использовании удаляется модуль содержащий
отчеты из Оперы(очень часто они бывают ошибочными)

Если путь содержит пробелы то необходимо взять его в ковычки.
При таком варианте использования будут обработаны все файлы с расширением *.err в папке dir_name.
Исправленные файлы будут иметь имя - file_name.err.pld

Пример:
pld.exe -d c:\pinch\log\Malformed\
pld.exe -d "c:\my pinchlog\Malformed\"
pld.exe -d -o c:\pinch\log\Malformed\ c:\norm\

Второй вариант:
pld.exe [-o] file_name

где file_in - имя файла требующего лечения.
Если путь или имя содержат пробелы то необходимо взять его в ковычки.
При таком варианте использования будет обработан только один входной файл.
Исправленный файл будут иметь имя - file_name.pld

Пример:
pld.exe c:\pinch\log\Malformed\12E0AB4578.err
pld.exe -o "c:\my pinchlog\log\Malformed\12E0AB4578.err"

P.S. Кривые отчеты парсер хранит в папке Malformed
Лечение недокаченных отчетов происходит следующим образом: Отрезаются целые модули и к ним прибавляется код говоряший парсеру о конце файла

Исходник можно замодить и под выделение отдельных модулей из отчета, увы таблицы модулей ненашел, а то можно былобы и реализовать.
Код:
program pld_v2;

{$APPTYPE CONSOLE}
uses windows;
type
 Tlogs=packed record
  magic:array[0..3] of char;
  id:LongWord;
  size:LongWord;
 end;

 var
 opera_del:boolean=false;

function fileexists(s:string):boolean;
var
 FindData:TWin32FindData;
 Handle:integer;
begin
 Handle:=FindFirstFile(PChar(s),FindData);
 if Handle<0 then result:=false else result:=true;
end;

function Str2DW(s:string):dword;
begin
 result:=ord(s[5])+ord(s[6]) shl 8+ord(s[7])shl 16+ord(s[8]) shl 24 ;
end;

function doctor(file_in,file_out:string):integer;
var
 f_in,f_out:thandle;
 logs:Tlogs;
 rb:cardinal;
 file_size:dword;
 block:string;
 rec:string;
 rec_size:dword;
const
 P3ML='P3ML';
begin
 result:=1;
 f_in:=CreateFile(PChar(file_in), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if f_in=INVALID_HANDLE_VALUE then exit;
 file_size:=GetFileSize(f_in,nil);
 setlength(block,file_size);
 ReadFile(f_in, block[1], file_size, rb, nil);
 CloseHandle(f_in);
 if rb<>file_size then
  begin
   setlength(block,0);
   inc(result);
   exit;
  end;
 if copy(block,1,4)<>'P3ML' then
  begin
   setlength(block,0);
   inc(result);
   exit;
  end;
 inc(result);
 f_out:=CreateFile(PChar(file_out), GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 if f_out=INVALID_HANDLE_VALUE then exit;

 delete(block,1,4);
 while pos('P3ML',block)<>0 do
  begin
   rec:=copy(block,1,pos('P3ML',block)+3);
   if length(rec)<12 then
    begin
     Delete(block,1,length(rec));
     continue;
    end;
   rec_size:=Str2DW(rec);
   if (rec_size=length(rec)-8) then
    begin
     if (opera_del=true) and (rec[1]=#$0F) then
      begin
       Delete(block,1,length(rec));
       continue;
      end;
     WriteFile(f_out, P3ML, 4,rb, nil);
     WriteFile(f_out, rec[1], length(rec)-4,rb, nil);
    end;
   Delete(block,1,length(rec));
  end;

 logs.magic:=P3ML;
 logs.id:=$FFFFFFFF;
 logs.size:=0;
 WriteFile(f_out, logs, 12,rb, nil);
 CloseHandle(f_out);
 result:=0;
end;

function GetSmallName(s:string):string;
begin
 while pos('\',s)<>0 do delete(s,1,pos('\',s));
 result:=s;
end;

var
 fd:_WIN32_FIND_DATAA;
 fh:dword;
 out_dir:string;
 param:integer;
begin
writeln('Pinch Log Doctor (C) SLESH 2008');
writeln('E-MAIL: SLESH-2000@mail.ru');
writeln('ICQ: 266-334-734');
writeln('WMZ: Z671833489051');
writeln('WMR: R156568501269');
param:=1;
 if (paramstr(param)='') then
  begin
   writeln(#13#10'Usage: pld.exe -d -o in_dir_name [out_dir_name] - All *.err file');
   writeln('       pld.exe -o file_in - One file');
   writeln('-o Delete Opera Module');
   exit;
  end;
if paramstr(param)='-d' then
 begin
  inc(param);
  if paramstr(param)='-o' then
   begin
    opera_del:=true;
    inc(param);
   end;

  if (paramstr(param)='') then
  begin
   writeln(#13#10'Usage: pld.exe -d in_dir_name [out_dir_name]- All *.err file');
   writeln('       pld.exe file_in - One file');
   exit;
  end;
  out_dir:=paramstr(param+1);
  if out_dir='' then out_dir:=paramstr(param);
  writeln;
  fh:=FindFirstFile(pchar(paramstr(param)+'\*.err'),fd);
  if fh=INVALID_HANDLE_VALUE then exit;
  repeat
   write(GetSmallName(fd.cFileName)+' ');
   case doctor(paramstr(param)+'\'+fd.cFileName,out_dir+'\'+fd.cFileName+'.pld') of
    1:writeln('[-] Can not open input file');
    2:writeln('[-] Can not read input file');
    3:writeln('[-] Can not correct');
    4:writeln('[-] Can not create output file');
    0:writeln('[+] Report is corrected successfully');
   end;
  until FindNextFile(fh,fd)=false;
  exit;
 end;

if paramstr(param)='-o' then
 begin
  opera_del:=true;
  inc(param);
  end;
if not fileexists(paramstr(param)) then
 begin
  writeln(#13#10'[-] Error: input file not found');
  exit;
 end;
deletefile(pchar(paramstr(1)+'.pld'));
case doctor(paramstr(param),paramstr(param)+'.pld') of
    1:writeln(#13#10'[-] Can not open input file');
    2:writeln(#13#10'[-] Can not read input file');
    3:writeln(#13#10'[-] Can not correct');
    4:writeln(#13#10'[-] Can not create output file');
    0:writeln(#13#10'[+] Report is corrected successfully');
end;
end.
 
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обзор программ для очистки жёсткого диска v1ru$ Soft - Windows 21 17.01.2010 21:07
Raid, Scsi Cthulchu Аппаратное обеспечение 5 22.11.2008 16:45
GnuPG (GPG) - Цифровая подпись, шифрование elimS2 Безопасность 2 16.04.2008 10:00
G$tarLpMan Lite - редактор ленга для китов. EmitRemus Сотовый фрикинг 0 17.01.2008 00:03



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ