Author Topic: Uvolnění části paměti PE souboru  (Read 1268 times)

RubberDuck

  • Trial Member
  • **
  • Posts: 74
    • sec-cave.cz
Re: Uvolnění části paměti PE souboru
« Reply #15 on: January 07, 2019, 10:59:43 PM »
inac, skusal som jednu vec, ci je mozne uvolnit cast pamate procesu, ktora patri nejakej konkretnej sekcii PE. do PE sa da pridat pomocou dajme tomu lordpe nova sekcia - pridat akykolvek subor a urobit z neho sekciu PEcka. vyskusal som to (pridal som nahodny subor ako PE sekciu), a nasledne som sa pokusal uvolnit danu cast PE (pridanu sekciu zo suboru). prisiel som na to, ze klasicky pomocou VirtualFree to nejde. nechytali sa ani rozne pluginy do olly, ktore umoznuju uvolnit nejaku cast pamate (ktore to ale asi tiez robia cez VirtualFree(Ex)). cize, pravdepodobne su api windows urobene, tak aby neuvolnovali tu pamat, patriacu nejakej PE sekcii. asi jedina moznost bude uvolnovat PE sekcie pomocou driveru.

API funkci/funkce VirtualFree(Ex) můžeš použít jen na paměť alokovanou pomocí VirtualAlloc(Ex) - viz dokumentace.

Kockatá hlava

  • Junior Member
  • ***
  • Posts: 134
  • n00b
    • x86asm.net
Re: Uvolnění části paměti PE souboru
« Reply #16 on: January 08, 2019, 01:11:32 PM »
Beru zpět. Nezkoušel jsem, ale vypadá to, že Nt/ZwUnmapViewOfSection odmapuje naráz celou paměť. To mě přivedlo na myšlenku, že si můžeš napsat vlastní PE loader (jako shellcode to mělo kolem 1k2 bajtů) a prostě si postupně namapovat, co potřebuješ ;)
Z toho mám právě obavy, jestli ta Section je fakt totéž jako PE section. Musí se to vyzkoušet.

Přidávat tam PE loader (zatím) v plánu nemám :)

pr0p4g4nd4

  • [SCF]
  • Senior Member
  • ****
  • Posts: 429
Re: Uvolnění části paměti PE souboru
« Reply #17 on: January 13, 2019, 03:28:05 PM »
API funkci/funkce VirtualFree(Ex) můžeš použít jen na paměť alokovanou pomocí VirtualAlloc(Ex) - viz dokumentace.
islo mi o ine, skusal som nejake veci co mi napadli - okrem ineho som si nechal zobrazit informacie o novej
sekcii co som pridal do PE - len klasicke VirtualQuery, a tam je MEMORY_BASIC_INFORMATION struct a tam je
zaujimava polozka:

PVOID AllocationBase;         // allocation base address

AllocationBase
Points to the base address of a range of pages allocated by the VirtualAlloc function. The page pointed to by
the BaseAddress member is contained within this allocation range.

ako keby tam VirtualAlloc bolo nejako zakomponovane (podla toho popisu), skusal som sa teda pohrat s api
VirtualFree - pozeral som sa na fungovanie tejto api, ale viacmenej sa s tym nedalo nic robit (z user space),
lebo hned to islo volat kernel/r0.
Aký je rozdiel medzi mladým a starým chlapom?
Mladému behá piča po rozume, starému po byte...

Kto robí je robot, kto koktá je.. koktavý!

RubberDuck

  • Trial Member
  • **
  • Posts: 74
    • sec-cave.cz
Re: Uvolnění části paměti PE souboru
« Reply #18 on: January 13, 2019, 06:23:25 PM »
API funkci/funkce VirtualFree(Ex) můžeš použít jen na paměť alokovanou pomocí VirtualAlloc(Ex) - viz dokumentace.
islo mi o ine, skusal som nejake veci co mi napadli - okrem ineho som si nechal zobrazit informacie o novej
sekcii co som pridal do PE - len klasicke VirtualQuery, a tam je MEMORY_BASIC_INFORMATION struct a tam je
zaujimava polozka:

PVOID AllocationBase;         // allocation base address

AllocationBase
Points to the base address of a range of pages allocated by the VirtualAlloc function. The page pointed to by
the BaseAddress member is contained within this allocation range.

ako keby tam VirtualAlloc bolo nejako zakomponovane (podla toho popisu), skusal som sa teda pohrat s api
VirtualFree - pozeral som sa na fungovanie tejto api, ale viacmenej sa s tym nedalo nic robit (z user space),
lebo hned to islo volat kernel/r0.

Trošku jsem se koukal, jaké funkce jsou volány z driveru během volání VirtualAllocEx a možná by stálo za to vyzkoušet volat funkci ZwFreeVirtualMemory (https://msdn.microsoft.com/en-us/library/windows/hardware/ff566460(v=vs.85).aspx). Tam by to mohlo být nadějné. Ještě jsem přemýšlel, jestli loader během inicializace binárky nenastavuje těm jednotlivým částem paměti nějaké speciální příznaky, které by pak mohly zabránit jejich uvolnění. Jinak: https://reverseengineering.stackexchange.com/questions/8238/ntapi-calls-made-by-virtualalloc/8240#8240

pr0p4g4nd4

  • [SCF]
  • Senior Member
  • ****
  • Posts: 429
Re: Uvolnění části paměti PE souboru
« Reply #19 on: January 19, 2019, 01:11:24 PM »
Trošku jsem se koukal, jaké funkce jsou volány z driveru během volání VirtualAllocEx a možná by stálo za to vyzkoušet volat funkci ZwFreeVirtualMemory (https://msdn.microsoft.com/en-us/library/windows/hardware/ff566460(v=vs.85).aspx). Tam by to mohlo být nadějné. Ještě jsem přemýšlel, jestli loader během inicializace binárky nenastavuje těm jednotlivým částem paměti nějaké speciální příznaky, které by pak mohly zabránit jejich uvolnění. Jinak: https://reverseengineering.stackexchange.com/questions/8238/ntapi-calls-made-by-virtualalloc/8240#8240
zistit co vsetko sa deje pri alokovani a uvolnovani pamati sa bude dat asi jedine, tak ze to nahodis do
windbg/syser, lebo predpokladam ze od MS sa ziadne veci okolo interneho fungovania funkcii (servicov) z SYSTEM
SERVICE DESCRIPTOR TABLE nedozieme.

co som pozeral ZwFreeVirtualMemory (ntkrnlpa.exe) v disassembleri, tak ta funkcia nevyzerala az tak zlozito
(ale nepocitam vnorene cally v ramci funkcie, ktore tam boli obsiahnute, tie som nepozeral).
Aký je rozdiel medzi mladým a starým chlapom?
Mladému behá piča po rozume, starému po byte...

Kto robí je robot, kto koktá je.. koktavý!