ïýòðрь - Xakep Online
ïýòðрь - Xakep Online
ïýòðрь - Xakep Online
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