Windows 98°ÊºA³sµ²¨ç¦¡®wÄdºI§Þ¥©
ùþÄdºI WinSock ?
«e¤£¤[,¹êÅç«Çªº¾Çªø¹J¨ì¤@Ó°ÝÃD,¥ĻƱæ¥i¥HÄdºI¨t²Î¤¤¦³ÃöWinSock send() ¤Î recv() ªº©I¥s,¤]´N¬O»¡¦bÀ³¥Îµ{¦¡©I¥sWSOCK32.DLLªº¨ç¦¡¥H«e,¥ý§â±±¨îÅv¥æ¨ì§Ṳ́â¸Ì,µ¥§Ú̳B²z§¹¥H«á,¦AÅýì¨Ó©I¥sªº°Ê§@¥i¥HÄ~Äò°õ¦æ,¦b§ä¤F¤@¨Ç¬ÛÃö®ÑÄy«á,¦ü¥G¨Ã¨S¦³¤@Ó¥i¥H¦X¥G¥LÌn¨Dªº¸Ñ¨M¤èªk,©ó¬O¬°¤F¸Ñ¨M³oÓ°ÝÃD,§Ú°Ñ¦Ò¤F¤@¨Ç¥Ø«e§Ú©Ò¥i¥H¨ú±oªº¸ê®Æ
(1) Run
PC 39´Á Win32 Spy ©M DBWIN,«J«T³Ç
(2) Windows
95 System Programming Secrects ,Matt Pietrek
(3) Advanced
Windows,Jeffrey Richter
º¥ý,§Ú̥تº¬OnÅý¨t²Î¤¤©Ò¦³¥Î¨ìWSOCK32.DLL send() ¤Î recv() ªº¨ç¦¡¥i¥H³z¹L§ÚÌ¥[¤u¤§«á¦AÅý¥¦¥h§@¥¦¸Ó°µªº¨Æ,¹ï©ó¥Î¨ìWinSockªºÀ³¥Îµ{¦¡¹³FTP,WWWÂsÄý¾¹ªºÀ³¥Î³nÅé¥i¥H¦b¤£¥²×§ïì©l½Xªº±¡ªp¤U¥¿±`¹B§@
©Ò¹J¨ìªº²Ä¤@Ó°ÝÃD,«K¬OWin32¨t²Î¤¤¦UÓProcess¤ÀÂ÷¦ì§}ªÅ¶¡ªº³]p,¨Ï§Ú̵LªkÅý¥t¤@ÓProcess¥i¥HJmp¨ì§Ú̳oÓ¦æµ{¤¤¨Ó°õ¦æ,¦p¹Ï(¤@),¦bWindows 9x¤¤2GB¥H¤UªºªÅ¶¡¬°¨CÓ¦æµ{©Ò¨p¦³ªº,¦pªG§Ṳ́µ¤Ñ¦P®É¨Ï¥ÎAµ{¦¡»PBµ{¦¡³£¥Î¨ì¤FWSOCK32.DLLªº¨ç¦¡,¹ïµ{¦¡A¤ÎBµêÀÀ°O¾ÐÅéªÅ¶¡¨Ó»¡,¥¦Ì³£»{¬°¥¦ÌªºªÅ¶¡¤¤¦s¦bµÛ¥¦Ì¦Û¤vªºWSOCK32.DLL,¦p¹Ï(¤@)©Ò¥Ü,WSOCK32.DLL¦bLoad¶i°O¾ÐÅ餧«á,¹ê»Ú¤W¬O¦s¦b2GBªºªÅ¶¡¥H¤Uªº,¦pªGµ{¦¡A¸ÕµÛ³z¹LWriteProcessMemory¥h×§ïWSOCK32.DLL,¹ê»Ú¤W·|§ó°Ê¨ìªº¥u¦³µ{¦¡A©Ò¦bªÅ¶¡¤¤ªºWSOCK32.DLL,¹ïµ{¦¡B¨Ó»¡¬O¨S¦³¼vÅTªº,¥H§Úªº¹q¸£¨Ó»¡,·í§Ú±Ò°Ê¨âӨϥÎWSOCK32.DLLªºµ{¦¡«á,WSOCK32.DLL³£·|¦ì©ó0x785C0000 ªº¦ì§},¨Æ¹ê¤W¦¹®É¨âÓÀ³¥Îµ{¦¡¬O¦b2GB¦ì§}ªÅ¶¡¥H¤U³z¹LWindows°O¾ÐÅéºÞ²z¾÷¨î¨Ó¦@¨É³oÓDLL©Ò¦s¦bªº°O¾ÐÅé,·íµ{¦¡A¹ïDLL¼g¤J®É,«h·|³z¹LCopy-On-Write,¬°µ{¦¡A½Æ»s¤@ÓDLLªºªÅ¶¡,©Ò¥H´Nºâ§ÚÌ
¦bµ{¦¡A¤¤×§ï¤FWSOCK32.DLL¹ïµ{¦¡B¨Ó»¡«o¤@ÂI¼vÅT³£¨S¦³,§Ú¤]´¿·Q¹L³z¹L×§ïWSOCK32.DLLÀÉÀYªºImage BaseªºÈ,¨Ï¥¦¥i¥H©ñ¨ì°O¾ÐÅ骺2GB¥H¤W,¥Ñ¦U¦æµ{¨Ó¦@¨É¦P¤@ÓDLL,¤£¹L«á¨Ó¸ÕÅçÃÒ©ú³o¨Ã¤£¬O¤@Ó¥i¦æªº¦n¤èªk

ùþ¹Ï(¤@)
¡½ ±NDLL©ñ¤J2 GB¥H¤W
¦b¸g¹L¤@µf«ä¦Ò«á,§Ú¨M©w¼g¤@ÓDLL©ñ¨ì2GBªºªÅ¶¡,¥Ñ¨CÓ¦æµ{¨Ó¦@¨É³oÓDLL,¥i¬O§Ú¸Ó¦p¦ó±oª¾¨t²Î¥Ø«e¦³¨º¨ÇªºProcess¦³¥Î¨ìWSOCK32.DLL©O?¦b§ä´M¤FMSDN,¤Î¤@¨Ç°Ñ¦Ò®ÑÄy«á,§Ú¨M©w³z¹LTOOLHELP¨ç¦¡(¥ÑKERNEL32.DLL©Òexport¥X¨Óªº,¦bMSDN¤¤¦³³\¦h¥i°Ñ¦Òªº¸ê°T)¨Ó§¹¦¨³o¶µ¤u§@,¥H¤U¦C¥X³¡¥÷¨ç¦¡
HANDLE WINAPI CreateToolhelp32Snapshot(DWORD
dwFlags,DWORD h32ProcessID);
BOOL WINAPI Process32First(HANDLE
hSnapshot,LPPROCESSENTRY32 lppe);
BOOL WINAPI Process32Next(HANDLE
hSnapshot,LPPROCESSENTRY32 lppe);
BOOL WINAPI Module32First(HANDLE
hSnapshot,LPMODULEENTRY32 lpme);
BOOL WINAPI Module32Next(HANDLE
hSnapshot,LPMODULEENTRY32 lpme);
¦ý¸U¨ÆÑ³Æ«á,§Ú¶}©l¥h«ä¦Ò¦p¦ó¥h¹ï¨t²Î¤¤ªº¦æµ{°µ¤@Ó¤â³N,§Ú©Ò·Q¨ìªº²Ä¤@Ó¤èªk«K¬O¥h×§ï¨CÓ¦æµ{ªºImport Table,¦p¤U¹Ï(¤G),§Ú̳z¹LSPYSOCK.EXE§âSPYDLL.DLL¸ü¤J¨ì°O¾ÐÅ骺2GB¥H¤WªºªÅ¶¡(¸m¤J2GB¥H¤WªÅ¶¡ªº¤èªk,¥i¥H°Ñ·ÓWindows 95 System Programming Secrects Chap6¤¤ªº½d¨Òµ{¦¡)
SPYSOCK.EXE±µµÛ³z¹LTOOLHELP¨ç¦¡¨úªº¨CÓModuleªº°ò©³¦ì§},¦³¤F°ò©³¦ì§},§ÚÌ¥i¥HÂǦ¹¨ú±o.idata°ÏªºRVA¦ì§},¶i¦Ó§ä¥X¬O§_¦³¦bµ{¦¡¤¤¨Ï¥Î¨ìWSOCK32.DLL,Y¦³§ÚÌ«K×§ïImport Table ¤¤«ü¦Vsend() ¤Î recv()¨ç¦¡ªº¦ì§},§â¥¦Ì«ü¦V§ÚÌ©ñ¦b2GB¥H¤W¦ì§}ªÅ¶¡ªºSPYDLL.DLL¹ïÀ³ªº³B²z¨ç¦¡,·í³B²z¨ç¦¡§â§ÚÌ©Òn¥[¤uªº°Ê§@³B²z§¹«á,SPYDLL.DLL¦A³z¹LGetModuleHandle("wsock32.dll") ±o¨ì ECHOAC32.EXE ¤¤WSOCK32.DLL©Ò¦bªº°ò©³¦ì§},¦¹®Énª`·Nªº¬O,¥Ñ©ó¤ÀÂ÷¦ì§}ªÅ¶¡ªºÃö«Y¦¹®É©Ò±o¨ìªº¦ì§}¬OECHOAC32.EXE¤¤ªºWSOCK32.DLLªº¦ì§},¨Ã«D§âSPYDLL.DLL¸ü¤J¨ì°O¾ÐÅ骺SPYSOCK.EXE¤¤ªºWSOCK32.DLLªº¦ì§}(·íµM,¦¹¨Ò¤¤SPYSOCK.EXE¨Ã¥¼¨Ï¥ÎWSOCK32.DLL¤¤ªº¥ô¦ó¨ç¦¡),¦³¤FECHOAC32.EXEªº°ò©³¦ì§}«á,§ÚÌ«K¥i¥Hºâ¥Xsend() ¤Î recv()¦b¸Ó¦æµ{¤¤ªº¦ì§},³z¹L¦p¤Uªº°Ê§@
_send=(HANDLE (WINAPI *) (SOCKET s, const char FAR * buf, int len, int flags))GetProcAddress(ori_wsock32,"send");
_send(s,buf,len,flags);
§ÚÌ«K¥i§â쥻send()¨ç¦¡ªº°Ê§@µ¹§¹¦¨¤F,³Ì«á¦A§â³B²z¨ç¦¡µ¹µ²§ô«á§Y¥iªð¦^ì©I¥s¨ç¦¡,¦p¦¹«h§¹¦¨¤F¤@ÓÄdºIªº°Ê§@,¬ÛÃöì©l½X§Ú©ñ¦bhttp://www.sparc14.cc.ncku.edu.tw/e9484110(¼È©wªº¡K^_^)

ùþ¹Ï(¤G)
ùþ§¹¦¨¤F¶Ü?
·íŪªÌÌ´ú¸Õ¹L¥H¤W³o½d¨Ò«á·|µo²{,¬°¦ó¹ï¹³NETTERM³oÃþªº³nÅéµo´§¤£¤F§@¥Î©O?¦]¬°³oÃþªº³nÅé¬O±Ä¥Î°ÊºALoad WSOCK32.DLL,¦A°õ¦æ¸ÓDLLªº¨ç¦¡,©Ò¥H§Ú̦b¥¦ÌªºImport Table¤¤µLªkµo²{WSOCK32.DLLªºÂܸñ,¦]¦¹¸É±Ïªº¤èªkÁÙ¦³¤@ºØ,´N¬O¬JµMn°ÊºA¸ü¤JWSOCK32.DLL,«h¥¦¥²©w·|³z¹LLoadLibrary(¡§WSOCK32.DLL¡¨) & GetProcAddress(),©Ò¥H§ÚÌ¥i¥H¦bImport Table¤¤§â³o¨âÓFunction¤]¤@¨ÖÄd¤U,¦b¹ïÀ³ªº³B²z¨ç¦¡¤¤§Ú̦A¨ÓÀˬd¬O§_¦³¥Î¨ìWSOCK32.DLLªº¨ç¦¡,¦pªG¦³§Ṳ́]¥i¥H³z¹LÄdGetProcAddress()¨ÓÀˬdsend()¤Îrecv()©Ò¶Ç¦^ªº°O¾ÐÅé¦ì§}¬°¦ó,§â¸ÓÅܼƦì§}Àx¦s°_¨Ó,¨Ã«ü¦V§Ú̪º³B²z¨ç¦¡,¦p¦¹¥ç¥i°µ¬°¤@ӸɱϪº¤èªk,¤£¹L,§Ú±N¦b¤U¤@¸`¤¶²Ð¥t¤@ºØ¤âªk,¤]¥i¥H²Å¦X§Ú̪º¥Øªº,¨Ñ¦U¦ì°µ¤@Ó¼g§@¤Wªº°Ñ¦Ò
ùþ°£¦¹¤§¥~
§Ú¨Ã¨S¦³±Ä¥Î¤Wzªº²Ä¤GºØ¤èªk¨Ó¸É±ÏµLªk¹ï°ÊºA¨Ï¥ÎDLLÄdºIªº°ÝÃD,§Ú©Ò±Ä¥Îªº¤èªk¬°³z¹L×§ïDLL¨ç¦¡«e´XÓByte¨Ó¸õ¨ì§Úªº³B²z¨ç¦¡,¦ý¦¹ºØ¤èªk¦³¤@Ó¹ú¯f,´N¬O¦pªG¸Ó¨ç¦¡¤p©ó§ÚÌ©Òn¸m¤JCodeªº¤j¤p,¨º¼Ë´N·|µo¥Í¤£¥i¹w´Áªº«áªG¤F,©Ò©¯,¦b§ÚÌ©ÒnÄdªºsend() ¤Î recv()¨Ó»¡,³£¤j©ó§Ú©Òn¸m¤Jªº7 bytes,©Ò¥H³o³¡¥÷ÁÙºâ¬O¥i¥H¦wµM´ç¹L
¦p¤U¹Ï¤T,¬°§ÚÌ©I¥s Func(int A,int B,int C) ¤@Ө㦳¤TӤ޼ƪº¨ç¦¡®É
°ïÅ|¤ºªº±¡ªp,¦Ó¦¹¨ç¦¡¹ï©I¥sªÌ¨Ó»¡·|²£¥Í¦p¤UªºAssembly Code
Push C
Push B
Push A
Call Func¡¦s Address

§ÚÌ¥i¥H³z¹L
[EBP+0x10],[EBP+0x0C],[EBP+0x08]¦b°ïÅ|¤¤¨ú±oC,B,A¤TӤ޼ƪºÈ¨Ó¥[¥H³B²z
ùþ¹Ï(¤T)
¦p¤U¹Ï¥|,°²¦pSend¨ç¦¡¦@¦³A,B,C¤TÓ¤Þ¼Æ,§Ų̬́O³z¹LTOOLHELPªº¨ç¦¡¨ÓÀ°§U§Ú̧ä¨ì¦b¨ºÓ¦æµ{¤¤¦³¨Ï¥Î¨ìwsock32.dll,¦pªG§ä¨ì¤F,«h¨Ì¥H¤Uªº¨BÆJ¨Ó¥[¥H³B²z
<Step 0> SPYSOCK.EXE³z¹LWriteProcessMemory§â7 BytesªºCode¦p¤U
MOV EAX,spy_Send//spy_Send«ü¦V§Ú̸m©ó2GB¥H¤W°O¾ÐÅé³B²z¨ç¦¡ªº¦ì§}
Call EAX
¶ñ¤JSend ¨ç¦¡ªº«eºÝ
<Step 1> «h¬O·íProcess°õ¦æ¨ì¨ç¦¡Send ®É,«K·|¸õ¨ì§Ú̹ïÀ³ªº³B²z¨ç¦¡<Step 2> ¦b³B²z¨ç¦¡°õ¦æ§¹¹ïÀ³ªº³B²z°Ê§@«á,§â¨ç¦¡Send«e7 BytesÁÙ쬰쥻¥¼¸g×§ï¹Lªº¼Ë¤l,¦bªð¦^Send¨ç¦¡«á¥H«KÄ~Äò§â¥¦ì¥»ªº¤u§@µ¹§¹¦¨,¨Ã×§ïSend¨ç¦¡ªº°ïÅ|,¥H¨ÏSend¨ç¦¡¦bµ²§ô³B²zªºµ{§Ç«á,¦bReturn¦^ì©I¥sªºÀ³¥Îµ{¦¡«e,¥i¥H¥ý¸õ¨ì§ÚÌrepair_send¨ç¦¡¨Ó,¦A§âSend¨ç¦¡ªº«e7Bytesµ¹´«¦¨
MOV EAX,spy_Send//spy_Send«ü¦V§Ú̸m©ó2GB¥H¤W°O¾ÐÅé³B²z¨ç¦¡ªº¦ì§}
Call EAX
¦p¦¹,¦b¤U¤@¦¸¤S°õ¦æ¨ìSend¨ç¦¡®É,¨ÌÂÂ¥i¥H¦p¦¹ªº¥ý³z¹L§Ų́ӳB²z
<Step 3>·í¨ç¦¡Send°õ¦æ§¹ì¥»n°µªº¤u§@«á,¦bReturn ®É,·|¥ý¸õ¨ìrepair_send ©Ò¦bªº¦ì§},repair_sendt³d§â¨ç¦¡Sendªº«e7 Bytes¦Aק令 Step 0 ªº¼Ë¤l,¨Ï¤U¤@¦¸°õ¦æ¨ì¨ç¦¡Send®É,¥i¥H¦A³z¹L§Ú̩ҳ]¸mªº¹ïÀ³³B²z¨ç¦¡
<Step 5> ¦b°õ¦æ§¹×¸Éªº°Ê§@«á,«K¥Ñrepair_send¨ç¦¡t³dªð¦^¨ç¦¡Send©ÒnReturn¦^¥hªºì©I¥sÀ³¥Îµ{¦¡

ùþ¹Ï(¥|)
¦p¤U¹Ï¤
<Step 0> SPYSOCK.EXE¦bµo²{NETTERM.EXE©Ò¦bProcess¤¤¦³¨Ï¥Î¨ì WSOCK32.DLL®É,³z¹LWriteProcessMemory¥h×§ï¨ç¦¡Sendªº«e7 Bytes
<Step 1> ·íNETTERM.EXE¨Ï¥ÎWSOCK32.DLLªº¨ç¦¡Send
<Step 2> ·|¥ý°õ¦æ§Ú̦bSPYDLL.DLL¤¤ªº³B²z¨ç¦¡
<Step 3> °õ¦æ§¹§ÚÌ©Òn³B²zªº°Ê§@«á,«K¸õ¦^ì¨ç¦¡Send(¦¹®É«eSend«e7 Bytes¤w³Q¸m´«¦^ì¨Óªº¼Ë¤l,¨Ã×§ïSendªºªð¦^¦ì§})
<Step 4> ¨ç¦¡Send¦b°õ¦æµ²§ô«á,·|¸õ¨ìrepair_send,¨Ó§â¨ç¦¡Send«e7 Bytes´«¦¨Step 0¤¤ªº¼Ë¤l,¨Ï¤U¤@¦¸¦A©I¥s¨ç¦¡Send®É¥i¥H¨Ì¦¹¬yµ{¦A«×µo¥Í§@¥Î
<Step 5> °Ê§@µ²§ô«á,¥Ñrepair_send¨ç¦¡,ªð¦^Sendªº©I¥sºÝÀ³¥Îµ{¦¡
¥»µ{¦¡ì©l½X§Ú©ñ¦bhttp://www.sparc14.cc.ncku.edu.tw/e9484110(¼È©wªº¡K^_^)

ùþ¹Ï(¤)
ùþWindows 98ªºWSOCK32.DLL
¦p¤U¹Ï¤»,
<Step 1>±oª¾LoadLibraryAªº¤Þ¼Æ¬°ws2_32.dll,ÂǦ¹§âws2_32.dll¸ü¤J¨ì¸Ó¦æµ{¤§¤¤
<Step 2>±oª¾LoadLibraryAªº¤Þ¼Æ¬°mswsock.dllÂǦ¹§âmswsock.dll¸ü¤J¨ì¸Ó¦æµ{¤§¤¤
<Step 3>±oª¾wsock32.dllªºgethostbyname¨ç¦¡·|³z¹LGetProcAddress¨ú±ows2_32.dll¤¤¹ïÀ³ªº¨ç¦¡¨Ó°Ê§@
<Step 4>±oª¾wsock32.dllªºEnumProtocolsA¨ç¦¡·|³z¹LGetProcAddress¨ú±omswsock.dll¤¤¹ïÀ³ªº¨ç¦¡¨Ó°Ê§@

ùþ¹Ï(¤»)
785C132C¸Ó¦æ¤§¤Ï²Õͬ° MOV [785C6180],EAX ,§Y§âLoadLibraryA(¡§ws2_32.dll¡¨)¶Ç¦^ªºÈ¦s¦b¦ì©ó°O¾ÐÅé785C6180ªº¦ì¸m,¦P²z¦b785C1335¸Ó¦æ,§ÚÌ¥i¥H¬Ý¨ì LoadLibraryA(¡§mswsock.dll¡¨)¶Ç¦^Ȧs¦b°O¾ÐÅé785C6184ªº¦ì¸m,±µµÛ§ÚÌ¥i¥H¬Ý¨ì
785C1810 PUSH 785C63C0
785C1815 PUSH DWORD PTR [785C6180]
785C181B CALL DWORD PTR GetProcAddressªº¦ì§}
¨ä¤¤785C63C0¬Ogethostbyname¸Ó¦r¦êªº¦ì§},¦Ó785C6180¦ì§}«h¦s©ñµÛLoadLibraryA(¡§ws2_32.dll¡¨)¶Ç¦^È,¦pªG§A¦bHelp¤¤¬d¸ßGetProcAddress¨ç¦¡ªº¥Îªk,¥i¥H±o¨ì¦p¤U¸ê®Æ
GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function );
¦]¦¹,§ÚÌ¥i¥HÂǦ¹±oª¾·í§Ú̦bwsock32.dll¤¤¨Ï¥Îgethostbynameªº¨ç¦¡®É,¥¦·|§â¤u§@¦AÂ൹ws2_32.dll¤¤ªºgethostbyname¨ç¦¡¨Ó°õ¦æ
¦P²z,¥Ñ
785C1D95 PUSH 785C65AC
785C1D9A PUSH DWORD PTR [785C6184]
785C1DA0 CALL DWORD PTR GetProcAddressªº¦ì§}
785C65AC¬OEnumProtocolsA¸Ó¦r¦êªº¦ì§}, 785C6184¦ì§}¦s©ñµÛLoadLibraryA(¡§mswsock.dll¡¨)¶Ç¦^È,¦]¦¹§Ṳ́£Ãøµo²{¦b¦¹wsock32.dllªº¨ç¦¡EnumProtocolsA¬O³z¹Lmswsock.dll¤¤ªºEnumProtocolsA©Ò§¹¦¨ªº
¥Ñ³o¨Ç¤Ï²ÕĶªº¸ê®Æ¤¤,§Ú̵o²{¦bWindows 98¤¤wsock32.dll¬OѳƤFÂà¹Bªº¤u§@,¨ä¹ê¯u¥¿³B²zªº¤u§@¬O¸¨¦bws2_32.dll¤Îmswsock.dll¤¤,§Ú·Q¦p¦¹ªº¦w±Æ¥DnÀ³¸Ó¬O¬°¤F¹ï¦³À³¥Îµ{¦¡ªº¬Û®e©Ê,¦bWindows98¤¤¯u¥¿¤u§@ªº¬O·sª©ªºWinSock 2(³z¹Lws2_32.dll),¦Ó¨Ï¥Î¤§«eª©¥»ªºWinSock 1.1(³z¹Lwsock32.dll)ªºÀ³¥Îµ{¦¡«h¥i¥H¦b¤£¸g×§ïì©l½Xªº±¡ªp¤U,³z¹Lwsock32.dllªºÂà¹B¨Ó¨É¨ü¨ì·sªºª©¥»©Ò±a¨Óªº¦n³B,·íµM¦pªGª½±µ³z¹Lws2_32.dll¨Ó¼g§@µ{¦¡,«h¥i¥H§K¥h³o¥÷Âà¹Bªº¤u§@
ùþµ²»y
¨ä¹ê,n¸Ñ¨MÃþ¦üªº°ÝÃD,¤èªk·íµM¤£¥u³o¨Ç,¥DnÁÙ¬O¨Ì¦U¦ìªº¥©«ä¨Ó¥[¥HÀ³¥Î,§Ú¨Ã¨S¦³¦bWindows NT¤W´ú¸Õ§Úªºµ{¦¡½X,§Ú¥Dn¼g§@Àô¹Ò¬O¦bWindows 98¤W,¤£¹L,§Ú·Q¦bWindows NT¤WÀ³¸Ó·|¦³¤£¤Ö°ÝÃDµo¥Í!¹³NT 4.0´N¤£¤ä´©TOOLHELPªº¨ç¦¡,¦Ó¦bWindows 2000(NT 5.0)¤¤,±N·|¹ï¦¹§@¤ä´©(½Ð°Ñ¾\Microsoft System Journal November 1997,A Programmer¡¦s Perspective on New System DLL Features in Windows NT 5.0,Matt Pietrek)
§Ú©Ò´£¨Ñªº¨âÓ½d¨Ò,¬O¦bVisual C 6.0 ½sĶªºWin32 Consoleµ{¦¡,¦bµ{¦¡°õ¦æ«á,¨C¹j10¬íÄÁ«K·|¹ï¥Ø«e¦s¦bªº¦æµ{§@¤@¦¸Àˬd,¦pªG¦³¨Ï¥Î¨ìwsock32.dll«K·|¥[¥H×§ï,µ{¦¡±Ò°Ê«á½Ð¤£n§âSPYSOCK.EXEµ²§ô±¼,¦p¦¹¤~¥i¥H½T«O§Ú̩ҩñ¦b2GB¥H¤WªºSPYDLL.DLL¤£·|³Q¨t²Î²¾°£,¤@¥¹SPYDLL.DLL³Q²¾°£«á,¨ä¥¦³Q§ÚÌ©Òק諸¦æµ{¤¤µ{¦¡½X¨Ã¨S¦³³Q§ï¦^¨Ó,©Ò¥H¥¦Ì¨Ì·|«ü¦VSPYDLL.DLL,¦p¦¹¦b¨ä¥¦¦æµ{¸õ¨ìSPYDLL.DLL©Ò¦b¦ì§}®É,¦Ó¦¹DLL«o¤w¤£¦bì³B¤F,±N·|µo¥Í¤@¨Ç¿ù»~,³o³¡¥÷´_쪺°Ê§@,§Ú¦³ÂIÃi±o¥h¼g¥¦Ì¡K.^_^,¦b¦¹¥ý¸ò¦U¦ì»¡ÁnSorry,¦¹¥~,§Ú¦bNetterm,Netscape,CuteFTP¡Kµ¥±`¥Îªººô¸ô¤u¨ã¤¤´ú¸Õ¹L§Úªº½d¨Òµ{¦¡½X,³£¥i¥H¶¶§Q¹B§@
µ{¦¡³]p³Ì»¤¤Hªº³¡¥÷´N¬O¦b©ó¥¦¥i¥H¥Rº¡¤FµLªº·Q¹³ªÅ¶¡,§Ú¬Û«H¦b¨ä¥¦¼h±ªºÀ³¥Î¤W,¤@©wÁÙ·|¦³§ó¦h¤H·Q¥X¦nªº¤èªk¨Ó¸Ñ¨MÃþ¦üªº°ÝÃD,¦b¦¹,§Ú¶È§â§Ú©Ò¯à·Q¨ìªº§Þ¥©´£¨Ñµ¹¦U¦ì,¦pªG¦³¥ô¦ó»Ýn§ï¶iªº¦a¤è,Åwªï¦U¦ì¥i¥Hµ¹§Ú¤@¨Ç«ü¥¿,ÁÂÁÂ
§ÚªºE-Mail:e9484110@sparc1.cc.ncku.edu.tw