(VB) - CreateProcess, CreateFileMapping

4 отговора 67 прегледа
#1

(VB) - CreateProcess, CreateFileMapping

Gledam, che CreateFile mojel da sazdava Temporary failove (ne .TMP v %TEMP% ami FILE_ATTRIBUTE_TEMPORARY)...
Gledam sashto che shtial da gi napravi v pametta ili Swap faila na Windows... Ama dali e viarno se pitam...

I moje li po niakakav nachin, da se zaredi niakakav EXE fail v Byte Array i posle po niakakav si nachin da se CreateProcess ama ne da se dava FileName ami sadarjanieto na tozi Byte Array (Gledam che CreateFileMapping moje da mapne niakakav fail, koito da e v pametta a ne na diska, i da my dade niakakvo imence, ama dali tova imence moje dase polzva posle ot CreateProcess za da se "startira prilojenieto" ne znam da go eb..a)... Ako na CreateProcess my dadesh imeto na niakoi fail ot diska niama problemi, ama ne sam probval s mapnat file...

Ako niakoi znae neshto po vaprosa....Hmmmm....Shte se ychydia :)))))

Умният обича да се учи.
Глупавият - да поучава.
Отговор
в отговор на Гeoprи #2

Re: (VB) - CreateProcess, CreateFileMapping

Loader-a на Windows реално прави CreateFileMapping и MapViewOfFile на всички модули (изпълнимия файл + dll-та които му трябват) когато се създава нов процес.
работата е там че всичко това става в ново адресно пространство - различно от това на процеса който е извикал CreateProcess(). в крайна сметка не можеш да имаш два процеса който се изпълняват в едно и също адресно пространство (дори debugger-a и debugee-то са в различни).

Отговор
в отговор на _ #3

Re: (VB) - CreateProcess, CreateFileMapping

Niamah predvid da izpalniavam dva procesa v edno i sashto adresno prostranstvo (makar che ako izvikash funkcia ot niakoia DLL na windows tia izpolzva tvoeto adresno prostranstvo i tvoia stack i t.n. do kolkoto si spomniam).

Imah predvid slednoto:


Imam edin EXE fail koito e kompresiran.

Sled tova e i kodiran.

Daje moje i razshirenieto my da ne e EXE veche.

Vtora programa se startira i zarejda sadarjanieto na kodirania kompresiran EXE fail v svoita si pamet (naprimer v byte array) izpolzvaiki CreateFile s parametri FILE_ATTRIBUTE_TEMPORARY i OPEN_EXISTING i posle ReadFile (za da zaredi sadarjanieto my v byte array)

Tia dekodira kodirania fail (byte array).

Posle (eventyalno) go i razkompresira.

V tozi byte array veche e istinskia kod na EXE faila.

Pravi se CreateFileMapping sas FILE_ATTRIBUTES_TEMPORARY i pri koeto v Win32 API Help pishe che tozi fail se sazdava v pametta (ili ako tia ne stigne se polzva swap faila). Zadava se i goleminata na tozi fail i "virtyalnoto" my ime, koeto moje da ne e vav format "C:\Directory\Subdirectory\Filename.Extension" ami neshto kato "SecretApplication".

V taka sazdadenia "SecretApplication" se zapisva sadarjanieto na dekodirania (i eventyalno razkompresirania) byte array.

Sled tova s CreateProcess("SecretApplication",strCommandLineParameters,...,...,...) se startira tozi "Memory File"


No neshto mi se gybi. Kato che li porednostta triabva da e dryga. Ili ima li nachin da se napravi slednoto:

Imash fail, koito sadarja kodiranoto sadarjanie na tvoia "zashtitena" programa.
Chrez dryga programa razkodirash sadarjanieto na tozi fail i go zapisvash kato dryg file (naprimer .TMP file) i go pyskash s CreateProcess naprimer. No ako v tozi moment (sled kato tozi TMP file s istinskoto sadarjanie na programata ti e sazdaden) se izklychi kompytara, sled povtornoto my vkliychvane veche na diska shte ima razkodiranoto sadarjanie na istinskia ti EXE file ("zashtitenata" programa) i niakoi saotvetno moje da ia "crakne" :)) Ne che ako e kodiran i kompresiran ne moje no shansovete vse pak sa po-malki kato che li.

Imash li niakakva idea kak moje da se osashtestvi tova ? Toest da se izbegne sazdavaneto na tozi .TMP file na diska ami da se sazdade v pametta i da se "startira" ot tam - i ako niakoi ponechi da restartira kompytara hop - faila veche niama da go ima :))) Ako ideiata ti se stryva interesna moje da se izpolzva za po-dobra zashtita na programite ot "crack".

Shte se radvam, ako izrazish niakakvo mnenie.

Отговор
в отговор на Гeoprи #4

Re: (VB) - CreateProcess, CreateFileMapping

с други думи protection схема.

не е необходимо да имаш един процес който да декриптира друг, същата работа може да свърши и самият криптиран процес. и най-обикновената програма за компресиране на exe файлове (оставяйки ги изпълними) прави това.


последователността е следната:
1. Windows създава процеса и го стартира.
2. в началото управлението се получава от модула за декомпресия/декриптиране който разкомпресира/декриптира останалата част от програмата (може и на някоко layer-a) в паметта и след това с jmp предава управлението към същинската програма.

бележка:
паметта в която се разполага същинският код на програмата - този след разкомпресирането/декпритирането разбира се може да бъде swap-натa на диска от OS-a, или пък просто да се използва debugger или програма от типа на ProcDump и да се запише съдържанието на паметта на процеса във файл - и след това с леки поправки в PE header-a (и rebuild на IAT) на този dump да получим работоспособна програма...
очевидното решение е програмата никога да не бъде цялата разкомпресирана/декриптирана в паметта - може преди извикването на определени модули от програмата да се реализира stub - който да ги разкомпресира/декриптира като първо се затриват вече разкомпресирани/декриптирани части от нея.
друга възможност която прозира тук е че ключа за декриптиране на някои части от програмата може да се съдържа в серийния номер - така можеш да дадеш на потребителя демо версия - която той без да има сериен номер (тоест ключ) не може да превърне в пълноценна защото просто няма как да декриптира тези модули които работят само в пълната версия на програмата.


можеш да погледнеш на [линк] за програми (някои от тях със изходен код) които правят подобни неща - от "по-обикновените", които правят само компресия - ASPack, PeCompact и т.н.. (макар че те и тези стават все по 'защитаващи') - до истинските протектори като ASProtect например.

Отговор
в отговор на _ #5

Re: (VB) - CreateProcess, CreateFileMapping

Az imam niakakva takava - UPX - za kompresirane na EXE i da ostavat rabotosposobni. No tia ne "kodira" faila - moje naprimer s opcia ot komandnia red n upx.exe da "razkompresirash" exe-to do originala :)))

Shte pogledna na [линк]

Отговор