dopisywanie liczby uruchomień do exe

0

uzywam BCB6(aplikacja konsolowa) napisalem mala baze danych oparta na liscie powiazanej mam tylko jeden problem MUSZE dodac taka opcje ze do pliku wykonywalnego programu (np program.exe) ma byc zapisywana/odczytywana informacja ile razy program byl uruchamiany ,kompletnie nie mam idei jak to zrobic poszperalem troche po sieci ale koncepcji nie mam moze ma ktos jakis pomysl ,za kawalek kodu bardzo bylbym wdzieczny

//pisz sensowne tematy !! - M

0

mozesz s<ort>kozystac</ort> z Rejestru Windows, tam utowrzyc galaz i za kazdym razem jak sie program uruchomi dodawac jedna wartosc; badz analogicznie zrobic ort! z pliku umieszczonego w katalogu z programem...

0

a nie da sie do samego exe takiej inforamcji zapisac i ja uaktualniac ? to ma miec mozliwiosc uruchamiania na wielu komputerach wiec nie sadze zebym grzeba w rejestrze kazdego z nich ,no i To musi siedziec w pliku exe kiedys wyczytalem ze mozna zrobic tak (BCB) :

#pragma data_seg(.COUNTER) tworzy w pliku wykonwyalnym nowy obszar
int counterVal=0 //tworzy zmienna int w tym obszaze
#pragma data_seg() //zamyka obszar |

problem w tym ze nie wiem jak sie dostac do tego obszaru i uaktualniac ta zmienna (jezyk C)

0

jak chcesz to zrobic w swoim programi i by to on trzymal o tym informacje to wykorzystaj to:

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
#pragma argsused
using namespace std;
void stworz();
void wczytaj();
void zapisz();
int k;
int main(int argc, char* argv[])
{

wczytaj();
zapisz();
        system("pause");
        return 0;
}
void stworz()
{ int ile=1;
  //ofstream pl("ile.txt");
  ofstream pl;
  pl.open("ile.txt");
  if(!pl) return;
  pl<<ile++;
  pl.close();
}
void wczytaj()
{
int rob;
ifstream plik;
plik.open("ile.txt");

  if(!plik)
{
cout<<"blad otwarcja !!!"<<endl<<"robie nowy"<<endl;
stworz();
//ifstream plik;
//plik.open("ile.txt");


return;
}
plik>>rob;
k=rob;
k++;
cout<<"Uruchomien: "<<k;

plik.close();
}
void zapisz()
{
ofstream plik;
plik.open("ile.txt");
if(!plik)
{
cout<<"blad zapisu !!!";
return;
}
plik<<k;
plik.close();
}
//---------------------------------------------------------------------------

powinno dzialac, dla bardziej tajemniczego sposobu uzyj np. zapisu binarnego, a to powinno byc gicio, bo chyba o to ci chodzilo

0

hmm.... w delphi (ale na pewno tez to jest w C) jest mozliwosc wypakowywania umieszczonych w uruchomionym exec-u archiwow...
gdzies chyba widzialem mechanizm, ktory dziala rowniez w druga strone, tzn ze mozna "wpakowywac" pliki do exec-a...

ostatecznie mozesz zrobic to na zasadzie podobnej do dzialania wirusow, tzn spreparowac plik exe w taki sposob, ze bedzie sie w nim znajdowal obszar "pustego kodu", w ktorym bylaby zawarta informacja o liczbie uruchomien ("rezerwacja" przestrzeni odbywa sie na zasadzie przesuniecia skoku warunkowego w pliku egzekucyjnym - assembler), problem braku dostepu mozna rozwiazac nastepujaca:
program glowny wypakowuje program pomocniczy (wpakowany do execa), tenze mini-program zamyka program glowny i zmienia wartosc wydzielonych bajtow w pliku, a nastepnie sam sie zamyka
jednak powstaje problem jak na to zareaguja programy antywirusowe...

niestety to jest tylko teoria, jak na razie innego rozwiazania nie widze...

0
  1. Program mógłby się kopiować obok siebie z niewielką zminą w nazwie i dopisując na końcu swojego kodu licznik uruchomień. Następnie powinien otworzyć się z kopii i zamknąć. Uruchomiona kopia niech usunie rodzica i wsio... Sposob trochę dookoła, ale powinien działać...

  2. Możesz też przeskoczyć do RING0 i pobawić się w boga :P (nie polecam ze względów etycznych [diabel] i dlatego, że można sporo namieszac, a sposob jest dosc skomplikowany)

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