ãã€ãŠããã»ã©æã§ã¯ãªãããYouTubeãFacebookãããªãGoogleVideoãªã©ãèŠãªããã¹ããªãŒãã³ã°ãããªããã£ã¹ã¯ã«çŽæ¥èšé²ã§ãã
Jakstaãšããããã¯ã°ã©ãŠã³ããããã³ã°ã¹ããªãŒãã³ã°ãããªãå§ããããŸããã ãã®ã€ã³ã¹ããŒã«ã®çµæãWindowsãèµ·åãããã³ã«å®å®ããBSODãåŸãããŸããã ã»ãŒãã¢ãŒãã«åãæ¿ããŠããã®äœæã®nafigãåãå£ããŸãããã質åããããŸããã
ãã®ãœãããŠã§ã¢ã®ç°¡åãªèª¿æ»ã«ãããNDIS Miniportãã©ã€ããŒãã€ã³ã¹ããŒã«ãããŠããããšãããããŸãããããã¯ãç¹ã«ã·ã¹ãã äžã§ããŒãæã«åæ¢ãå§ããŸããã ããããã®åé¡ã¯ã©ã®ãããªãã®ã§ããïŒãç§ã¯èãããã©ã€ããŒãªãã§ãã©ãŠã¶ããã¹ããªãŒãã³ã°ãããªãååããå®è£
ãå®éšããããšã«ããŸããã
ãŸããã
ãã®èª¬æã¯ãWindowsãWinAPIãããã³å°ãã®C ++ã®ç¥èãããããšãåæãšããŠããã®ã§ãç§ã«ãšã£ãŠæãããªç¹ããã詳现ãªèª¬æãå¿
èŠãšããå Žåã¯ã質åããŠãã ããã ãã®æçš¿ã§æŠèª¬ããååã«åºã¥ããŠããããªãååããããã®æ¢è£œã®ããã°ã©ã ããªãããšãããã«æç¢ºã«ããŸãïŒå°ãªããšããã®ãããªããšã¯æžããŠããŸããïŒã äž»ã«NDISããããŒããã©ã€ããŒãšãã«ãŒã¹ã¯ãªãŒã³ã®æ±ºå®ã®æ®æå€ãšããŠåæ©ä»ãããããããã€ãã®ç©ºçœãšçè«çãªåœé ããããŸãã
ä»®ã«ããã©ãŠã¶ããã®HTTPãŸãã¯TCP / IPãã±ãããã€ã³ã¿ãŒã»ããã§ããç¹å®ã®ã¢ãžã¥ãŒã«ããããšä»®å®ããå Žåããããªãã©ã®ããã«æ£ç¢ºã«ãã£ããã§ããŸããïŒ æ¬¡ã®2ã€ã®ãªãã·ã§ã³ããããŸãã
- ã¢ãã¬ã¹ãURLãšããŠè§£æããŸãã
ãããè¡ãã«ã¯ãHTTP GETãå«ãçºä¿¡ãã±ãããã€ã³ã¿ãŒã»ãããããã®GETãæ£ç¢ºã«ã©ãã«åããããŠãããã調ã¹ãå¿
èŠããããŸãã ç¹å®ã®ãµã€ãã«é¢ããç¹å®ã®ç¥èãå¿
èŠãªããããã®æ±ºå®ã¯ããªãçããããã®ã§ãã äžæ¹ãã www.youtube.com/watch?v=o78nFVB1tJA ããªã©ã®ãã³ãã¬ãŒãã«é©ããã¢ãã¬ã¹ã䜿çšãããšãã¹ããªãŒã ãåä¿¡ããåã«ãããªã®ã¹ããªãŒãã³ã°èŠæ±ãçŽæ¥ãã£ã«ã¿ãªã³ã°ã§ããŸãã - ãµãŒããŒããã®å¿çã確èªãã
ãããè¡ãã«ã¯ãçä¿¡ãã±ãããã€ã³ã¿ãŒã»ããããContent-Typeã®HTTPããããŒã確èªããå¿
èŠããããŸãã æããã«ããããªã®å Žåãç¹å®ã®åœ¢åŒã«åºæã®ãã®ã«ãªããŸãã ããšãã°ããµã¯ãœãã©ã³ãæŒå¥ãã YouTubeããã®Flash Videoãžã®åè¿°ã®ãªã³ã¯ã®å ŽåããµãŒããŒã®å¿çã«ã¯ããããŒãContent-TypeïŒvideo / x-flvããå«ãŸããFlash VideoãèŠåºãã«åŸã£ãŠããããšãæç¢ºã«ããããŸãã MPEG4ã®å ŽåãããããŒã«ã¯video / mp4ãªã©ãå«ãŸããŸãã
æçµçãªãœãªã¥ãŒã·ã§ã³ã§ã¯ããããã1ïŒãš2ïŒã®çµã¿åããã广çã«æ©èœããå¿
èŠããããŸããããã®æçš¿ã§ã¯ãŸããã±ãããã£ããã£ã«çŠç¹ãåœãŠãŸãã
DLLãã©ãããšå®è£
ã€ã³ã¿ãŒã»ãã¿ãŒãèšè¿°ããããã«æåã«æãæµ®ãã¶ã®ã¯ããã©ãŠã¶ãŒããã»ã¹ã«DLLãå°å
¥ããããšã§ãã ãã®å Žæã®äžéšã¯ããã¹ãŠãæç¢ºã§ãããããèªã¿åãã忢ããŸãã ãã¹ãŠãçè§£ã§ãã人ã¯èª°ã§ã
ããããã
ãœãŒã¹ããããããã³ã³ãã€ã«æžã¿ããŒãžã§ã³ã
ããŠã³ããŒãã§ã
ãŸã ïŒã¯ãã3Kbã®ã¿ïŒã ãã¹ãŠã®ä»çµã¿ã詊ããŠã¿ãããšã«ããå Žåã32ããããã©ãŠã¶ãŒã䜿çšããŠã
AdMuncher ïŒhello MurrayïŒshannowïŒïŒãªã©ãåæ§ã®ããªãã¯ã䜿çšãããã¹ãŠã®ãœãããŠã§ã¢ãåæžããããšã匷ããå§ãããŸããä¿®æ£å¯èœïŒã ïŒ
TEMPïŒ
ã®.logãã¡ã€ã«ãšããŠçµæãæ¢ããŸãã
ã·ã¹ãã ãã©ãããšWindowsããã»ã¹ã§ã®DLLã®å°å
¥ã¯ããªãããã¯ããããããã¯ã§ãããä»ã®ãã¹ãŠã®äººã«ãšã£ãŠã¯ã誰ããäœãã説æããå¿
èŠããããŸãã DLLããã©ãŠã¶ãŒããã»ã¹ã«åã蟌ãããšã®æçµçµæã¯ã次ã®ããã«ãªããŸãã

ã€ãŸããåãã©ãŠã¶ãŒããã»ã¹å
ã«ãå¿
èŠãªããã±ãŒãžãã€ã³ã¿ãŒã»ããããæ±çšDLLãé
眮ãããŸãã 2ã€ã®è³ªåãããã«åºãŠããŸãã
- DLLãå®è£
ããæ¹æ³ã¯ïŒ
- ãã±ããããã£ããããæ¹æ³ã¯ïŒ
以äžã«çããŠã¿ãŸããã...
DLLãä»ã®èª°ãã®ããã»ã¹ã«æ¿å
¥ãã
æåã®æ®µéã§ã¯ãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãšDLLãšãã2ã€ã®ã¢ãžã¥ãŒã«ãèšè¿°ããå¿
èŠãããããšã¯æããã§ãã ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ããããã€ãããããã«å¿ããŠDLLããããã€ãããŸãã ããã«èŠåŽããã«ãVistual Studioãèµ·åããããã«ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ïŒInjector.cppïŒãäœæããŸãã
#pragma comment(linker, "/entry:WinMain /nodefaultlib") void APIENTRY winMain() { HMODULE interceptor = LoadLibrary(TEXT("Interceptor.dll")); if (interceptor != NULL) { HOOKPROC cbtHook = (HOOKPROC) GetProcAddress(interceptor, (LPCSTR) 1); HHOOK hHook = (HHOOK) SetWindowsHookEx(WH_CBT, cbtHook, interceptor, 0); if (hHook != NULL) { MessageBox(NULL, TEXT("Press OK to terminate."), TEXT("Interceptor is working."), MB_OK); UnhookWindowsHookEx(hHook); } FreeLibrary(interceptor); } }
äžèšã®ã³ãŒãã¯äœãããŸããïŒ æåã®è¡ã§ã¯ãã³ãŒãã®ã³ã³ãã¯ããã®çç±ãããã¢ããªã±ãŒã·ã§ã³ãžã®ãšã³ããªãã€ã³ãã忝ãªãã§WinMainïŒïŒã«çŽæ¥é
眮ããŸãã ãœãŒã¹ã§ã¯ãéåžžãMSVCRTãäžå¿
èŠã«ã«ããããŸãã
次ã«ãã€ã³ã¿ãŒã»ãã¿ãŒãèªã¿èŸŒã¿ããã®äžã®ãšã¯ã¹ããŒã颿°çªå·1ïŒåºæ°ã«ããã€ã³ããŒãïŒãèŠã€ããäœæããããã©ã¡ãŒã¿ãŒã䜿çšããŠCBTã¿ã€ãã®ã°ããŒãã«ãã©ãããèšå®ããŸãã æ¬¡ã«ãã¢ãŒãã«ã¡ãã»ãŒãžã衚瀺ãã[OK]ãã¿ã³ãæŒããŠå®äºããã¢ã¹ãã©ã«ãã¬ãŒã³ã«ç§»åããŸãã ããã ãã§ã ããã¯ãWindowsã§ã®äœæ¥ã«User32 WinAPIãäœããã®åœ¢ã§äœ¿çšãããã¹ãŠã®ããã»ã¹ã«DLLãå®è£
ããã®ã«ååã§ãã
CBTãã³ã³ãã¥ãŒã¿ãŒããŒã¹ã®ãã¬ãŒãã³ã°ã®ç¥ã WH_CBTãã©ããã¯äžè¬çã«åªããŠããŸããâŠã·ã¹ãã ã¯ããŠã£ã³ããŠãã¢ã¯ãã£ãåãäœæãç Žæ£ãæå°åãæå€§åãç§»åããŸãã¯ãµã€ãºå€æŽããåã«ãã®ãã©ãããåŒã³åºããŸãã ãŸããã·ã¹ãã ã³ãã³ããå®äºããåãããŒããŒããŸãã¯ããŠã¹ã€ãã³ããã¡ãã»ãŒãžãã¥ãŒããåé€ããåãå
¥åãã©ãŒã«ã¹ãèšå®ããåãããã³ã·ã¹ãã ã¡ãã»ãŒãžãã¥ãŒãšåæããåã«âŠãMSDNã®ç¡æç¿»èš³ã å®éãããã¯ãæšæºã®ãŠã£ã³ããŠã¢ãŒããã¯ãã£ã«åŸã£ãŠèšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®99ïŒ
ã§æ©èœããããšãæå³ããŸãã
ãã®æ¹æ³ã®å©ç¹ã¯ãWindowsãã©ããã·ã¹ãã èªäœãæ°ã«ããå¿
èŠããªãããšã§ãã
DLLãæžãå§ããŸã
ä»ã®ãã®ã§ã¯ãªãã€ã³ã¿ãŒã»ãã¿ãŒãäœæããŠããã®ã§ã圌ã«ãšã£ãŠã¯ããã§ååã§ãïŒ
- ããã»ã¹ã¯ããã»ã¹ã«ããŒããããšãã«DLLãåæåããŸã
- DLLã¯ãå®äºãããŸã§ããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã«æ®ããŸã
- å®äºæãŸãã¯å€éšã€ãã³ãã«ãããã¢ããªã±ãŒã·ã§ã³ã¯ã¢ã³ããŒãããåã«DLLã®åæåãè§£é€ããŸã
ãã®ææ³ã§ã¯ããããæ·±åºŠãäžèŽããã¢ãžã¥ãŒã«ãå¿
èŠã§ãããšèšã䟡å€ããããŸãã ããã¯ã64ããããã©ãŠã¶ãŒã64ãããDLLã€ã³ã¿ãŒã»ãã¿ãŒãå¿
èŠãšããããšãæå³ããŸãã32ãããã¢ããªã±ãŒã·ã§ã³ã§ãåæ§ã§ãã 32ãããã®ã€ã³ã¿ãŒã»ãã¿ãŒã64ãããã®ã¢ããªã±ãŒã·ã§ã³ã«ããŒããããããšãæåŸ
ãã¹ãã§ã¯ãããŸãããéã®å Žåãåæ§ã§ãã
ããã§ã¯ãå°æ¥ã®ã€ã³ã¿ãŒã»ãã¿ãŒïŒInterceptor.cppïŒã®ã¹ã±ã«ãã³ãæžããŸãããã
HINSTANCE g_hDllInstance;
ããã«ããšã¯ã¹ããŒãã«çªå·1ãæå®ããå¿
èŠããããŸãããã®ããã«ãæšæºDEFãã¡ã€ã«ïŒInterceptor.defïŒãäœæãã/ DEFãã©ã¡ãŒã¿ãŒãä»ããŠãªã³ã«ãŒã«ãã£ãŒãããããšãå¿ããªãã§ãã ããã
LIBRARY Intercept EXPORTS CBT_Hook @1
ããã ãã§ã ããã§ãDLLãããã»ã¹ã«æ¥çãããå®äºãããŸã§ãããã®äžã«çœ®ãããŸãã äžèŠãªããã»ã¹ã«äŸµå
¥ãããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³å
ã§æ£ããåäœããªãããã«ïŒã¯ããDLLãããŒãããŠåæåããããïŒã远å ã®ãã§ãã¯ãè¡ããŸãã
const char *appsToIntercept[] = { "chrome.exe", "iexplore.exe", "opera.exe", "firefox.exe", "safari.exe", 0}; char thisProcessPath[MAX_PATH], *thisProcessName; char thisDllPath[MAX_PATH], *thisDllName; BOOL onLoad() { BOOL rv = FALSE;
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãäžæãªå Žåããã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŒããããŸããã æ¬¡ã«ãWinSock颿°ã®ã€ã³ã¿ãŒã»ãããçŽæ¥åŠçããŸãã
æ©èœååã¡ã«ããºã
ãŸããæãããªããšãæç¢ºã«ããå¿
èŠããããŸãã ãã®è¡ãŸã§ãã§ã«ãã¹ãŠãæç¢ºãªäººã¯ãŸã èªã¿äžããããªãã®ã§ãã€ã³ãã³ãããŸãã é©ããããšã«ãéåžžã«è³¢æã§é«åºŠãªããã°ã©ããŒã®äžã«ã¯ãWindowsããã»ã¹ã§ã·ã¹ãã ã©ã€ãã©ãªãã©ã®ããã«æ©èœããããå¿
ãããæç¢ºã«æ³åããŠããªã人ãããããšã«æ°ä»ããŸããã ãã®ç¹ã§ãHabréã®å¥ã®æçš¿
ãWindowså®è¡å¯èœãã¡ã€ã«ïŒEXEïŒã®ã¹ããããã€ã¹ãããã¬ã€ãããã芧ã«ãªãããšã匷ããå§ãããŸãã
ãããçè§£ããããšã¯éèŠã§ãïŒ

ã·ã¹ãã ã©ã€ãã©ãªããã³PEããããŒã§ã€ã³ããŒããšããŠæå®ããããã®ãå«ããã¹ãŠã®DLLã¯ããããã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã¬ã¹ã¹ããŒã¹ã«çŽæ¥ããŒããããŸãã è«ççãªèгç¹ãããå®è¡äžã®åã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã·ã¹ãã ããã³ä»ã®DLLã®ã³ããŒã®ç¬èªã®åå¥ã®ã»ããããããŸãã
ãããã£ãŠããã©ãŠã¶ã§ãã±ãããã€ã³ã¿ãŒã»ããããæãç°¡åãªæ¹æ³ã¯ããã±ããã®éåä¿¡ãæ
åœããã·ã¹ãã ã©ã€ãã©ãªå
ã®ç¹å®ã®é¢æ°ãžã®åŒã³åºããã€ã³ã¿ãŒã»ããããããšã§ãã ãã®æç¹ã§ãäžéšã¯åã³èªãã®ããããŸãããªããªãããã¹ãŠãåã³æç¢ºã«ãªããæ°ãããã®ã¯äœããªãããã§ãã ããããä»ã®çã®ããã«ç§ã¯ç¶ããŸãã
ååã¯ãWinHTTPãWinINetãWinSockãªã©ã®ããŸããŸãªã¬ãã«ã§å®è¡ã§ããŸãã ç§ã«ãšã£ãŠãæãæ®éçãªã®ã¯ãWS2_32.DLLã©ã€ãã©ãªããã®WinSock颿°ã®ã€ã³ã¿ãŒã»ããã§ãã ç¹ã«HTTPSã䜿çšããå ŽåïŒãã±ãããæå·åãããŠããå ŽåïŒãæ¬ ç¹ããããŸãã HTTPSã®å Žåãç§ã®èгç¹ããèŠããšãWinHTTP颿°ãOpenSSLã©ã€ãã©ãªãããã¯ããããšãæåã®è§£æ±ºçã§ãã ããããç°¡åãªãã®ããå§ããŸãããã
ããã§ãç§ãã¡ãããå¿
èŠãããããšã®äž»ãªãã€ã³ãã匷調ããŸãïŒ
- ã€ã³ã¿ãŒã»ãããã颿°ã®ã¢ãã¬ã¹ã決å®ããŸã
- ãšã³ããªãã€ã³ãã§é¢æ°åŒã³åºããæžãæããŠãç¬èªã®ãã³ãã©ãŒãåŒã³åºãããããã«ããŸã
- ç¬èªã®ãã³ãã©ãŒã§ãå
ã®é¢æ°ãåŒã³åºãåã«ããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸã
- åæé¢æ°ãåŒã³åºã
- çµæãä¿å
- ç¬èªã®ãã³ãã©ãŒã§ãå
ã®é¢æ°ãåŒã³åºããåŸã«ããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸã
- çµæãåŒã³åºãæç¶ãã«è¿ã
Windowsã®äžäœäºææ§ã®å€ãããã®äŒçµ±ã«ããã°ãç°ãªãæ©èœãåŒã³åºãããšã§åãããšãè¡ãæ¹æ³ã¯ããã€ãããããããã¹ãŠããã£ããããããšããŸãã ãã®ã¿ã¹ã¯ã§ã¯ãWS2_32ããæ¬¡ã®ãã®ãã€ã³ã¿ãŒã»ããããã ãã§ååã§ãã
- éä¿¡ïŒïŒ
- WSASendïŒïŒ
- recvïŒïŒ
- WSARecvïŒïŒ
- WSAGetOverlappedResultïŒïŒ
- æ¥ç¶ïŒïŒ
- WSAConnectïŒïŒ
- ã¯ããŒãºãœã±ããïŒïŒ
ããã«ãæåŸã®3ã€ã¯ãç¹å®ã®æ¥ç¶ïŒããå ŽåïŒã«é¢é£ä»ããããã³ã³ããã¹ããäœæããã³ç Žæ£ããããã ãã«å¿
èŠã§ãã ãã®äŸã§ã¯ãäžè¬çãªã³ã³ããã¹ããåãé€ãããšããŸãã ãã ããå®éã«ã¯ãHTTPèŠæ±ãšHTTPå¿çã®ãã¢ãæ£ããåéããããã«å¿
èŠã«ãªããŸãã åæã«ãconnectïŒïŒãšWSAConnectïŒïŒã®ããã¯ã¯å³å¯ã«ã¯å¿
èŠãããŸãããæ°ãããœã±ããã®æ°ããã³ã³ããã¹ãã¯ãæåã«æžã蟌ãŸãããšãã«äºå®äžäœæã§ããããã§ãã
ãããã£ãŠãDLLã«æ§é ãäœæããŠãWinSock颿°ã®ãšã³ããªãã€ã³ããæžãæããŠåŸ©å
ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
HOOK_CODE_SIZEã®æŠèŠãšäŸåé¢ä¿ã«ã€ããŠã¯ãå
ãèªãã§ãã ããã
ã¢ã»ã³ãã©ãŒã®ããã
ãšã³ããªãã€ã³ãã§é¢æ°åŒã³åºããã€ã³ã¿ãŒã»ããããã«ã¯ãã³ãŒãã«ããããé©çšããå¿
èŠããããŸãã ãããã£ãŠãæãç°¡åãªã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- ãã³ãã©ãŒãå®çŸ©ããŸãã
ãã®å ŽåãcdeclãŸãã¯stdcallã®åŒã³åºãã®ã¿ã€ããããã³ãã¹ãŠã®å
¥åãã©ã¡ãŒã¿ãŒã¯ãå
ã®é¢æ°ãšãŸã£ããåãã§ãªããã°ãªããŸãããããããªããšãã¹ã¿ãã¯ãç ŽæããŸãã - é¢å¿ã®ããæ©èœãžã®ãšã³ããªãã€ã³ããæ±ºå®ãã
ããã«ããããã¹ãŠãç°¡åã«ãªããkernel32.dllããGetProcAddressïŒïŒãåŒã³åºãå¿
èŠããããŸãã - 颿°ã®ãšã³ããªãã€ã³ãããã³ãŒããä¿åãã
ããã§ãããã¹ãŠãã·ã³ãã«ã§ã-ãã€ãã§äººéé¢ããå Žæã«ã³ããŒããŸã - ããããšã³ããªãã€ã³ã
ãããŸãã«èšã£ãŠãããã¯ãã¹ãŠããªãããããåŒã³åºããšãã«ãã³ãã©ãŒãžã®ç§»è¡ãããããã«ããšã³ããªãã€ã³ãã§ã³ãŒããæžãæããããšã«ãªããŸã

æ©èœçãªèгç¹ãããã€ã³ã¿ãŒã»ããã«ã¯ããã€ãã®ç°ãªãæ¹æ³ããããŸãã æãç°¡åãªæ¹æ³ã¯ããšã³ããªãã€ã³ãã®æåã«ããã³ãŒããå
ã®ã³ãŒãããç¬èªã®ã³ãŒãã«ããŸãã¯ãã®éã«çµ¶ããæžãæããããšã§ãïŒå
ã®é¢æ°ãåŒã³åºããšãïŒã åžžã«ã³ãŒããæžãæããå¿
èŠã¯ãããŸããããã€ã³ã¿ãŒã»ãã¿ãŒãå
ã®é¢æ°ã®éäžã«æ£ããåã蟌ãããã«åœä»€ããŒãµãŒãèšè¿°ããå¿
èŠããããããè€éãªã¡ãœããããããŸãã æãç°¡åãªãã®-ã³ãŒãã®å
é ã§æžãæãã-ã«ã€ããŠèª¬æããŸãããã
ç¹°ãè¿ããŸããããã³ãã©ãŒãåŒã³åºãæ¹æ³ã¯ããã€ããããŸãã 詳现ã«ã¯è§Šããã«ããã®ãã¡ã®2ã€ã匷調ããŸããç¡æ¡ä»¶é·ç§»ãšåŒã³åºãã¹ã¿ãã¯ã§ã®æ»ãã§ãã æåã®å ŽåãæŠå¿µã¯æ¬¡ã®ãšããã§ãã
MyFuncHandler: <blablablablabla> OriginalFunction: JMP MyFunHandler
ããã¯éåžžã«åçŽã§ã32ãããåŒã§ã¯5ãã€ããå¿
èŠã§ãã1ã€ã¯JMPç¡æ¡ä»¶ãžã£ã³ãåœä»€ã³ãŒãçšã§ã4ã€ã¯çžå¯Ÿã¢ãã¬ã¹çšã§ãã ãªãçžå¯Ÿçãªã®ããåŸã§ã 2çªç®ã®å ŽåãæŠå¿µã¯ãããã«ç°ãªããŸãã
MyFuncHandler: <blablablablabla> OriginalFunction: PUSH MyFuncHandler RETN
ããã«ã¯6ãã€ããå¿
èŠã§ããåœä»€ã³ãŒãPUSH <32ãããDWORD>ããã³RETNã«ã¯2ãã€ãã絶察ã¢ãã¬ã¹ã«ã¯4ãã€ããå¿
èŠã§ãã ã¯ããã¯ãã æåã®ã±ãŒã¹ã§ã¯ãã¢ãã¬ã¹ã¯å®è¡å¯èœã³ãŒãã®çŸåšã®ã¢ãã¬ã¹ã«é¢é£ãããšèŠãªãããŸãã 2ã€ç®ã¯ã宿°ã§ãããã¢ãã¬ã¹ç©ºéã®å
é ã«é¢é£ãããšèŠãªãããŸãã æåã®æ¹æ³ã«è¡ããŸãã
ã€ã³ã¿ãŒã»ãã¿ãŒã€ã³ã¹ããŒã©ãŒãäœæããŸãã
äžèšã®ã³ãŒãã«ã€ããŠããã«èª¬æããå¿
èŠã¯ãªããšæããŸãã 颿°ã€ã³ã¿ãŒã»ãã¿ãŒã«é¢ããæ
å ±ã®ã³ã³ãã³ããæ
åœããæ§é äœã«ãããæžã¿ã³ãŒããæåã«äœæããmemcpyïŒïŒã䜿çšããŠããããã¯ããçŽæ¥äœæããããšã¯æ³šç®ã«å€ããŸãã çŸåŠã®ãã¡ã³ã¯ããã«ããã¯ã远å ããããšãã§ããŸãããç§ã®æèŠã§ã¯ããã¯äžèŠã§ãããªãã ãšæããŸããïŒ
ãã©ãããæå¹ã«ããã«ã¯ãç¬èªã®ãã³ãã©ãŒã®ã¢ãã¬ã¹ãžã®é·ç§»ã®ã¿ãå«ãæ°ããã³ãŒããã³ããŒããŸãã ãã©ããããªãã«ããã«ã¯ãoldCodeãšããååã§é
åã«ä¿åãããŠãã5ã€ã®å
ã®ãã€ãã埩å
ããŸãã
颿°ã«ãã©ããã®ã€ã³ã¹ããŒã«ãèšè¿°ããã®ã§ã颿°ã³ãŒãã®åæç¶æ
ã®åŸ©å
ãæžã䟡å€ããããŸãã
ããã»ã¹ã«äŸµå
¥ãããã©ãããèšå®ãåé€ããªã³ããªãããæ¹æ³ãããã£ãã®ã§ã次ã¯ç¬èªã®ãã³ãã©ãŒãå®è¡ããŸãã
WinSockãã€ãã£ã颿°ãã³ãã©ãŒ
ããã§ã¯ããŸãæåã«ãã€ã³ã¿ãŒã»ããããã颿°ã®ãããã¿ã€ãã®é
åãå®çŸ©ããŸãããã äžèšã®ããã«ãæãå¿
èŠãªæ©èœã®ã¿ãã€ã³ã¿ãŒã»ããããããšããŸãã
ãã¯ããããããããã«ãæœè±¡åãnameã®åã·ã¹ãã 颿°ã«ã¯ãmy_nameãšããç¬èªã®ãã³ãã©ãŒããããŸãã æ¬¡ã«ãé
åã§æå®ããããã³ãã©ãŒãå®çŸ©ããå¿
èŠããããŸãã äŸãšããŠsendïŒïŒã䜿çšããŠãããå®è¡ããŸãããã
int WSAAPI my_send(SOCKET s, char *buf, int len, int flags) { PAPIHOOK thisHook = hookFind(my_send); if (NULL == thisHook) return (int) 0; hookDisable(thisHook); int rv; rv = send(s, buf, len, flags); hookEnable(thisHook); return rv; }
ããã¯ãå
ã®ã³ãŒããåŒã³åºã以å€ã®äœãããªãã·ã¹ãã 颿°ã®ç©ºã®ã©ãããŒã®ããã«èŠããŸãã ã©ãããŒã¯ãããèªäœã®ãã¹ãŠã®ãã³ãã©ãŒã§æ¬è³ªçã«åãã§ããããããã¯ããå®çŸ©ããã®ã«äŸ¿å©ãªããã«ãããã€ãã®ãã¯ããäœæããã®ãçã«ããªã£ãŠããŸãã
ãŸãã颿°ãçµäºããã«ã¯ïŒ
次ã«ããããã®ãã¯ãã䜿çšããŠãé
åããæ®ãã®ãã©ãããæ±ºå®ããŸãã
ãã©ãããèšå®ãã
OnLoadïŒïŒã®æåŸã®è¡ã¯ãç¹å®ã®ããžãã¯é¢æ°InstallHooksïŒïŒãåŒã³åºããŸãã ãœãªã¥ãŒã·ã§ã³ã®ãã¹ãŠã®ã³ã³ããŒãã³ããããã®ã§ãå®çŸ©ããããã¹ãŠã®ãã©ããã®ãããã€ã³ã¹ããŒã«ãäœæããŸãã
ç°¡æœã«ã ããããã©ããã®åé€ãç°¡æœã§ãã
HTTPãã±ãããã£ããã£
ããŠãç§ãã¡ã¯ã¹ã ãŒãºã«æãè峿·±ããã®ã«å°éããŸããã ãããã£ãŠãHTTPãªã¯ãšã¹ããšHTTPã¬ã¹ãã³ã¹ã®2çš®é¡ã®ãã±ããããããŸãã ãããã£ãŠãåè
ã¯sendïŒïŒåã®é¢æ°ã«ãã£ãŠéä¿¡ãããåŸè
ã¯recvïŒïŒåã®é¢æ°ã«ãã£ãŠåãå
¥ããããŸãã éä¿¡é¢æ°ã¯ãå
ã®ã³ãŒããåŒã³åºãåã«ã€ã³ã¿ãŒã»ããããå¿
èŠããããŸãããéä¿¡ãããã¡ãŒã¯æªåŠçã®ãŸãŸã§ãã ããããã®åä¿¡é¢æ°ã¯ãåæã³ãŒãã®å®è¡åŸã«ã€ã³ã¿ãŒã»ããããå¿
èŠããããŸããããããªããšãäœãæ£ç¢ºã«åãå
¥ããããããããããŸããã
éåæé¢æ°ããããŸãã ããã§ã®èãæ¹ã¯ç°¡åã§ãã WSASendïŒïŒãŸãã¯WSARecvïŒïŒãåŒã³åºããšãã€ãã³ããç»é²ãããWSAOVERLAPPEDæ§é ãæå®ãããŸãã éåæé¢æ°ã¯å³åº§ã«çµäºããå®äºæã«GetLastErrorïŒïŒãWSA_IO_PENDINGã«èšå®ããŠSOCKET_ERRORãã¹ããŒããŸãã æ¬¡ã«ãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¯ãWaitForSingleObjectïŒïŒãªã©ãäœããã®æ¹æ³ã§ã€ãã³ããåŸ
æ©ããã€ãã³ãã®ã¹ããŒã¿ã¹ãèšå®ããããšããã«ãWSAGetOverlappedResultïŒïŒãä»ããŠãããã¡ãŒãèªã¿åããŸãã
åæé¢æ°ããããŒã¿ãåé€ããã®ãé£ãããªãå Žåãéåæã§ã¯å°ãæãå ããå¿
èŠããããŸãã æçš¿ã®åé ã§ãã³ã³ããã¹ããå®å
šã«åé€ããããšã¯ã§ããªããšè¿°ã¹ãŸããããéåææäœããã®çç±ã§ãã ãã詳现ã«ã WSAGetOverlappedResultïŒïŒåŒã³åºãã¯ãéä¿¡ãããã¡ãŒãŸãã¯åä¿¡ãããã¡ãŒã«é¢ããæ
å ±ãäŒããŸããã ãããã£ãŠãã³ã³ããã¹ããäœæããããã«ãããã¡ãžã®ãã€ã³ã¿ãä¿åããå¿
èŠãããããšã¯æããã§ãã
ã³ã³ããã¹ããå¿
èŠãªå¥ã®çç±ããããŸãã ã¹ããªãŒãã³ã°ãããªã®ååã«ã¯HTTPãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãå¿
èŠãªãããæãè«ççãªè§£æ±ºçã¯ãsendïŒïŒãrecvïŒïŒãå¥ã
ã«åŒã³åºãããšã§ãã ããã§ã¯ãã³ã³ããã¹ãã®æ§é ãäœæããŸããããããã¯ãHTTPãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãã¢ãåéãã
éåæé¢æ°ïŒ
struct REQUEST { SOCKET socket; char *request; LPWSABUF wsaBuf; PREQUEST next; }
äžèšã®ãã¹ãŠãå¿
èŠãªã®ã¯ãªãã§ããïŒ ãœã±ããçªå·ã«ããããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®å¯Ÿå¿ã決å®ããŸãã ã€ãŸããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¯åãTCPãœã±ããäžã§ãªã¯ãšã¹ããéåä¿¡ããŸããããããªããšããªã¯ãšã¹ããéåä¿¡ã§ããŸããã
èŠæ±ãã€ã³ã¿ãŒã¯HTTPèŠæ±ãåç
§ããŸãã
LPWSABUFãã€ã³ã¿ãŒã¯ãéåæé¢æ°ã«äœ¿çšãããŸãã ã€ãŸããWSASendïŒïŒ/ WSARecvïŒïŒãåŒã³åºããããšããããã¡ãŒãžã®ãã€ã³ã¿ãŒãä¿åããWSAGetOverlappedResultïŒïŒã®å®äºæã«ããããåé€ããŸãã ç¹°ãè¿ããŸãããäžèŽã¯ãœã±ããçªå·ã«ãã£ãŠæ±ºå®ãããŸãã
ä»åŸãWSASendïŒïŒã®å Žåããã®æçš¿ãšã€ã³ã¿ãŒã»ãã¿ãŒãã©ã³ã¯ã®äœæäžã«ãã¹ããããã©ãŠã¶ãŒã®ãããã§ãéåæåŒã³åºãã¯äœ¿çšãããŸããã
次ã¯äœã§ããïŒ åäžãªã³ã¯ãªã¹ããæŽçããŸãã èŠæ±ãšå¿çã®ãã¢ã®ã³ã³ããã¹ãã¯ã倱ãããªãããã«ã©ããã«é
眮ããå¿
èŠãããã®ã¯è«ççã§ãã ããã°ã©ã ã®ãµã€ãºãèšããŸãããSTLãã³ãã¬ãŒãã®ãããªãã®ã䜿çšããªãããã«ãåŠæ ¡ã®ãªãªã³ããã¯ã®åé¡ã解決ããåçŽã«æ¥ç¶ããããªã¹ãã®å®è£
ãèšè¿°ããã®ãæãç°¡åã§ããã ããã¯ããªãã«ãšã£ãŠããè¯ãã§ããããããªãèªèº«ã§èŠãŠãã ããã
詳现ã«å
¥ãããšãªãããªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ã³ã³ããã¹ãã®ãªã³ã¯ãªã¹ããæäœããããã®é¢æ°ã«ã€ããŠèª¬æããŸãïŒè©³çްã«ã€ããŠã¯ããœãŒã¹ãåç
§ããŠãã ããïŒã
次ã«ããã¹ãŠã®sendïŒïŒé¢æ°ã®å
±éãã³ãã©ãŒãäœæããŸãã
ãããŠããã¹ãŠã®recvïŒïŒã®å
±éãã³ãã©ãŒïŒ
ãã¬ããŒã±ããã ãŸã 远ãã€ããŠãã人ã®ããã«èª¬æããŸãã ãã±ãããéä¿¡ãããšãããã±ããã®å
å®¹ã¯æåã«ãGETããååšãããã©ãããã§ãã¯ãããŸãã
HTTP GETã®å ŽåãHTTPããããŒãåãåãããéããŠãããœã±ããã®ã³ã³ããã¹ãã«ä¿åãããŸããããã«å¿ããŠããã±ãããåä¿¡ãããšã 'HTTP'ãååšãããã©ããã³ã³ãã³ãããã§ãã¯ããŸãããããçãã§ããå Žåããœã±ããã³ã³ããã¹ããã以åã«éä¿¡ãããGETãèŠã€ããããšããŠããŸããèŠæ±ãšå¿çãèŠã€ãã£ãå Žåã¯ãããã«åæã§ããŸãããã®äŸã§ã¯ãåã«ïŒ
TEMPïŒ
\ <ããã»ã¹å.exe>-<ããã»ã¹ID> .logã®ãã°ãã¡ã€ã«ã«ãã³ãããŸããéåæé¢æ°ãåŠçããããã«æ®ããŸãããã®ãããäŸãšããŠWSARecvïŒïŒã䜿çšããŸãã
ã€ãŸããåŒã³åºããéåæã®å Žåããœã±ããã®ã³ã³ããã¹ããèŠã€ããããã«ãããã¡ãŒãžã®ãã€ã³ã¿ãŒãæžã蟌ã¿ãŸããæ¬¡ã«ããããæœåºããreadïŒïŒã®ãããªãã¹ãŠã®é¢æ°ã®æ±çšãã³ãã©ãŒã«ãã¹ãŠãæž¡ããŸãã
åäºè©©ã®çµè«ãšããŠãå¿çãåä¿¡ããåã«ãœã±ãããæ»ã¬ããšãèš±å¯ããå Žåãäžå¿
èŠãªã³ã³ããã¹ããæã€ããã«closesocketïŒïŒãã³ãã©ãŒãäœæããŸããæŽç·Žãã³ã³ãã€ã«ãèµ·åããã©ãŠã¶ã®èµ·åãYouTubeãžã®ç§»å...ãããŠãæªåé«ãã¢ãã¬ã¹www.youtube.com/watch?v=o78nFVB1tJAïŒãã°ããçŽæ¥ååŸïŒã§ãããªãèŠèŽããããã«Google ChromeããååŸããè峿·±ãããã±ãŒãžã次ã«ç€ºããŸãã [22:28:48] [SOCKET = 0EB0, REQUEST = 1327 bytes, RESPONSE = 329 bytes] ->GET /videoplayback?algorithm=throttle-factor&burst=40&cp=U0hTS1RRU19OTUNOM19MS1dBOlR1eGNSd1JHRkdy&expire=1346465093&factor=1.25&fexp=926900%2C910103%2C922401%2C920704%2C912806%2C924412%2C913558%2C912706&gcr=fi&id=a3bf27155075b490&ip=91.155.190.10&ipbits=8&itag=34&keepalive=yes&key=yt1&ms=au&mt=1346441292&mv=m&range=13-1781759&signature=7415093589702691B2E46681B2EF24EC370C2F1F.D6D55168E2211687994A3F47D8919AC5470C567D&source=youtube&sparams=algorithm%2Cburst%2Ccp%2Cfactor%2Cgcr%2Cid%2Cip%2Cipbits%2Citag%2Csource%2Cupn%2Cexpire&sver=3&upn=GlJDbjcQ-2w HTTP/1.1 Host: oo---preferred---elia-hel1---v11---lscache1.c.youtube.com Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.26 Safari/537.4 Accept: *
å®éãããã®ãããªã¹ããªãŒã ã¯HTTPããããŒã®æåŸã®è¡ã®çŽåŸããå§ãŸããŸãããã®åŸãããã©ã€ããŒãªãã§ã¹ããªãŒãã³ã°ãããªçšã®ã€ã³ã¿ãŒã»ãã¿ãŒãäœæã§ãããã©ããçåã«æã£ãŠããŸããå人çã«ã¯ãã¿ã¹ã¯ã¯åºæ¬çã«éæãããŠãããšæãã®ã§ãçµè«ã«é²ã¿ãŸããçµè«
ã€ã³ã¿ãŒã»ãã¿ãŒã¯ãæ¢ã«èª¬æãããšããã«æ©èœããŸããéåžžã®å®è£
ã§ã¯ãå€ãã®ã€ã³ã¿ãŒã»ãã¿ãŒãšã¡ã€ã³ã€ã³ãžã§ã¯ã¿ãŒã¢ããªã±ãŒã·ã§ã³éã®éä¿¡çšã«IPCãèšè¿°ããå¿
èŠããããŸããããéžæããããã€ãã®ãªãã·ã§ã³ããããŸãã- ãããªURLãã€ã³ã¿ãŒã»ãã¿ãŒããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«è»¢éãããããããã«ããŸãã
- èŠèŽäžã«ã€ã³ã¿ãŒã»ãã¿ãŒãããããªèªäœã転éããŸãããã©ãã£ãã¯ã¯IPCãä»ããŠè€è£œãããŸãããããŒã«ã«ãã©ãã£ãã¯ããã³ãã³ã°ããã³ã¹ãã¯ããã»ã©éèŠã§ã¯ãªããããããã¯æãããããšã§ã¯ãããŸããã
- ã€ã³ã¿ãŒã»ãã¿ãŒããã¹ããªãŒã ããã£ã¹ã¯ã«çŽæ¥æžã蟌ã¿ãããã»ã¹ã®é²è¡ç¶æ³ã®ã¿ãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«éç¥ããŸãã
å¥ã®ãã€ã³ãã
ãããŸã§ã®ãšãããYouTube / Flash Videoã®ã¿ã䜿çšããŠããŸãããä»ã®ãµã€ãããã³ãããªã³ãŒããã¯ã«ã¯ãä»ã®æ©èœããããŸããããã§ãã90ïŒ
ã®ã±ãŒã¹ã§ããContent-typeãããããŒã®ã³ã³ãã³ãã«ã®ã¿çŠç¹ãåœãŠããã«ãã¡ãã£ã¢ã¹ããªãŒã ãã€ã³ã¿ãŒã»ããããããšã¯å¯èœã§ãããã®å®è£
ã®æ¬ ç¹ïŒ- åžžã«ãã©ããã®ä»£ããã«ã³ãŒããæžãæããŸãã
äžã§æžããããã«ãå
ã®é¢æ°ãåŒã³åºããšãã«ã³ãŒããæžãæããªãããã«ããã¡ãœããããããŸãããã ãããã®ãããªæ¹æ³ã§ã¯ãã³ãŒãã®ãã詳现ãªåæãåœä»€ã®ãµã€ãºã®æ±ºå®ãå Žåã«ãã£ãŠã¯éã¢ã»ã³ããªãå¿
èŠã§ããããã誰ãã«ãšã£ãŠæ¬åœã«è峿·±ããã®ã§ãããªããç§ã¯ããã«ã€ããŠå¥ã®æçš¿ãæžãããšã詊ã¿ãããšãã§ããŸãã - HTTPSãåå
ã§ããªãããšå®éãNDISããããŒããã©ã€ããŒã®å ŽåãHTTPSãååããå¯èœæ§ãèŠåœãããŸãããããã§ãããã®ææ³ã䜿çšãããšãWinHTTPãOpenSSLãªã©ã®å¥ã®ã©ã€ãã©ãªã®ã¬ãã«ã§ãããè¡ãããšãã§ããŸãã
ä»ã«äœïŒ
2ã€ã®åŽé¢ïŒ- ãã®ææ³ã¯ãã¹ã¬ãããååããããã¹ããã¡ãŒã®ãããªã¢ããªã±ãŒã·ã§ã³ãå®è£
ãããããããã ãã«äœ¿çšããããšã¯ã§ããŸãããããšãã°ãå¿
èŠã«å¿ããŠãHTTPãã©ãã£ãã¯çšã®ãã£ã«ã¿ãŒãäœæããããåºåãããªãã³ã°ãããã§ããŸããããã«ããã¹ãŠã®ãã©ãŠã¶ãTCP / IPã¬ãã«ã§æ©èœãããšããæ ¹æ¬çãªéãã¯ãããŸããã
- ãã®ææ³ã¯ãWinSockã ãã§æ©èœããŸãããã€ãŸããååãšããŠãããããªå€æŽãå ããã ãã§ãã€ã³ã¿ãŒã»ãã¿ãŒãã©ãã«ã§ã貌ãä»ããŠã奜ããªæ©èœãã€ã³ã¿ãŒã»ããã§ããŸããããã«ãããè¡åãšæèã®éé¿ã®ç¯å²ãäžããããŸãã
ãã®æçš¿ã誰ãã«ãšã£ãŠè峿·±ããã®ã«ãªãããšãé¡ã£ãŠããŸããUPDïŒ2çªç®ã®éšåã¯ãåžžã«ã³ãŒããæžãæããããšãªãããã©ããã«ã€ããŠæžãããŠããŸãããããã
// st