konwertowanie plków exe do txt

0

mam przygotować cośtam na infe i zahaczyłem :P o temat kompresji i konwersji plików. tutaj chce przedstawić prog co konwertuje exe (0100100100100) na np. ascii ale jakoś tak, by można to przywrócić do exe (aSmkAfjeusJHdfGSDjkdegf). Słysząłem gdzieś że można to zrobic nonwertując plik na 64 bitowy czy coś takiego. zebrałem troszke procedur i mam tu te co by sie przydały :P. Bardzo prosze o pomoc. :( Męcze sie z tym już od tygodnia i wszystko do d... .jak moge to skonwetować?? (exe->txt 64 bit np.)
?????

function Chr2Int(c: Char): Integer;
begin
  c := UpCase(c);
  if (c >= '0') and (c <= '9') then Result := Integer(c) - Integer('0')
  else Result := Integer(c) - Integer('A') + 10;
end;

function Int2Chr(i: Integer): Char;
begin
  if i < 10 then Result := Char(i + Integer('0')) else
  Result := Char(i - 10 + Integer('A'));
end;

function Str2Int(s: String; base: Integer): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(s) do Result := (Result * base) + Chr2Int(s[i]);
end;

function Int2Str(v: Integer; base: Integer): String;
var
  m: Integer;
begin
  Result := '';
  while v <> 0 do begin
    m := v mod base; v := v div base; Result := Int2Chr(m) + Result;
  end;
  if Result = '' then Result := '0';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
f:file;
buf:PChar;
leng:integer;
i,n:integer;
begin
leng:=1024;
assignfile(f,'plik.exe');
 try
  Reset(f);
  //GetMem(buf,leng);
  for i:=0 to filesize(f) do
   begin
    //seek(f,i);
    blockread(f, buf^, leng, n);
   end;
  Read(buf^,leng);
 finally
  closefile(f);
 end;
end;

procedure odczyt(s1,s2:string);
var
  Zpliku, Dopliku: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..8] of Integer;
  str:string;
  tf:textfile;
begin
    AssignFile(Zpliku,s1);
    assignfile(tf,'plik.txxt');
    ReWrite(tf);
    Append(tf);
    Reset(zpliku, 1);   { rozmiar rekordu = 1 }
    AssignFile(dopliku, s2);
    Rewrite(dopliku, 1);   { rozmiar rekordu = 1 }
      repeat
        BlockRead(zpliku, Buf, SizeOf(Buf), NumRead);
        Writeln(tf,str);
        BlockWrite(dopliku, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
        CloseFile(zpliku);
        CloseFile(dopliku);
end;

przydałobvy sie to również w przesyłanu plików na socketach w komunikatorze na LANie który pisze a chce spróbować tylko na literkach :)

0

jest coś takiego, jak kodowanie Base64 - korzystasz tylko z 6 bitów w każdym bajcie, w ten sposób zapisujesz na 64 bitach (8 bajtach) 48 bitów (6 bajtów). te 6 bitów wykorzystujesz następująco: pobierasz kolejne 6 bitów z ciągu danych, durzucasz na ich początek bity 01, w sumie masz ciąg 01xx xxxx - tak "sformatowane" dane mieszczą się w przedziale 64..127, czyli czyste ASCII.

miłej zabawy. :-)

0

oooo fuck!... no ale oka. napisze to, a czy masz (lub ktoś inny) link jakiś gdzie jest to jakos opisane? google mają troche dużo rzeczy wiążacych sie jakoś tam z tym, ale nie moge znaleźć szerszego opisu, może jakiegoś kodu, do tego problemu...

0

hm.. no nawet ganz interessant :) ja tez sie zastanwiałem kiedyś nad tym. ma ktoś może jakąś procedurke na to? ;)

0

no jak moge obciąć te 2 bity???? może ktoś wie, a mu sie nie chce pisać. prosze, dajcie coś... :((

0

Znalazłem na dysku takie coś, pisałem to dawno temu,
wygląda obrzydliwie i nie wiem czy działa:

function Str2Base64(Str: String): String;
const
  cr = #13; lf = #10;
  t : Array[0..64] of Char = 'ABCDEFGHIJKLMNOPQ' +
  'RSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var
  r : String;
  s : Array of Byte;
  i, v, c, l : Integer;
begin
  l := Length(Str); SetLength(s, l);
  Move(Str[1], s[0], l); i := l div 3;
  if l mod 3 > 0 then i := i + 1; i := i * 4;
  SetLength(r, i + (i div 76) * 2);
  i := 1; v := 0; c := 0; l := l - 2;
  while v < l do begin
    r[i]   := t[s[v]shr$2];
    r[i+1] := t[((s[v]shl$4)or(s[v+1]shr$4))and$3F];
    r[i+2] := t[((s[v+1]shl$2)or(s[v+2]shr$6))and$3F];
    r[i+3] := t[s[v+2]and$3F];
    c := c + 1; v := v + 3; i := i + 4;
    if c > 18 then begin
      r[i] := cr; r[i+1] := lf; i := i + 2; c := 0;
    end;
  end;
  l := (l - v) + 2;
  if l > 0 then begin
    r[i] := t[s[v]shr$2]; r[i+2] := t[64]; r[i+3] := t[64];
    if l > 1 then begin
      r[i+1] := t[((s[v]shl$4)or(s[v+1]shr$4))and$3F];
      r[i+2] := t[(s[v+1]shl$2)and$3C];
    end else r[i+1] := t[(s[v]shl$4)and$30];
  end;
  Result := r;
end;

//mmmm... śliczne! - ŁF

0

aha.. łade, ale jak przepisać plik binarny do postaci base64? tak zeby miec tylko polecenie

przepisz('plik.exe','plik_tekstowy.txt');

?? nie potrafie.... ;(

0

Ja tylko do Łukasza Fronczyka - Twój sposób to nie jest base64! To jakiś mutant ;-).
Wersja piechnata jest prawidłowa.

0

przepisz('plik.exe','plik_tekstowy.txt');

?? nie potrafie.... ;(

procedure przepisz(exeName, txtName: String);
var
  S: String;
  F: File of Byte;
begin
  AssignFile(F, exeName);
  FileMode := 0;
  {$I-} Reset(F); {$I+}
  if IOResult <> 0 then Exit;
  try
    SetLength(S, FileSize(F));
    BlockRead(F, S[1], Length(S));
  finally
    CloseFile(F);
  end;
  S := Str2Base64(S);
  AssignFile(F, txtName);
  FileMode := 2;
  {$I-} ReWrite(F); {$I+}
  if IOResult <> 0 then Exit;
  try
    BlockWrite(F, S[1], Length(S));
  finally
    CloseFile(F);
  end;
end;
0

dziękuję państwu... :)

0

A jak zrobić to samo tylko w drugą stronę? czyli funkcja Base642str i procedura przemien(filetxt, exefile)

1 użytkowników online, w tym zalogowanych: 0, gości: 1