èŠããã«ãèæ¯ã çŽ1幎ååãç§ã¯å人çã«äŸ¿å©ãªããã¹ã圢åŒã§Skypeãã°ããšã¯ã¹ããŒããããã£ãïŒãã£ããããã»ãšãã©åãåã/貌ãä»ãããããã«æ¹åãããïŒã ãšã¯ã¹ããŒãçšã«èŠã€ãã£ããã¹ãŠã®ãŠãŒãã£ãªãã£ã¯äœã«ãé©åããŸããã§ããã ãŸãã¯ããã°ã«300件匱ã®é£çµ¡å ãš360,000件ãè¶ ããã¡ãã»ãŒãžãããããã圌ãã¯æ®é ·ã«ãã¬ãŒãããããŸããã äžå¿«ãªåœ¢åŒã§ãã°ãæžããŸããã ããããã¹ãŠã®ãã©ãã«ãäžåºŠã«ã æãã«ãæ©èœããªãã£ãããªã© ç§ã¯èªåã§æžãããšã«ããŸããã æåã«Pythonçšã®Skype APIãã€ã³ãã£ã³ã°ãè©ŠããŸããããé ãããšãããããŸããã ãããããSkype4COMãšC ++ãè©ŠããŠã¿ããšãããããªãéããªããŸããã çµæã¯ããã°ããšã¯ã¹ããŒãããããã®éåžžã«è¿ éãªãŠãŒãã£ãªãã£ã§ãã ãã¡ãããããŒãã³ã¢ãã³ã³ãœãŒã«ãC ++ã
æ°é±éåã«ããã¯ã¢ããã®ããšãæãåºããå®èšŒæžã¿ã®ãŠãŒãã£ãªãã£ãèµ·åããŸãã...ãããŠãç§ã¯çµãããåŸ ã€ããšãã§ããªãããšã«æ°ä»ããŸããã æ°åããã£ãŠãããšã¯ã¹ããŒãã¯ãçŽ30åã§çŽ10ïŒ é²ã¿ãåèšã§çŽ5æéã®ETAã«ãªããŸããã 蚱容ã§ããªãã»ã©é·ãã å æ°ïŒ
ãŠãŒãã£ãªãã£ããããã«ä¿®æ£ãããšã¯ã¹ããŒãããããã£ããã®æ°ãå¶éããŸãïŒç§ãç解ããŠããããã«ãSkypeã¯äœããã®çç±ã§åãé£çµ¡å ãšã®åå¥ã®éä¿¡ã»ãã·ã§ã³ãåå¥ã®ãããããã£ãããIChatã«åå²ããŸãïŒãåºæ¬æéã«æ³šæããŸãã 次ã«ããããã¡ã€ã©ãŒãèµ·åããŸãã幞ããªããšã«ãCodeAnalystã¯Visual Studioã«çµ±åãããããã2ã3åã®ã¯ãªãã¯ã§èµ·åããŸãã ãããŠãçµæã泚ææ·±ãèŠãŠãã ããã
exporting chat 100/7014...
exported 3925 events in 18.1 sec

ãããã¡ã€ã«ã¯å·»ãæ¯ã®ããã«èŠããããã»ã¹æéã®81ïŒ ãkernelbase.dllã§æ¶è²»ãããããã«12ïŒ ãskype4com.dllã§æ¶è²»ãããããã°ã©ã èªäœãèŠãããšãã§ããŸããã æµ®æ°ïŒ ã¹ããŒããŠã³ããã®ã¯ïŒç·šéããããïŒç§ã®ã³ãŒãã§ã¯ãªããäœããã®ãµãŒãããŒãã£ã®ã³ãŒãã§ãã ããããã©ãã§ããïŒ
é¢æ°InternalLcidToNameãLCMapStringExãNlsValidateLocaleãèªä¿¡ãæã£ãŠç²åŸããŠãã ããã ãããã®äººã ã¯èª°ã§ããïŒ ç§ã®ã³ãŒããããã®ãããªãã®ãåŒã³åºãããšã¯ãããŸããã ã ããç§ã¯é»è©±ããŠããŸããã ã ãããããªãã¯ããããã©ãããåŒã³åºãããããç¥ãå¿ èŠãããããããããããããããæããã«ãªããããã«ã€ããŠäœãã§ããããæããã«ãªãã ããã æäžäœé¢æ°InternalLcidToNameã«ãã¬ãŒã¯ãã€ã³ããé 眮ããå¿ èŠããããŸããã¹ã¿ãã¯ãåç §ããŠãã ããã ãã£ãšãåé¡ã æãã«ã¯ããã¬ãŒã«ãŒã®æ©èœã®ååãå ¥ããããŸããã ã«ãªãæ¹æ³
ç§ã¯2ã€ã®éžæè¢ãç¥ã£ãŠããŸããããããããã£ãšå€ãã®éžæè¢ããããŸãã æåã«ããããã¡ã€ã«å ã®é¢æ°å šäœãããããšã³ãã§ããããã誀ã£ãŠå®è¡ãæ°åäžæããã ããªã®ã§ãééããªãããã«å ¥ããŸãã 第äºã«ããããã«ã°ã°ãªã³ã°ããããšã§ãããžãã¯ã©ã€ã³{,, KernelBase.dll} @ InternalLcidToName @ 8ãèŠã€ããããšãã§ããŸã-ç¬ãšæ°åã䜿çšããŠãç®çã®æåããã®ããã«åŒã³åºãããããšãããããŸãã å°ãå ã«é²ããšãæ°å€ã¯åžžã«4ã®åæ°ã«ãªããäžè¬çã«ã¹ã¿ãã¯ã®ãµã€ãºã«éåžžã«äŒŒãŠããŸããã¢ã³ããŒã¹ã³ã¢ã¯ãããããªãã¯ããã£ã©ã¯ã¿ãŒã®å žåçãªå é ã®ç¬ã§ã¯ãããŸããã ããã«æ°ä»ããã®ã§ããã³ã°ãªã³ã°ã®æ£ç¢ºãªã«ãŒã«ã¯ãããã€ãã®ãªãã·ã§ã³ïŒç¬/ã¢ã³ããŒã¹ã³ã¢ã4/8/12/16 ...ïŒãæŽçããããããæ€çŽ¢ãç 究ãããã³é©çšããã®ã«ã¯ããã«é·ãã16ç§ã§_GetStringTypeWã«å ¥ãããšãããããŸãæåã®ã·ã§ããã ããŠãããã»ã©é ããªãæªæ¥ããç·æ¥ã®InternalLcidToNameã«æ»ããF5ãç¹°ãè¿ããŠçµ±èšãåéãããšã2ã€ã®èå³æ·±ãããšãããããŸãã ãŸããã»ãšãã©ã®åŒã³åºãã®ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªããŸãã
KernelBase.dll!@InternalLcidToName@8()
KernelBase.dll!_LCMapStringW@24() + 0x46 bytes
Skype4COM.dll!280c69f2()
// Skype4COM.dll
// ,
2çªç®ã«ãç¹°ãè¿ãå®è¡ãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã åæã«ãåžžã«åãã³ãŒããã¹ã«æ²¿ã£ãŠæ©ããŸãã
@InternalLcidToName@8:
752F6F33 mov edi,edi
752F6F35 push ebp
752F6F36 mov ebp,esp
752F6F38 push ecx
752F6F39 push edx
752F6F3A lea eax,[ebp-4]
752F6F3D push eax
752F6F3E mov dword ptr [ebp-4],ecx
752F6F41 call _NlsValidateLocale@8 (752F6E04h)
752F6F46 test eax,eax
752F6F48 je @InternalLcidToName@8+17h (7531BAB0h)
752F6F4E push eax
752F6F4F call _LocaleNameFromHash@4 (752F6F13h)
752F6F54 leave
752F6F55 ret
ãããã ããããããã¡ã€ã«æ©èœã®3ã€ã¯ãã¹ãŠã_LCMapStringWã«ãªããŸãã å éšã®ä»ã®2ã€ãšã¯ç°ãªãããã®é¢æ°ã¯ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ãããMSDNã§èª¬æãããŠããŸããGoogleã¯å³åº§ã«msdn.microsoft.com/en-us/library/dd318700%28v=vs.85%29.aspxã®ãªã³ã¯ãèŠã€ããŸããäœããã®çç±ã§ããããã±ãŒã«ããå¥ã®ãã±ãŒã«ãžã®è¡ã®ãã®å€æã¯ãããèªäœã§ã¯ãªãã«ããŠãé£ã¹ãŸãã
ããŠã次ã®ãã¬ãŒã¯ïŒã·ã³ãã«_LCMapStringW @ 24ãããã«ã¹ã¿ãã¯ã«è¡šç€ºãããã®ã§äŸ¿å©ã§ãïŒãããã°ã©ã ã«è¿œå ããããã«2ã€ãèŠãŸãã å®éãAPIåŒã³åºãã¯ããã®æãé«äŸ¡ãªLCMapStringã®åŒã³åºãã«ã€ãªãããŸãïŒãã®ãããããã°ã©ã ãäžæããŸãïŒã ãããŠãã©ã®ãã©ã¡ãŒã¿ãŒãæçµçã«è»¢éãããŸããïŒé¢æ°èªäœãžã®ãã®å èš³ã®ããïŒã é¢æ°ãæ°åã¹ãããã¹ã«ãŒãããšãã³ãŒãã¯åžžã«ãã®ãã¹ããã©ãããšãããããŸãã
752F8188 push 0
752F818A push 0
752F818C push 0
752F818E push dword ptr [ebp+1Ch]
752F8191 push dword ptr [ebp+18h]
752F8194 push dword ptr [ebp+14h]
752F8197 push dword ptr [ebp+10h]
752F819A push dword ptr [ebp+0Ch]
752F819D push eax
752F819E call _LCMapStringEx@36 (752F81ACh)
ãããã£ãŠããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãéåžžã«æ確ã«èŠãããšãã§ããŸãã ããã§ããããã¯ãã¹ãŠã¹ã¿ãã¯ã«ããã·ã¥ãããŸãïŒéã®é åºã§ïŒã ãããã圌ãã®æ éãªæ€æ»ã®çµæã¯ãæåã¯åã«è¡æãäžãã次ã«é¡ã®äžæ¬æãªèœäžãšå£ããã®æ³¡ã®å¶åŸ¡äžèœãªæŒåºãåŒãèµ·ãããŸãã
IChatMessage :: GetBodyã¡ãœããã®åïŒåïŒåŒã³åºãã§ã次ã®ããšãçºçããããšãããããŸããã
æåã«ãLCMAP_LOWERCASEãã©ã°ïŒããã±ãŒã«ã«åºã¥ããŠå°æåã«ãããïŒã®ã¿ãæã€ããŒã¿ïŒAPPLICATIONCALLCHATMESSAGECHATMEMBERCHATGROUPSMSUSERVOICEMAILïŒãLCMapStringExé¢æ°ã«å°çããŸããããã±ãŒã«ã¯en-USã§ãã ä»ã®ãã·ã³ã«ã¯å¥ã®ãã·ã³ïŒç¹ã«en-USã®Windowsã®ã€ã³ã¿ãŒãã§ã€ã¹èšèªããããŸãïŒããããŸãããéåžžã®ã©ãã³æåãå°æåã«å€æããããšã¯åé¡ã§ã¯ãããŸããã ã€ãŸãããã®ããŒã¿ã¯ãé·ãè¡ã§ã¯ãªããããã€ãã®çãè¡ã§ãå°çããŸããããäžåºŠã«1æåãã€å±ããŸãã
ãã®åŸãã©ãããããã®çæ°ãæžãããã³ãºãŒæåŸã¯äœããééã£ãŠãããšçãå§ããŸããå¥ã®ãããã³ã«ã³ãã³ããå°æåã«ããå¿ èŠãããå Žåã¯ã©ãã§ããããããã¬ãŒããšå€ãã®siskollããããŸããã ãããã£ãŠãèŠäºãªäºé²çæé©åã ãããŠã0ãã255ãŸã§ã®ããŒãã«å šäœããåã³åŒã³åºãããšã«1ãã€ããLCMapStringExé¢æ°ã«å°çããŸãã 念ã®ãããããã¯ããã«2åç¶ããŠè¡ãããŸãã
ãã®åŸãçŽ æŽãããæé©åãç¶ããããŸãã ïŒãŸãã¯ãã³ãŒãå ã®å¥ã®å Žæã§å¥ã®ã€ã³ã人ã«ãã£ãŠè¡ãããå¯èœæ§ããããŸããïŒç¹°ãè¿ãã«ãªããŸããã0ãã255ãŸã§ã®ããŒãã«å šäœãé¢æ°ã«é£ã³ãŸãïŒ ãã ããåãã€ãã¯3åé£ç¶ããŠç¹°ãè¿ãããŸãã ãã¡ããããã®ã¢ãããŒãã¯ä»¥åã®ã¢ãããŒããããæ£ãããšç§ã¯èããŠããŸãã 2ã€ã®ã¯ããã¡ãŒã¿ãŒã¯æµ·ã§ã¯ååŸã§ããŸãã; 1ã€ãŸãã¯3ã€ãååŸããå¿ èŠããããŸãã
åèšã§ã1ã€ã®ã¡ãã»ãŒãžã®ããã¹ããååŸããããšãã[æ€é²æžã¿]åè©Šè¡ã«å¯ŸããŠ1000ãè¶ ããLCMapStringExåŒã³åºããè¡ãããååŒã³åºãã¯ãµã€ãºãã¡ããã©1ãã€ãã®è¡ã§è¡ãããŸãã ããã«ããã5000ããã¹ãã®ã¡ãã»ãŒãžããã¹ãã¯CPUã®5ã10ç§ããããŸãã 2幎åã®Skype COM APIã®ããŒãžã§ã³ã«äŸåãããçŸåšã®Skype COM APIãåæ§ã«ã¹ããŒããŠã³ããŸãã
æ§äº€ãSkype APIã®å éšæ§äº€ã 匷ããããæžããããªæ°ãããŸãã
åé¡ã¯æããã§ããã©ãããã°ããã§ããïŒ çæ³çã«ã¯ããããã®åŒã³åºããå®å šã«æé€ããå¿ èŠããããŸãããæªç¥ã®æ°ã®å Žæã§skype4com.dllã«ããããåœãŠãã®ã¯æ zyã§ããïŒãã®LCMapStringãåŒãåºãããããŸããŸãªãã€ã³ãã®æ°ãç¥ã£ãŠããïŒããããŠ2çªç®ã«ããã¯ããµããŠããŸãïŒèª°ãçªç¶ãã°ã«ã€ãªããããç¥ã£ãŠããïŒã é¢æ°èªäœã眮ãæããŠã1ãã€ãã®åŒã³åºãã®å Žåã«ããã«çµäºããããã«é Œã¿ãŸãã åçŽãªææ³ã¯é·ãéç¥ãããŠããŸãïŒã¡ã¢ãªå ã®é¢æ°ã®ã¢ãã¬ã¹ãååŸããå¿ èŠã«å¿ããŠèªåèªèº«ããé¢æ°ã«jmpã眮ããå¿ èŠã«å¿ããŠæåã«è©°ãŸã£ãåœä»€ãå®è¡ããjmp-threadãå ã®åœä»€ã«æ»ããŸãã ãã ãããã®ææ³ã¯éå±ã§ãã¢ã»ã³ãã©ãŒãã³ã§åãã®ã¯å°ãé¢åã§ãã
ãã¯ãå¿ èŠãªãããšãå€æããŸããïŒ MS Researchã¯ãã§ã«èãããã¹ãŠãè¡ã£ãŠãããŸããã èªç¶çã«ã¯DetoursãšåŒã°ããã©ã€ãã©ãªããããããã ãã§ãã以å€ã®ãã¹ãŠãå®è¡ã§ããŸãã ããšãã°ãäžéšã®ãµãŒãããŒãã£ã®.exeã®é¢æ°ããŸã£ããå€æŽããã«çœ®ãæããDLLããå®è£ ããã®å Žã§ããã·ã¥ã§ããŸãã ãŸããç§ã®ãŠãŒãã£ãªãã£ã®ããã«ãDetoursã¯å¿ èŠãªçœ®æã®ããã®ã·ã³ãã«ã§çŽæçãªC / C ++ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããsimple.cppãšããååã®äŸã¯ååã§ãã ç掻è³éïŒdetours.hãsyelog.libãdetoured.libãdetours.libïŒã«ããã¯ãã20è¡ã®ã³ãŒããè¿œå ãã...
#define PROTO (LCID Locale, DWORD dwMapFlags, LPCWSTR lpSrcStr, int cchSrc, LPWSTR lpDestStr, int cchDest)
static int (WINAPI * TrueMap) PROTO = LCMapStringW;
int WINAPI MyMap PROTO
{
if (Locale==1033 && dwMapFlags==256 && cchSrc==1)
{
*lpDestStr++ = *lpSrcStr++;
*lpDestStr++ = 0;
return 1;
}
return TrueMap(Locale, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
}
// ...
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueMap, MyMap);
LONG error = DetourTransactionCommit();
if (error != NO_ERROR)
printf ( "error detouring LCMapStringW(); export might be slower (code=%d)\n", error );
// ...
exporting chat 100/7014...
exported 3925 events in 5.8 sec
å šäœãšããŠãã·ã¹ãã ã³ãŒã«ã䜿çšããŠå šå¡ãå°æåã«å€æããäžè¬çã§äžèŠãªïŒïŒïŒãã€ãåäœã®ç¿»èš³ãççž®ããããã°ã©ã ãå šäœã§3.1åé«éåããŸããã æªããªããæªããªãã ãããã¡ã€ã«ãããã«èª¿ã¹ãŸãïŒ

çµµã¯åçã«å€åããŸããã KernelBase.dllãæ¶è²»ããã®ã¯ããã20ïŒ ã§ãæ®ãã¯skype4com.dllã®æªç¥ã®èéã§å®è¡ãããŸãã ãã ããGetDriveTypeåŒã³åºãã䜿çšããŠç¶æ³ã確èªããããšãæ確ã«èŠæ±ããŸãã ãã®é¢æ°ã¯ããã£ã¹ã¯ã®ã¿ã€ãïŒãªã ãŒããã«ãéãªã ãŒããã«ãCD-ROMãRAMããŸãã¯ãããã¯ãŒã¯ïŒãå€å¥ããäœååãšåŒã°ããå Žåãçµæã®ãã£ãã·ã¥ãèŠæ±ããŸãã ããã§ãå¥ã®å°ããªçºèŠãåŸ ã£ãŠããŸãã
ãããã¡ã€ã©ãŒãåãã€ããŠãããããªãç®ç«ã£ãŠããããšãããããŸãã é¢æ°_GetDriveTypeWã¯ãããã°ã©ã ã®å šæéã«ããã£ãŠ1ååŒã³åºãããŸãã ãããã¡ã€ã«ã§ã¯ã100ã§ã¯ãªã1000ã®ãã£ããããšã¯ã¹ããŒãããŠããããªãé¡èã«åæ ãããŸãããå®éã«ã¯æéãæ¶è²»ããŸããã
ãã ãããããã¡ã€ã©ãŒã¯_GetStringTypeWã«ã€ããŠåãã€ããŸããã _LCMapStringWåŒã³åºãåæã«äŒŒãããã€ãã®ç°¡åãªæäœãè¡ã£ãåŸããšã¯ã¹ããŒãäžã«ããã®èŠªé¢æ°GetStringTypeExã0ãã255ãŸã§ã®ãã¹ãŠã®ãã€ãã«å¯ŸããŠåžžã«ãã«ãããããšãããããŸãïŒèª°ãçãã§ãããïŒã GetStringTypeExãã€ã³ã¿ãŒã»ããããããã«20è¡ã®ãã£ãã·ã¥ãã1ãã€ãã®ã±ãŒã¹ã®çµæãè¿ãããšã«ãããããã«15ïŒ ã®å éãåŸãããŸããã3.6åãããããŸããã
exporting chat 100/7014...
exported 3925 events in 5.0 sec
èå³æ·±ãããšã«ããã®æé©åã®åŸãKernelBase.dllã¯ãããã¡ã€ã«ããå®å šã«æ¶ããŸãã æ®ãã®æéã®62ïŒ ã¯skype4com.dllã«ãã£ãŠæ¶è²»ãããå¥ã®12ïŒ ã¯ntdll.dllïŒå²ãåœãŠãšã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³çšïŒã䜿çšããããã°ã©ã èªäœã¯çŽ8ïŒ ãæ¶è²»ãããã®åŸãã·ã¹ãã å šäœãæ¶è²»ããŸãã æé©åã®å¯èœæ§ã¯3ã5åãããšæãããŸãããMSDNã®é¢æ°åãšãããã®ããã¥ã¡ã³ãã§äœãèµ·ãã£ãŠããããããã«åŠçã§ããŸãããŸããå èskype4com.dllãå解ãããããã¹ãããã¯ãããŸããã ãããŠã倧åãª360,000件ã®ã¡ãã»ãŒãžã®ãšã¯ã¹ããŒãã«ã¯ãã§ã«10åãããããŸãããããã¯èš±å®¹ç¯å²ã§ãã
çãæè¡çèŠçŽã¯ãèšäºã®åé ã§ãã§ã«èŠçŽãããŠããããã§ãã åšãã«ã¯ãSkypeãªã©ã®èåãªäŒæ¥ãå«ãçããŠãã人ã ãããŸãããŸããããå Žæã§ã¯ãçããŠãã人ã ã®ããã«ã³ãŒããèšè¿°ããŠããŸãã å Žåã«ãã£ãŠã¯ããœãŒã¹ãååšããªããµãŒãããŒãã£ã®ã©ã€ãã©ãªã§ã¯é床ãäœäžããŠããæå°éã®åŽåã§ç¶æ³ãä¿®æ£ã§ããŸãã ãã¬ãŒãã調ã¹ãŠæé©åããã®ã«ãã»ãã®æ°æéããããããŸããã§ããïŒè¿åã®ç¿åŸãå«ãïŒïŒåããŠèŠããšããšè©ŠããŠã¿ããšãïŒã ã¡ã¢ãæºåããã®ã«ãã£ãšæéãããã£ãã®ã§ã¯ãªãããšæããŸãã 匷åãªããŒã«ã¯ãæ£ãã䜿çšãããšãæããã«å°ããªå¥è·¡ãèµ·ããããšãã§ããŸãã
...ãããŠãSkypeã¯ãéåžžã®SQLiteããŒã¿ããŒã¹ã«ã¡ãã»ãŒãžãã°ãä¿åããŸãããã®ããŒã¿ããŒã¹ã¯ãéåžžã®SQLæ§æã䜿çšããŠSQLite Browserã«ãã£ãŠæ£åžžã«éããã管çãããŸãã 1ã€ã®é£çµ¡å ã®å±¥æŽãéžæçã«æ¶å»ããŸããïŒ ãé¡ãããŸãã ãã¹ãŠã®äººã«ãšã£ãŠãé©åãªæ·±ããŸã§ïŒèšå®ãå€æŽãããšããSkypeèªäœã¯äœãããŸãããïŒïŒ ç°¡åã§ãã ããåºãã®ããŒã¹ãæé©åããŸããïŒ ããäžåºŠã¯ã³ã¯ãªãã¯ã ããããããã¯å¥ã®C ++ã§ã¯ãããŸãã-naya story;ïŒ
æé©åãæåãããŸãã