                                    Projekt TCP\IP VXD
                                written by CoxoC\CookieCrK

[.Historia.]

czerwiec-lipiec 2000

Podczas przegladania dokumentacji z pakietu WIN98DDK natkanlem sie na interesujaca 
dokumentacje wykorzystania TCP/IP na poziomie VxD - 'TCP/IP VxD Interface' 
Zaczalem wiec ja studiowac i szukac na sieci przykladow jej implementacji - nie udalo
mi sie jednak znalesc owych przykladow :(( Sprobowalem wiec na wlasna reke stworzyc
program, ktory by wykorzystywal ten interfejs. Jednym z pierwszych problemow jakie 
napotkalem byl problem wprowadzenia do SoftICEa nazw funkcji (np. TdiOpenAddress).
Po paru dniach dzialania udalo mi sie to wreszcie ... recznie zrobilem plik MAP 
a nastepnie wprowadzilem symbole do SICE.Nadeszla era debuggowania :) Hmm zaczalem 
wiec od proby nawiazania polaczenia FTP (uzylem Windows Commandera) ku mojej radosci
pulapki zastawione na funkcje - opisane w TCP/IP VxD Interface - zadzialaly (I tutaj
mala ciekawostka WINSOCK uzywa tego interfejsu :))

lipiec 2000

Zaczalem wiec tworzyc pierwszy programik oparty na wnioskach wyciagnietych z debuggowania.
W WIN98DDK znalazlem pliki (TDI.H , TDIINFO.H , TDISTAT.H , TDIVXD.H , NDIS.H) z definicjami
struktur i oznaczen uzywanych przez funkcje interfejsu TCP/IP VXD. Zaczalem przepisywac je 
do pliku INC (i tak powstal Mstcp.inc) . Pierwszym programem jaki napisalem byl program,
ktory nasluchiwal na polaczenia na porcie 21 i gdy przychodzila jakas paczka na port 21 
komunikowal o tym uzytkownika przez pokazanie niebieskiego ekranu z wiadomoscia o powodzeniu.
Po tym malym sukcesie zaczely sie schody, gdyz gubilem sie juz w natloku informacji i nie
potrafilem dojsc do ladu gdzie i jakie dane sa przekazywane. Zaczalem wiec pisac TCP/IP 
VXD Monitor'a . Na poczatku przejalem wszystkie API (funkcje interfejsu) szybko zauwazylem, 
ze nie jest to wystarczajace, ze musze jeszcze przejac wszystkie zdarzenia (EVENTy).

sierpien 2000

Po pobycie w gorach i nad morzem zasiadlem wreszcie do rozwazan nad projektem ;) Musialem
troszke ochlonac aby poukladalo mi sie to wszystko w glowie ;)) Bylo to dosc dobre posuniecie 
taktyczne ,gdyz w ciagu paru dni zaimplementowalem przejmowanie EVENTow :) Na poczatku, jak
zwykle, moj programik wieszal maszyne - po gruntownych analizach i prawdziwej burzy mozgu
znalazlem blad - byl to blad kompilatora MASM ... Az przytocze owy kawalek kodu :

BeginProc	TDI_EVENT_RECEIVECall
                        [...]
			PUSH DWORD PTR [EBP+RcvEvent.Indicated]
			PUSH DWORD PTR [EBP+8]  ;RcvEvent.Flags] <--- blad podczas kompilacji
			PUSH DWORD PTR [EBP+RcvEvent.ConnectionContext] 
			PUSH DWORD PTR [EAX+EVENT_HOOK_INFO.orginal_EventContext]
			CALL DWORD PTR [EAX+EVENT_HOOK_INFO.entrypoint]
			ADD ESP,4*8
                        [...]
EndProc		TDI_EVENT_RECEIVECall

Gdy sprawdzicie definicje struktury RcvEvent zobaczycie, ze pozycji Flags odpowiada 08h
Natomiast MASM kompiluje ten kod z wartoscia 14h

wrzesien 2000

Po malutkiej przerwie znow zerknalem do zrodelek TCP\IP Monitora. Po zagladnieciu 
do dokumentacji tym razem moja uwage przykula struktura _TDI_REQUEST - pozycje 
RequestContext oraz RequestNotifyObject - w pozycjach tych, program ustawia procedure 
Callback do API - i tak powstala nastepna wersja z funkcja Callbackow do API :))

pazdziernik 2000

Tym razem zaczalem od stworzenia programu MAKEMAP.VXD, ktory generuje automatycznie
plik MSTCP.MAP. Dzieli niemu mozemy szybko i sprawnie 'nauczyc' SoftICE'a nowych
symboli (jesli MAKEMAP.VXD nie tworzy pliku MAP, nalezy doinstalowac Protokol TCP\IP).

listopad 2000

Znudzil juz mi sie ten projekt ... postanawiam wiec go opublikowac ... moze ktos kiedys
skusi sie na jego kontynuacje ... jakby co to piszcie ;) To tyle ... sami ocenicie czy temat
wart jest przyslowiowej swieczki :)

                                                        CoxoC\CookieCrK
                                                        email : coxoc@cookiecrk.org