Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izvrsiti BILO KOJI fajl ???

[es] :: Pascal / Delphi / Kylix :: Kako izvrsiti BILO KOJI fajl ???

[ Pregleda: 742 | Odgovora: 4 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Kako izvrsiti BILO KOJI fajl ???06.10.2004. u 02:56

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);
06.10.2004. u 02:56 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
*.vdial.verat.net

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: Kako izvrsiti BILO KOJI fajl ???06.10.2004. u 07:19
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;


Ride the rainbow, crack the sky
06.10.2004. u 07:19 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.neobee.net.



Profil

icon Re: Kako izvrsiti BILO KOJI fajl ???10.10.2004. u 15:10
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 ?
10.10.2004. u 15:10 

Slavisa
Slavisa Dojcinovic
JKP Cistoca
Banjaluka

Član broj: 9861
Poruke: 44
*.teleklik.net.



Profil

icon Re: Kako izvrsiti BILO KOJI fajl ???10.10.2004. u 22:57
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.

Slavisa
10.10.2004. u 22:57 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Kako izvrsiti BILO KOJI fajl ???11.10.2004. u 05:58
OK...
Video sam da se sa SndPlaySound(....) moze reprodukovati zvuk koji se nalazi u memoriji pa zato pitam...
11.10.2004. u 05:58 

[es] :: Pascal / Delphi / Kylix :: Kako izvrsiti BILO KOJI fajl ???

[ Pregleda: 742 | Odgovora: 4 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.