02.01.2015 Views

Скачать - Xakep Online

Скачать - Xakep Online

Скачать - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ÞÍÈÒÛ ÊÐÅÀÒÈÔÔ ÊÎÄÈÍÃ UNIXOID ÑÖÅÍÀ [ÂÇËÎÌ] ÈÌÏËÀÍÒ PC_ZONE FERRUM<br />

ÍÜÞÑÛ<br />

Êó÷à ñ ãîðêîé<br />

Îñíîâû heap-ïåðåïîëíåíèé<br />

ïîä Windows<br />

Heap<br />

ÅÑËÈ ÏÎÐÛÒÜÑß Â ÑÅÒÈ, ÌÎÆÍÎ ÍÀÉÒÈ ÎÃÐÎÌÍÎÅ ÊÎËÈ×ÅÑÒÂÎ ÌÀÒÅÐÈÀËÎÂ, ÎÏÈÑÛÂÀÞÙÈÕ ÐÀÇ-<br />

ËÈ×ÍÛÅ ÌÅÒÎÄÛ ÂÑÅÂÎÇÌÎÆÍÛÕ ÏÅÐÅÏÎËÍÅÍÈÉ. ÏÅÐÅÏÎËÍÅÍÈß Â ÑÒÅÊÅ, BUFFER OVERFLOW, FOR-<br />

MAT STRING — ÂÑÅ ÝÒÎ Â ÄÅÒÀËßÕ ÎÏÈÑÀÍÎ ÍÀ ÌÍÎÃÈÕ ÑÀÉÒÀÕ. ÎÄÍÀÊÎ, ÅÑËÈ ÏÐÈÑÌÎÒÐÅÒÜÑß, ÏÎ×-<br />

ÒÈ ÂÑÅ ÏÐÈÌÅÐÛ È ÎÏÈÑÀÍÈß ÏÎÏÓËßÐÍÛÕ ÌÅÒÎÄÈÊ ÏÐÈÂÅÄÅÍÛ ÈÌÅÍÍÎ ÄËß UNIX-ÑÈÑÒÅÌ. ËÅÇÒÜ<br />

 ÊÓ×Ó ÑÏÅÖÈÔÈ×ÅÑÊÈÕ ÄËß WINDOWS ÌÎÌÅÍÒΠÍÈÊÒÎ ÍÅ ÆÅËÀÅÒ. ÏÎ ÝÒÎÉ ÏÐÈ×ÈÍÅ ÌÛ ÐÅØÈËÈ<br />

ÏÐÈÃÎÒÎÂÈÒÜ ÄËß ÒÅÁß ÈÍÒÅÐÅÑÍÛÉ ÌÀÒÅÐÈÀË Î ÏÎÏÓËßÐÍÎÌ ÑÐÅÄÈ ÕÀÊÅÐÎÂ È ÂÈÐÌÅÉÊÅÐÎÂ<br />

ÏÐÈÅÌÅ, Ñ ÏÎÌÎÙÜÞ ÊÎÒÎÐÎÃÎ ÐÀÑÏÐÎÑÒÐÀÍßÅÒÑß ÄÎÁÐÀß ÏÎËÎÂÈÍÀ ÑÅÒÅÂÛÕ ×ÅÐÂÅÉ, — Î HEAP<br />

OVERFLOW | Õàøòàìîâ Àäèëü (adi1@ok.kz)<br />

ðèñóíîê 2: çàãîëîâîê<br />

ñâîáîäíîãî áëîêà<br />

ðèñóíîê 1: çàãîëîâîê áëîêà<br />

[÷òî òàêîå heap] Ïðåæäå âñåãî äàâàé ðàçáåðåìñÿ, ÷òî òàêîå heap. Ëþáîé<br />

øêîëüíèê òåáå ñêàæåò, ÷òî ñ àíãëèéñêîãî ýòî ñëîâî ïåðåâîäèòñÿ êàê «êó÷à».<br />

 íàøåì æå êîìïüþòåðíîì êîíòåêñòå ñëîâî «heap» îáîçíà÷àåò ñïåöèàëüíóþ<br />

îáëàñòü çàðåçåðâèðîâàííîãî àäðåñíîãî ïðîñòðàíñòâà, âûäåëåíèå è îñâîáîæäåíèå<br />

ïàìÿòè â êîòîðîì ðåàëèçóåòñÿ ïðè ïîìîùè ñïåöèàëüíûõ ñèñòåìíûõ<br />

ôóíêöèé. Ïðè ðàáîòå ñ êó÷åé ïðîãðàììèñòàì äîñòóïíî ñîáñòâåííîå<br />

îãðîìíîå âèðòóàëüíîå àäðåñíîå ïðîñòðàíñòâî, ïî åìêîñòè çíà÷èòåëüíî ïðåâîñõîäÿùåå<br />

îáúåì ðåàëüíîé ôèçè÷åñêîé ïàìÿòè, óñòàíîâëåííîé â êîìïüþòåðå.<br />

Âñå îñíîâíûå ôóíêöèè ïî ðàáîòå ñ êó÷åé (âûäåëåíèå, îñâîáîæäåíèå è<br />

ñîçäàíèå áëîêîâ ïàìÿòè) ðàñïîëîæåíû â ñèñòåìíîé áèáëèîòåêå ntdll.dll. Èçíà÷àëüíî<br />

êàæäîìó ïðèëîæåíèþ â Windows âûäåëÿåòñÿ îäíà ìåãàáàéòíàÿ êó-<br />

÷à, à äàëåå óæå, ïî ìåðå íåîáõîäèìîñòè,<br />

îáúåì âûäåëÿåìîé ïàìÿòè<br />

àâòîìàòè÷åñêè óâåëè÷èâàåòñÿ. Â<br />

ñâîþ î÷åðåäü, ïðèëîæåíèå ìîæåò<br />

ñîçäàâàòü ñîáñòâåííîå àäðåñíîå<br />

ïðîñòðàíñòâî ñ ïîìîùüþ ñïåöèàëüíûõ<br />

ôóíêöèé. Ïàìÿòü â êó÷å âûäåëÿåòñÿ<br />

îáëàñòÿìè, ïðè÷åì â êàæäîé îáëàñòè<br />

ìîæíî ñîçäàòü áëîêè ïàìÿòè,<br />

êîòîðûå áóäóò ðàñïîëîæåíû â ñåãìåíòàõ.<br />

Äëÿ óïðàâëåíèÿ êàæäûì òàêèì<br />

áëîêîì ñîçäàåòñÿ ñâîé ñïåöèàëüíûé<br />

çàãîëîâîê, êîòîðûé èçîáðàæåí<br />

íà ðèñóíêå 1.<br />

Çäåñü Size îáîçíà÷àåò ðàçìåð áëîêà,<br />

Previous Size — ðàçìåð ïðåäûäóùåãî<br />

áëîêà, Segment Index — èíäåêñ<br />

ñåãìåíòà, â êîòîðîì ðàñïîëîæåí<br />

áëîê, Unused — êîëè÷åñòâî íåèñïîëüçóåìûõ<br />

áàéò â áëîêå, Tag Index<br />

— èíäåêñ ìåòêè, à Flags — ôëàã áëîêà.<br />

Ôëàãè ìîãóò áûòü ñëåäóþùèìè:<br />

0x01 — HEAP_ENTRY_BUSY<br />

0x02 — HEAP_ENTRY_EXTRA_PRESENT<br />

0x04 — HEAP_ENTRY_FILL_PATTERN<br />

0x08 — HEAP_ENTRY_VIRTUAL_ALLOC<br />

0x10 — HEAP_ENTRY_LAST_ENTRY<br />

0x20 — HEAP_ENTRY_SETTABLE_FLAG1<br />

0x40 — HEAP_ENTRY_SETTABLE_FLAG2<br />

0x80 — HEAP_ENTRY_SETTABLE_FLAG3<br />

Íà íàøåì äèñêå òû íàéäåøü<br />

ïîëíûå âåðñèè ïðîãðàìì,<br />

îïèñàííûõ â ýòîé<br />

ñòàòüå, ïîäîïûòíîå ïðèëîæåíèå<br />

Server.exe äëÿ ýêñïåðèìåíòîâ<br />

è ñïëîèò äëÿ<br />

ïðîãðàììû — â îçíàêîìèòåëüíûõ<br />

öåëÿõ.<br />

Ïðè îñâîáîæäåíèè áëîêà ïàìÿòè îí ïðèíèìàåò âèä, èçîáðàæåííûé íà ðèñóíêå 2.<br />

Çäåñü Flink — óêàçàòåëü íà ñëåäóþùèé îñâîáîæäåííûé áëîê, à Blink —<br />

óêàçàòåëü íà ïðåäûäóùèé îñâîáîæäåííûé áëîê.<br />

[äðóãàÿ ðàçìåòêà] Äëÿ óïðîùåíèÿ óïðàâëåíèÿ ñâîáîäíûìè áëîêàìè<br />

èñïîëüçóåòñÿ òàêæå ðàçìåòêà ïî êîëè÷åñòâó åäèíèö âûäåëåíèÿ. Åäèíèöû<br />

ìîæíî âûñ÷èòàòü òàêèì îáðàçîì. Îáúåì êàæäîãî âûäåëÿåìîãî áëîêà ïàìÿòè<br />

ðàâåí 8. Ê ïðèìåðó, åñëè ïðèëîæåíèå âûäåëÿåò áëîê ðàçìåðîì â 64<br />

áàéòà, òîãäà åäèíèö àäðåñàöèè ïîëó÷èòñÿ 64/8 = 8. Êàæäàÿ êó÷à ñòàðòóåò<br />

ñî ñòðóêòóðû èç 128 ìàññèâîâ LIST_ENTRY, êîòîðóþ ìîæíî ïîñìîòðåòü â

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!