Modyfikacja uchomionego programu exe

0

witam!

Mam takie pytanko czy istnieje możliwośc aby program sam sie zmodyfikował dopisał sam do siebie <ort>co kolwiek</ort> ! chciałbym aby dopisywał liczby aby sam w sobie mial licznik. Czy cos takiego jest wykonywalne ?

0

Kiedyś pisałem program shareware, który po n-uruchomieniach kasował sam siebie z dysku. Oto tok postepowania i source.

1). Deklarujemy stałą np. typu LongInt, która przechowuje liczbę dostępnych uruchomień programu, oraz zmienną do odczytania tej liczby. Stała jest typu LongInt ze względu na uproszczenie szukania jej za pomocą Hex edytora (np. inicjujesz ją zmienną $AABBCCDD - szansa, że znajdziesz dwie takie wartości w kodzie jest mała). Do czasu finalnej wersji, wskaźnik plikowy ustawiamy na cokolwiek.

2). Kompilujemy program.

3). Za pomocą hex edytora szukamy liczby uruchomień, czyli $DDCCBBAA (kolejność odwrócona). Gdy ją znajdziemy, zapisujemy jej adres. W kodzie programu ustawiamy wskaźnik plikowy na tą stałą. Teraz możemy dowolnie odczytywać / zapisywać wartości.
Kod programu:

var
 f  :file;
 dd :LongInt;
 
const 
 Uruchomienia :LongInt = $AABBCCDD;
 
begin
 Assign(F, ParamStr(0));
 if Uruchomienia > 0 then
    begin
     Reset(F, 1);
     { zmiana wartości pozycji pliku i wartości zmiennej nie mają wpływu na adresy fizyczne }
     Seek(F, $1692);                   { taki adres podał hex edytor   } 
     BlockRead(F, DD, SizeOf(DD));     { odczyt wartości               }
     Dec(DD);                          { zmniejsz licznik uruchomień   }
     Seek(F, FilePos(F) - SizeOf(DD)); { Cofamy się o rozmiar zmiennej }
     BlockWrite(F, DD, SizeOf(DD));    { zapis nowej warości           }
     Close(F);
    end else
    begin
     { tu operacje destrukcji pliku }
     Rewrite(F); { zeruj plik }
     Close(F);   { zamknij    } 
     Erase(F);   { usuń       }
    end;
 end;    
0

Dopisał sam do siebie, hmm...
Nie ma problemu, jeżeli chcesz dopisywać kod maszynowy.
Natomiast jeżeli chodzi o kod Delphi, to ciężka sprawa, bo przecież plik wykonywalny programu ma mało wspólnego z kodem, chyba, że do swojego programu dopisałbyś jeszcze kompilator :d
BTW: w czym chcesz to wykorzystać?

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