26.11.2014 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.

ÂÎÒ ÌÛ È ÕÀÊÍÓËÈ ÄÀËÅÊÎ ÍÅ ÑÀÌÛÉ ÏÐÎÑÒÎÉ CRACKME ÏÎÄ LINUX,<br />

ÏÐÎÄÅÌÎÍÑÒÐÈÐÎÂÀÂ ÁÀÇÎÂÎÞ ÒÅÕÍÈÊÓ ÂÇËÎÌÀ.<br />

èíñòðóêöèè JNZ. Êàê ñëåäóåò èç ðóêîâîäñòâà Intel, èíñòðóêöèè JZ ñîîòâåòñòâóåò<br />

îïêîä 74h. Íàáèðàåì â êàëüêóëÿòîðå 74h ^ F1h è ïîëó÷àåì<br />

85h. Ýòî è áóäåò çàøèôðîâàííîå çíà÷åíèå îïêîäà JZ. Íàæèìàåì<br />

äëÿ àêòèâàöèè ðåæèìà ðåäàêòèðîâàíèÿ, çàïèñûâàåì íà ìåñòî<br />

84h çíà÷åíèå 85h è íàæèìàåì , ÷òîáû ñîõðàíèòü ïðàâêó íà äèñê.<br />

Êàê âèäíî, ïîñëå õàêà èçìåíèëñÿ âñåãî îäèí áèò è ýòèì áèòîì îêàçàëñÿ<br />

ìëàäøèé áèò ÷èñëà: 85h (10000101) --> 84h (10000100). Ýòî ïîòîìó,<br />

÷òî ñàìè îïêîäû 74h (1110100) è 75h (1110101) ðàçëè÷àþòñÿ âñåãî<br />

ëèøü ìëàäøèì áèòîì, à XOR — ýòî áèòîâàÿ îïåðàöèÿ! Äðóãèìè ñëîâàìè,<br />

åñëè øèôðîâàíèå ïðîèçâîäèòñÿ ïóòåì íàëîæåíèÿ XOR, òî ÷òîáû<br />

ïðåâðàòèòü JZ â JNZ (èëè íàîáîðîò), íåçàâèñèìî îò êëþ÷à øèôðîâàíèÿ,<br />

äîñòàòî÷íî èíâåðòèðîâàòü ìëàäøèé áèò øèôðîòåêñòà! È íå íóæíî<br />

âîçèòüñÿ ñî âñåìè ýòèìè ðàñ÷åòàìè! Âîçüìè ñåáå ýòîò òðþê íà çàìåòêó.<br />

Íàì îí åùå ïðèãîäèòñÿ. Âûõîäèì èç ðåäàêòîðà è ñ çàìèðàíèåì<br />

ñåðäöà çàïóñêàåì timy-crackme. Óâû! Îí íå çàïóñêàåòñÿ! Òî åñòü çàïóñêàåòñÿ,<br />

êîíå÷íî, íî îòêàçûâàåòñÿ ïðèíèìàòü ïàðîëü. Ïî÷åìó?<br />

Âîçâðàùàåìñÿ ê ñòðîêå 002000CFh (òîé ñàìîé, â êîòîðîé ìû èñïðàâèëè<br />

óñëîâíûé ïåðåõîä) è ïðîêðó÷èâàåì ýêðàí äèçàññåìáëåðà ââåðõ<br />

äî òåõ ïîð, ïîêà íå âñòðåòèì ñëåäóþùóþ ïåðåêðåñòíóþ ññûëêó<br />

start+AFj, âåäóùóþ ê ñòðîêå 2000ACh. Ïîñìîòðèì, ÷òî ó íàñ òàì?<br />

Ìèíà ñ äåòîíàòîðîì<br />

LOAD:002000AC call loc_2002C9 ; ïðîâåðêà ïàðîëÿ è ñâîåãî CRC<br />

LOAD:002000B1 xor ebx,dword_200296 ; àíàëèç ðåçóëüòàòîâ<br />

LOAD:002000B7 jz short loc_2000CC ; âñå îê<br />

LOAD:002000B9<br />

LOAD:002000B9 loc_2000B9: ; CODE XREF: start+C7?j<br />

LOAD:002000B9 mov ecx,offset aWrongPasswordS;"\n Wrong password, sorry"<br />

Îòîðâàòü ìîé õâîñò! Åùå îäíà ïðîâåðêà è åùå îäèí óñëîâíûé ïåðåõîä,<br />

ðàñïîëîæåííûé ïî àäðåñó 2000B7h. Êàê âèäíî, îí àíàëèçèðóåò<br />

çíà÷åíèå, âîçâðàùåííîå ôóíêöèåé loc_2002C9, ñðàâíèâàÿ åãî ñ<br />

äâîéíûì ñëîâîì dword_200296, è åñëè loc_2002C9() ^ dword_200296<br />

!= 0, óñëîâíûé ïåðåõîä íå âûïîëíÿåòñÿ, è óïðàâëåíèå ïîëó÷àåò<br />

ïîäïðîãðàììà, âûâîäÿùàÿ ðóãàòåëüíîå ñîîáùåíèå íà ýêðàí. ×òî äåëàåò<br />

ôóíêöèÿ loc_2002C9? Äà êàêàÿ íàì ðàçíèöà! Ñóäÿ ïî âñåìó, çàíèìàåòñÿ<br />

ïðîâåðêîé öåëîñòíîñòè êîäà, êîòîðóþ íàì îáåùàë ñîçäàòåëü<br />

êðýêìèñà. ×òîáû åå îáåçâðåäèòü, ìû äîëæíû çàìåíèòü JZ íà<br />

JNZ, èíâåðòèðîâàâ ìëàäøèé áèò áàéòà, ðàñïîëîæåííîãî ïî àäðåñó<br />

2000B7h. Âû÷èòàÿ áàçîâûé âèðòóàëüíûé àäðåñ ñåãìåíòà, ìû ïîëó÷èì<br />

ôèçè÷åñêîå ñìåùåíèå, ïî êîòîðîìó ýòîò áàéò ðàñïîëàãàåòñÿ â ELFôàéëå<br />

(â íàøåì ñëó÷àå îíî ðàâíî B7h), ãäå íàõîäèòñÿ áàéò 85h. Èíâåðòèðóåì<br />

ìëàäøèé áèò, ïðåâðàùàÿ åãî â 84h, ñîõðàíÿåì èçìåíåíèÿ,<br />

âûõîäèì èç HTE, çàïóñêàåì timy-crackme. Êàê ýòî òàê îïÿòü íå<br />

çàïóñêàåòñÿ?! Âîò ÷òî çíà÷èò õà÷èòü âñëåïóþ!<br />

Âîçâðàùàåìñÿ ê íàøåìó ïåðâîìó óñëîâíîìó ïåðåõîäó 2000CFh è<br />

ïûòàåìñÿ ïðîàíàëèçèðîâàòü, ÷òî èìåííî îí ïðîâåðÿåò. Ìû âèäèì,<br />

÷òî ñ âåðøèíû ñòåêà ñòÿãèâàåòñÿ äâîéíîå ñëîâî è ïðîâåðÿåòñÿ íà<br />

ðàâåíñòâî íóëþ. À êòî åãî òóäà ïîëîæèë?! Ïåðåõîäèì ïî ïåðåêðåñòíîé<br />

ññûëêå íàâåðõ è âèäèì, ÷òî â ñòðîêå 20009Ch íà âåðøèíó ñòåêà<br />

çàáðàñûâàåòñÿ ñîäåðæèìîå ðåãèñòðà EBX.<br />

Òî áûë áèêôîðäîâ øíóð, à ýòî — äèíàìèò<br />

LOAD:0020009C loc_20009C: ; CODE XREF: start:loc_200099?j<br />

LOAD:0020009C push ebx ; ñîõðàíèòü ebx â ñòåêå<br />

// À ÷åìó ðàâåí ñàì EBX? Îòâåò äàåò î÷åðåäíàÿ ïåðåêðåñòíàÿ ññûëêà, âåäóùàÿ íàñ<br />

ê ñëåäóþùåìó êîäó:<br />

LOAD:0020007B mov edx,1<br />

LOAD:00200080 int 80h ; Linux — sys_ptrace<br />

LOAD:00200082 sub ebx,eax ; àíàëèç âîçâðàùåííîãî çíà÷åíèÿ<br />

LOAD:00200084 test eax, eax ; îòëàä÷èê îáíàðóæåí?<br />

LOAD:00200086 jz short loc_200099 ; îòëàä÷èêà íåò, âñå ÷èñòî<br />

Âîò îíî! Ñèñòåìíûé âûçîâ sys_ptrace! Îêàçûâàåòñÿ, ÷òî íàø óñëîâíûé<br />

ïåðåõîä â ñòðîêå 2000CFh ïðîâåðÿë ñîâñåì íå ïàðîëü, à... íàëè÷èå îòëàä÷èêà<br />

(ïðîãðàììà, êîòîðàÿ óæå îòëàæèâàåòñÿ, íå ìîæåò âûçûâàòü<br />

ptrace. Ñêàçàííîå, ðàçóìååòñÿ, ðàñïðîñòðàíÿåòñÿ òîëüêî íà òå îòëàä÷èêè,<br />

÷òî ðàáîòàþò ÷åðåç ptrace). Íî ýòî íå ñîâñåì òàê. Òî÷íåå, ñîâñåì íå<br />

òàê. Êàê òîëüêî îòëàä÷èê íàïàðûâàåòñÿ íà óñëîâíûé ïåðåõîä 200086h,<br />

íà ýêðàí âûâîäèòñÿ ðàçî÷àðîâûâàþùåå ñîîáùåíèå Sorry but the process<br />

seems to be trace («èçâèíèòå, íî ïðîöåññ, ïîõîæå, òðàññèðóåòñÿ»), è äî<br />

«íàøåãî» óñëîâíîãî ïåðåõîäà 2000CFh äåëî ïðîñòî íå äîõîäèò!<br />

Íà ñàìîì äåëå ñîçäàòåëü êðýêìèñà ïðèìåíèë äîâîëüíî õèòðûé<br />

òðþê. Óñëîâíûé ïåðåõîä 2000CFh íå êîíòðîëèðóåò íè ïðàâèëüíîñòü<br />

ïàðîëÿ, íè íàëè÷èå îòëàä÷èêà. Îí âñòàâëåí ïðîñòî êàê ïðèìàíêà.<br />

Ìèíà-ëîâóøêà. Êòî ïûòàåòñÿ åãî õàêíóòü, òîò âçðûâàåòñÿ.<br />

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

âñåãî îäèí óñëîâíûé ïåðåõîä ïî àäðåñó 2000B7h. Óñëîâíûé ïåðåõîä<br />

2000CFh òðîãàòü íå íóæíî! Ïîñêîëüêó ìû óæå òðîíóëè åãî, íàì<br />

íóæíî âåðíóòü âñå íà ìåñòî, çàìåíèâ õàêíóòîå 85h íà 84h. Ñîõðàíÿåì<br />

èçìåíåíèÿ ïî è âûõîäèì èç hex-ðåäàêòîðà.<br />

Äà! Ýòî ðàáîòàåò! Ó íàñ ïîëó÷èëîñü! Ïðîãðàììà âîñïðèíèìàåò ëþáûå<br />

ââîäèìûå ïàðîëè êàê ïðàâèëüíûå, âûâîäÿ ïîáåäîíîñíóþ íàäïèñü<br />

«Success! Congratulations» íà ýêðàí!<br />

ÇÀÊËÞ×ÅÍÈÅ<br />

Âîò ìû è õàêíóëè äàëåêî íå ñàìûé ïðîñòîé crackme ïîä Linux, ïðîäåìîíñòðèðîâàâ<br />

áàçîâîþ òåõíèêó âçëîìà. Êîíå÷íî, ýòî ãðÿçíûé âçëîì,<br />

òàêæå èìåíóåìûé bit-hack'îì, è òóò ñîâåðøåííî íå÷åì ãîðäèòüñÿ.<br />

Áîëåå àêêóðàòíûå õàêåðû àíàëèçèðóþò àëãîðèòì ïðîâåðêè ïàðîëÿ<br />

è ïèøóò êåéãåí, ãåíåðèðóþùèé ïîäõîäÿùèå ïàðîëè/ñåðèéíûå íîìåðà.<br />

Íî ýòî ñëîæíàÿ îïåðàöèÿ, êîòîðóþ òðóäíî èçëîæèòü â îäíîé ñòàòüå.<br />

BINARY YOUR’S z<br />

«ñêâîçíàÿ» ïðàâêà çàøèôðîâàííîãî êîäà â HTE áåç åãî ðàñøèôðîâêè<br />

âçëîì çàâåðøåí!<br />

XÀÊÅÐ 01 /85/ 06 113

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

Saved successfully!

Ooh no, something went wrong!