Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.106 pregleda

Najnovija ↓

Kako izvrsiti BILO KOJI fajl ??? 06.10.2004. u 03:56 · pre 268 meseci #1
Moracu malo detaljnije da pojasnim problem...
Pravim jedan protector za fajlove koji radi tako sto se posebno programce doda na pocetku nekog fajla, a fajl se enkriptuje. Kad se startuje taj fajl, startuje se programce (koje je na pocetku) koje trazi da se unese sifra i onda pomocu te sifre dekriptuje fajl (koji se nalazi na kraju fajla, iza programceta :)).
E sad, ja ceo fajl u toku dekriptovanja zapisujem u MemoryStream. Moze li se nekako izvrsiti taj buffer koji se nalazi u MemoryStream ? Probao sam neke egzibicije sa CreateProcess, ali koliko vidim, on izvrsava samo executabilne fajlove, ne i druge (recimo, mp3), i to samo one koji su na hard disku. Ne mogu da koristim ShellExecute zato sto mi treba handle do procesa, da bi ga sa WaitForSingleObject cekao i posle zavrsetka izbrisao fajl...

Evo primera CreateProcess :

Code:

  FillChar(sInfo, SizeOf(TStartupInfo), 0);
  sInfo.cb := SizeOf(TStartupInfo);
  CreateProcess(nil, mstream.Memory, nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo);
  WaitForSingleObject(pInfo.hProcess, INFINITE);
Re: Kako izvrsiti BILO KOJI fajl ??? 06.10.2004. u 08:19 · pre 268 meseci #2
probaj sa ShellAPi-evom
Code:

function ShellOpenFile(hWnd : HWND; AFileName, AParams, ADefaultDir : string; Explore: boolean = False): integer;
var Act: PChar;
begin
  if Explore then
    Act := 'explore'
  else
    Act := 'open';
  Result := ShellExecute(hWnd, Act, pChar(AFileName), pChar(AParams), pChar(ADefaultDir), SW_SHOWDEFAULT );
  if Result <= 32 then
     raise Exception.Create('Error executing file!');
end;

Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Kako izvrsiti BILO KOJI fajl ??? 10.10.2004. u 16:10 · pre 268 meseci #3
Citat:
Ne mogu da koristim ShellExecute zato sto mi treba handle do procesa, da bi ga sa WaitForSingleObject cekao i posle zavrsetka izbrisao fajl


Elem, mene zanima da li je moguce da se izvrsi nesto sto se nalazi u MemoryStream ili ne ?
Re: Kako izvrsiti BILO KOJI fajl ??? 10.10.2004. u 23:57 · pre 268 meseci #4
Treba ti CreateProcess() funkcija. Evo primjer koristenja:

Code:

procedure TForm1.Button1Click(Sender: TObject);
var
  StartupInfo : TStartupInfo;
  ProcessInformation : PROCESS_INFORMATION;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  StartupInfo.cb := Sizeof(StartupInfo);
  CreateProcess('c:\windows\system32\notepad.exe', nil,
                nil, nil, FALSE, 0, nil, nil,
                StartupInfo, ProcessInformation
                );
  ShowMessage(IntToStr(ProcessInformation.hProcess));
end;


Kriptovani sadrzaj bi morao da dekriptujes u neki privremeni fajl pa da ga pokrenes.
Moguce je izvrsiti nesto sto ne nalazi u memoriji samo sto to u tvom slucaju ne bi radilo :)
Prvo, izvrsavanje ne mozes da zapocnes od pocetka tog strima vec od ulazne tacke programa sto moras da procitas iz PE zaglavlja. Takodje taj steam mora da pocinje na odredjenoj memorijskoj lokaciji (najcesce $00400000 to ti je ImageBase) sto takodje citas iz PE zaglavlja. Cak i kad bi ispunio sve gore navedene uslove opet to ne bi radilo jer bi morao da ucitas sve DLL-ove koje taj program koristi i da zatim zakrpis IAT tabelu.
Sve u svemu veoma komplikovano.
Potpis
Slavisa
Re: Kako izvrsiti BILO KOJI fajl ??? 11.10.2004. u 06:58 · pre 268 meseci #5
OK...
Video sam da se sa SndPlaySound(....) moze reprodukovati zvuk koji se nalazi u memoriji pa zato pitam...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme