[ SambucusELF @ 02.04.2007. 19:46 ] @
pozdrav,...

ideja je sledeca: zelim da napravim program koji ce da ucita drugi program u RAM i da kaze windows-u da pokrene taj program (znaci nije samo neka procedura, nego CEO .exe fajl) ...

Koju (ako postoji) windows funkciju treba pokrenuti i koje mi biblioteke u projektu trebaju...

Koristim dev-cpp, ali dostupni su mi i drugi software-ski paketi u jednoj software-skoj firmi koja ih ima.

Hvala, Marko.

[ Buffy @ 02.04.2007. 22:22 ] @
Nisam bas dobro shvatio.
Mozda CreateProcess funckija?
Ona je deklarisana u windows.h, cini mi se.
[ SambucusELF @ 03.04.2007. 07:23 ] @
sta radi create process?

meni treba nesto sto bi algoritamski izgledalo ovako:

pointer * point;
^ ne znam kakav bi ovo objekat trebalo da bude, zavisi sta treba proceduri koju pozivam

getmem(point, getfilesize("filename.exe") );

Procedura(point);

freemem(point);


"Procedura" - koja ? bi mogla da pokrene exe fajl iz rama. mislim, verovatno moze rucno da se rasceprkava struktura exe fajla, pa da se razbije - kao kod disassemblovanja, ali mislim, to mi nije neophodno,... samo komplikuje

U medjuvremenu cu ja pogledati sta radi create process pa cu javiti da li je to ono sto mi treba.

Marko.
[ SambucusELF @ 03.04.2007. 11:53 ] @
da pojasnim svrhu...

treba mi da za jednu firmu zastitim source i runtime program koji su napravili.

[ kiklop74 @ 03.04.2007. 12:26 ] @
Mislim da to neće moći. Barem ne tako kako si zamislio, ili bar ne bez upotrebe asemblera.

Ono što bi možda moglo da posluži je da u osnovni exe ugradiš drugi exe kao kriptovani resurs i da ga u pogodnom trenutku "izvučeš" iz resursa i snimiš negde na disk i pozoveš createprocess sa tom putanjom. Po završetku drugog programa sa prvim počistiš sve sa diska.



[ Buffy @ 03.04.2007. 13:51 ] @
Nije lose rjesenje.
[ SambucusELF @ 03.04.2007. 18:47 ] @
to nije problem, ...

cak mogu da ubacim i self-deleteing exe, ali se desava situacija da je meni nemoguce da promenim source aplikacije koju treba da zastitim, kako bi ona izvrsila harakiri. posto je takva situacija, ... moracu da zadjem dublje...

dakle, nemam nista protiv asm -a, radio sam jos 1998 u njemu, dosta se pozaboravljalo, ali mogu da se vratim...

samo daj neki predlog.
[ kiklop74 @ 03.04.2007. 23:56 ] @
Meni i dalje nije jasno šta ti želiš da postigneš. Kakve veze ima source sa iskompajliranim programom?
Šta ti želiš da menjaš? Uopšte nisi dobro objasnio.

[ SambucusELF @ 04.04.2007. 22:38 ] @
do source-a (bar asemblerskog) nije tesko doci kad je tu neki disassembler, tu se lepo vide i pozivi funkcija i stosta drugo, ... pod uslovom da je program radjen u nekom "pristojnom - u smislu - sa lepim manirima" kompajleru pa je onda obelezio sve lepo markerima itd... takav kod je lako razbiti

ja zelim da zastitim program za knjigovodstvo od kopiranja. ali nije tesko preskociti instrukcije koje ulaze u procedure za proveru licence i slicno... zato hocu da zastitim runtime i source.

Marko
[ SambucusELF @ 07.04.2007. 02:44 ] @
Malo da pojasnim...

Pristupio sam prvom sloju resavanja problema tako sto sam napravio enkripciju izvrsne datoteke koju desifrujem na disku i pokrenem. Mana ovoga je sto (koliko god je ja zavukao duboko u neki temp) ozbiljniji korisnik moze da je pronadje.

Sa druge strane, mogao bih da zakljucam datoteku kao sistemsku, i dozvolim da samo ona bude aktivna (recimo koristeci paralelne niti - jednu koja ce je desifrovati i zakljucati, zatim na kratko odkljucati i pokrenuti drugu nit, a zatim pokrenuti program,druga nit ce uporno zakljucavati datoteku,... bez obzira koliko se aktivno koristio unlocker...)

Druga ideja bi bila da je pokrenem kao zasticeni kernelov modul u ram-u (ili nadogradnja ove ideje), ...
samo ne znam koliko je to opet efikasno i da li je stvarno potrebno...


Code:


#include <stdio.h>
#include <io.h>
#include <fcntl.h>
/* The following line is needed to
   compile using the Microsoft visual C compiler */
#include <sys/locking.h>

/* Uncomment For Concurrent Write Test */
/* #include <dos.h> */

char write_buffer[] = { "Purl Gurl Rocks And Rolls!" };

int main (int argc, char *argv[])
 {
  int file_handle;
  int data_size;

  /* Open Or Create New File For Write - Truncates Existing File */

  file_handle = open (argv[1], O_WRONLY | O_CREAT | O_TRUNC);
  if (file_handle != -1)
   {
    /* Lock Error Check */

   /* Please uncomment for Visual C */
    if (_locking (file_handle, LK_NBLCK, 20L))
   /* uncomment for other compilers */
   /* if (lock (file_handle, 0L, 20L)) */

     { printf ("File Lock For %s Failed\n", argv[1]); }
    else
     {
      printf ("File %s Is Locked\n", argv[1]);

      /* Write File */

      data_size = write (file_handle, write_buffer, sizeof (write_buffer));

      /* Write Error Check */

      if (data_size != sizeof (write_buffer))
       { printf ("Write To %s Failed\n", argv[1]); }
      else
       { printf ("Write To %s Successful\n", argv[1]); }

/* Uncomment To Allow Time For Concurrent Write Test */
/* sleep (30); */

      /* Unlock File */

     /* Please uncomment for Visual C */
      _locking (file_handle, LK_UNLCK, 20L);
     /* uncomment this line for other compilers */
     /* unlock (file_handle, 0L, 20L); */
      /* Close File */

      close (file_handle);
     }
   }
  return 0;
 } 




^Ovo je skolski primer, ali ovo obican Unlocker razbija


http://www.brothersoft.com/sec...k_dll_device_driver_44509.html
^ovo je malo ozbiljnije

http://www.brothersoft.com/uti...down_-_free_edition_34614.html
^ Ovo je takodje zanimljivo


Dajte vi neki primer koda za zakljucavanje, bio bih vam veoma zahvalan...

I ideje su dobrodosle ...


P.S. Izvinjavam se zbog konfuznosti svojih odgovora, prilicno sam bio angazovan ovih dana na nekim drugim temema...

Marko
[ SambucusELF @ 07.04.2007. 14:34 ] @
Ljudi,... ucestvujte, mislim, znam da je zanimljivo slusati me ovde kako lupetam,... ali ne bih da ovo postane monolog.

Gornji kod mi je beskoristan jer sluzi samo da se fajl zastiti od brisanja, a ne i da se zastiti od citanja.

cak i kada se promeni flag pri zakljucavanju fajla na LOCK opet to nije ono sto meni treba.

Nekome moze biti korisni, pa ako imate potrebu da zastitite fajl od brisanja, na lak nacin, ovo moze biti resenje za vas.

Marko.

I dalje sam otvoren za ideje, mada mislim da cu se okrenuti onoj ideji sa 2e niti i brisanju fajla odmah posle pokretanja.

Marko.
[ vlaiv @ 09.04.2007. 09:52 ] @
Ti u sustini zelis da alociras memoriju, sam izvrsis ucitavanje nekog fajla u memoriju i kreiranje procesa od toga ...

CreateProcess se obicno koristi tako sto das windows-u .exe fajl koji zelis da se ucita u process ...

Mislim da je ovo sto si ti zamislio izvodljivo, zapravo sam siguran da jeste samo je pitanje koliko je komplikovano ...
Nazalost ne znam napamet kako se to radi ali cu malo pronjuskati po netu pa ti mozda postujem odgovor ako
se pre toga niko ne javi ...

Kao sama zastita je pitanje da li se isplati raditi... ljudi koji probijaju zastitu su navikli da zapravo gledaju
sta se desava u memoriji prilikom izvrsavanja programa ...

Dosta "razbijenih" programa je koristilo neke kompresore i sl, znas ono zapakovan exe koji se raspakuje u
memoriji pre pokretanja, pa su opet zavrsili "razbijeni"
[ SambucusELF @ 09.04.2007. 11:56 ] @
slazem se sa tobom,...

mada u nekom smislu nije to toliko bitan program koji treba da stitim da ce ga vrhunski crack-eri razbijati...

samo malo ozbiljniji prog za knjigovodstvo...

[ vlaiv @ 11.04.2007. 19:43 ] @
Mozda ti ovo pomogne ...

U pitanju je ucitavanje i pokretanje komprimovanog exe fajla ...

http://www.cultdeadcow.com/tools/peload/peloader.c



Mozes pogledati i ovo ...

http://www.koders.com/c/fidA28...F6434F34D67CACB80A19B2B4E.aspx

a i probati da nadjes nesto o peloader.c na google-u ...

Poz
[ vlaiv @ 11.04.2007. 20:00 ] @
evo ti i interesantan link na neki "open source" koji radi nesto slicno kao sto si ti zamislio samo malo drugacije ...

Ucitava fajl sa diska ali je fajl invalidan (nije kompletan ili je izmenjen) ...
To radi sa pozivom na CreateProcess funkciju sa jednom malom izmenom, program je pauziran i ne startuje se odmah ...

Posle toga startujuci program (zastita) otvori memoriju procesa ucitanog programa i "popravi" ga da radi ukoliko je
hardware ID ispravan na datoj masini ...

Da se ne raspricavam puno, evo ti link :

http://www.codeproject.com/tools/OpenSrcProt_Part2.asp
[ SambucusELF @ 12.04.2007. 00:47 ] @
HVALA!

Mislim da ce mi to puno pomoci.

Kad iskombinujem nesto sa tim kodom, javljam se.


Marko