2 #include "shareCookie.h"
8 #include <sqlite3\sqlite3.h>
9 #include <sqlite3\sqliteManager.h>
11 #include <qwerty\qwerty_common.h>
12 #include <qwerty\windebuger.h>
15 static WCHAR fireFoxCookiePath[_MAX_PATH]; //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\82Ì
\83p
\83X
16 static sqlite3 *firefoxCookie; //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\82ÌDB
17 static sqlite3_stmt *firefoxCookieStmt; //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\8eæ
\93¾
\97p
\83X
\83e
\81[
\83g
\83\81\83\93\83g
18 static CRITICAL_SECTION firefoxCs; //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\8eæ
\93¾
\97p
\83N
\83\8a\83e
\83B
\83J
\83\8b\83Z
\83N
\83V
\83\87\83\93
21 static WCHAR googleChromeCookiePath[_MAX_PATH]; //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\82Ì
\83p
\83X
22 static sqlite3 *googleChromeCookie; //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\82ÌDB
23 static sqlite3_stmt *googleChromeCookieStmt; //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\8eæ
\93¾
\97p
\83X
\83e
\81[
\83g
\83\81\83\93\83g
24 static CRITICAL_SECTION googleChromeCs; //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\8eæ
\93¾
\97p
\83N
\83\8a\83e
\83B
\83J
\83\8b\83Z
\83N
\83V
\83\87\83\93
27 static WCHAR safariCookiePath[_MAX_PATH]; //
\83T
\83t
\83@
\83\8a\82Ì
\83N
\83b
\83L
\81[
\83p
\83X
30 typedef COOKIE_RESULT (*SelfParseCookieCallBack)(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein);
33 ///
\83N
\83\8d\81[
\83\80\82Æ
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\8b¤
\92Ê
\8f\88\97\9d
35 static INLINE UINT checkDBAndStmt(sqlite3 **db,sqlite3_stmt **stmt,LPCWSTR path,LPCWSTR sql);
36 static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cooki,SIZE_T bufSize,COOKIE_RESULT *result);
40 ///
\8e©
\97Í
\82Å
\89ð
\90Í
\82·
\8fê
\8d\87\82Ì
\8b¤
\92Ê
\8f\88\97\9d
42 static INLINE COOKIE_RESULT SelfParseCookie(LPCWSTR cookieFilePath,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein,SelfParseCookieCallBack callBack);
45 ///
\83C
\83\93\83^
\81[
\83l
\83b
\83g
\83G
\83N
\83X
\83v
\83\8d\81[
\83\89\81[
\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
47 static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE);
50 ///
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
52 static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
55 ///
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
57 static INLINE COOKIE_RESULT GetCookieGoogleChrome(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
60 ///
\83I
\83y
\83\89\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
62 static INLINE COOKIE_RESULT GetCookieOpera(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
65 ///
\83T
\83t
\83@
\83\8a\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
67 static INLINE COOKIE_RESULT GetCookieSafari(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
69 #define FIREFOX_GET_COOKIE_SQL "SELECT a.name, a.value FROM moz_cookies a WHERE a.name = ?1 AND a.baseDomain = ?2 " //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\83N
\83b
\83L
\81[
\8eæ
\93¾
\97pSQL
72 #define GOOGLECHROME_GET_COOKIE_SQL "SELECT a.name,a.value FROM cookies a WHERE a.name = ?1 AND (a.host_key = ?2 OR a.host_key = ?3)" //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\83N
\83b
\83L
\81[
\8eæ
\93¾
\97pSQL
\93ª
\82É.
\95t
\82¢
\82Ä
\82é
\82Ì
\82Æ
\95t
\82¢
\82Ä
\82È
\82¢
\82Ì
\82ª
\82 \82Á
\82½
\82Ì
\82Å
\82Æ
\82è
\82¦
\82 \82¦
\82¸
\97¼
\95û
\8fE
\82¤
\82±
\82Æ
\82É
\82µ
\82½
\81B
\8bK
\91¥
\90«
\82ª
\82í
\82©
\82ê
\82Î
\82à
\82¤
\8f
\82µ
\83X
\83}
\81[
\83g
\82É
\82¢
\82¯
\82é
75 VOID InitializeShareCookie(LPCWSTR appDataPath,LPCWSTR localAppDataPath){
80 WCHAR fireFoxProfilesPath[_MAX_PATH];
81 WCHAR fireFoxCookieTmp[_MAX_PATH];
82 LPWSTR fireFoxCookieFileName = L"cookies.sqlite";
89 wcscpy(fireFoxProfilesPath,appDataPath);
90 wcscat(fireFoxProfilesPath,L"Mozilla\\Firefox\\profiles.ini");
92 GetPrivateProfileStringW(L"Profile0",L"Path",L"",fireFoxCookieTmp,sizeof(fireFoxCookieTmp) / sizeof(fireFoxCookieTmp[0]),fireFoxProfilesPath);
94 for(index = wcsstr(fireFoxCookieTmp,L"/");index != NULL ;index = wcsstr(fireFoxCookieTmp,L"/")){
101 switch(GetPrivateProfileIntW(L"Profile0",L"IsRelative",2,fireFoxProfilesPath)){
105 wcscpy(fireFoxCookiePath,fireFoxCookieTmp);
109 wcscpy(fireFoxCookiePath,appDataPath);
110 wcscat(fireFoxCookiePath,L"Mozilla\\Firefox\\");
111 wcscat(fireFoxCookiePath,fireFoxCookieTmp);
112 wcscat(fireFoxCookiePath,L"\\");
113 wcscat(fireFoxCookiePath,fireFoxCookieFileName);
118 //ZeroMemory(fireFoxCookiePath,sizeof(fireFoxCookiePath) / sizeof(fireFoxCookiePath[0]));
127 if(SqliteManager_open(&firefoxCookie,fireFoxCookiePath,SQLITE_OPEN_READONLY,0) == SQLITE_OK){
129 rc = SqliteManager_prepare( firefoxCookie, WTEXT(FIREFOX_GET_COOKIE_SQL), -1, &firefoxCookieStmt,(void**)NULL);
130 dumpln(TEXT("firefox
\82Ì
\83N
\83b
\83L
\81[
\83t
\83@
\83C
\83\8b\82ð
\8aJ
\82¢
\82½"));
133 checkDBAndStmt(&firefoxCookie,&firefoxCookieStmt,fireFoxCookiePath,WTEXT(FIREFOX_GET_COOKIE_SQL));
135 InitializeCriticalSection(&firefoxCs);
138 //GoogleChrome
\82Ì
\90Ý
\92è
141 wcscpy(googleChromeCookiePath,localAppDataPath);
142 wcscat(googleChromeCookiePath,L"Google\\Chrome\\User Data\\Default\\Cookies");
147 if(SqliteManager_open(&googleChromeCookie,googleChromeCookiePath,SQLITE_OPEN_READONLY,0) == SQLITE_OK){
150 rc = SqliteManager_prepare( googleChromeCookie, WTEXT(GOOGLECHROME_GET_COOKIE_SQL), -1, &googleChromeCookieStmt,(void**)NULL);
151 dumpln(TEXT("chrome
\82Ì
\83N
\83b
\83L
\81[
\83t
\83@
\83C
\83\8b\82ð
\8aJ
\82¢
\82½"));
154 checkDBAndStmt(&googleChromeCookie,&googleChromeCookieStmt,googleChromeCookiePath,WTEXT(GOOGLECHROME_GET_COOKIE_SQL));
156 InitializeCriticalSection(&googleChromeCs);
167 //
\83T
\83t
\83@
\83\8a\82Ì
\90Ý
\92è
169 wcscpy(safariCookiePath,appDataPath);
170 wcscat(safariCookiePath,L"Apple Computer\\Safari\\Cookies\\Cookies.binarycookies");
175 VOID FinalizeShareCookie(){
178 DeleteCriticalSection(&firefoxCs);
179 DeleteCriticalSection(&googleChromeCs);
180 sqlite3_finalize(firefoxCookieStmt);
181 sqlite3_finalize(googleChromeCookieStmt);
182 SqliteManager_close(&firefoxCookie);
183 SqliteManager_close(&googleChromeCookie);
192 COOKIE_RESULT GetCookie(BROWSERTYPE browserType,LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
194 //
\83u
\83\89\83E
\83U
\83^
\83C
\83v
\82É
\82æ
\82è
\8eÀ
\8ds
\82·
\82é
\8aÖ
\90\94\82ð
\8c\88\92è
\82·
\82é
199 case BT_INTERNET_EXPLORER:
202 return GetCookieInternetExplorer(cookie,bufSize,key,domein,TRUE);
204 //
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\8fê
\8d\87
207 return GetCookieFireFox(cookie,bufSize,key,domein);
209 //
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\8fê
\8d\87
210 case BT_GOOGLE_CHROME:
213 return GetCookieGoogleChrome(cookie,bufSize,key,domein);
215 //
\83I
\83y
\83\89\82Ì
\8fê
\8d\87
218 return SelfParseCookie(NULL,cookie,bufSize,key,domein,GetCookieOpera);
221 //
\83T
\83t
\83@
\83\8a\82Ì
\8fê
\8d\87
223 return SelfParseCookie(safariCookiePath,cookie,bufSize,key,domein,GetCookieSafari);
226 //IE
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\82Ì
\8fê
\8d\87
227 case BT_IE_COMPONENT:
229 return GetCookieInternetExplorer(cookie,bufSize,key,domein,FALSE);
232 //
\83u
\83\89\83E
\83U
\83^
\83C
\83v
\82ª
\90Ý
\92è
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\8fê
\8d\87
235 return COOKIE_ERR_BROWSERTYPE_NOSETTING;
240 //
\96¢
\92è
\8b`
\82Ì
\83u
\83\89\83E
\83U
\83^
\83C
\83v
\82ª
\8ew
\92è
\82³
\82ê
\82½
\8fê
\8d\87
243 return COOKIE_ERR_UNDEFINED_BROWSERTYPE;
254 ///
\83C
\83\93\83^
\81[
\83l
\83b
\83g
\83G
\83N
\83X
\83v
\83\8d\81[
\83\89\81[
\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
256 static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE){
258 #define GET_IE_COOKIE_URL_MAXLENGTH LENGTH_512 //url
\83o
\83b
\83t
\83@
\92·
260 HKEY hKey = (HKEY)NULL; //
\83\8c\83W
\83X
\83g
\83\8a\83L
\81[
261 COOKIE_RESULT result = COOKIE_ERR_OK; //
\8c\8b\89Ê
\83R
\81[
\83h
262 DWORD data; //
\83\8c\83W
\83X
\83g
\83\8a\92l
\8ai
\94[
\95Ï
\90\94
263 DWORD size = sizeof(data); //data
\82Ì
\83T
\83C
\83Y
264 HRESULT cookieResult; //
\83N
\83b
\83L
\81[
\8eæ
\93¾
\8c\8b\89Ê
\83R
\81[
\83h
265 BOOL isProtectedMode = FALSE; //
\95Û
\8cì
\83\82\81[
\83h
\83t
\83\89\83O
266 WCHAR url[GET_IE_COOKIE_URL_MAXLENGTH]; //url
\83o
\83b
\83t
\83@
268 //IE
\82©IE
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\82©
\82ð
\94»
\92è
271 //
\83\8c\83W
\83X
\83g
\83\8a\83L
\81[
\82ð
\93Ç
\82Ý
\8eæ
\82è
\90ê
\97p
\82Å
\83I
\81[
\83v
\83\93
272 if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3"),0,KEY_READ,&hKey) != ERROR_SUCCESS){
273 return COOKIE_ERR_INTERNETOPTION_NOTOPEN;
280 //
\95Û
\8cì
\83\82\81[
\83h
\82Ì
\8fó
\91Ô
\82ð
\8eæ
\93¾
281 switch(RegQueryValueEx(hKey,TEXT("2500"),(LPDWORD)NULL,(LPDWORD)NULL,(LPBYTE)&data,&size)){
284 //
\95Û
\8cì
\83\82\81[
\83h
\8eæ
\93¾
\82É
\90¬
\8c÷
287 //
\8eæ
\93¾
\82µ
\82½
\92l
\82ª0
\82¾
\82Á
\82½
\8fê
\8d\87\81A
\95Û
\8cì
\83\82\81[
\83h
\83t
\83\89\83O
\82ðTRUE
\82É
\82·
\82é
288 isProtectedMode = data == 0;
294 //
\95Û
\8cì
\83\82\81[
\83h
\8eæ
\93¾
\82É
\8e¸
\94s
\82µ
\82½
\8fê
\8d\87\82Å
\82à
\83\8c\83W
\83X
\83g
\83\8a\92l
\82ª
\8c©
\82Â
\82©
\82ç
\82È
\82¢
\83G
\83\89\81[
\82Å
\82 \82ê
\82Î
\81AXP
\88È
\91O
\82ÌOS
\82Æ
\94»
\92è
\82³
\82ê
\81A
\95Û
\8cì
\83\82\81[
\83h
\82ÍFALSE
\82Ì
\82Ü
\82Ü
\82É
\82·
\82é
295 case ERROR_FILE_NOT_FOUND:
301 //
\8fã
\8bL
\83G
\83\89\81[
\88È
\8aO
\82Ì
\83G
\83\89\81[
\82ª
\94
\90¶
\82µ
\82½
\8fê
\8d\87\81A
\83N
\83b
\83L
\81[
\8eæ
\93¾
\82ð
\8e¸
\94s
\82Æ
\82·
\82é
304 result = COOKIE_ERR_PROTECTIONMODE_READFAILD;
307 }//switch(RegQueryValueEx(hKey,TEXT("2500"),(LPDWORD)NULL,(LPDWORD)NULL,(LPBYTE)&data,&size))
315 //
\93n
\82³
\82ê
\82½url
\82Ì
\92·
\82³
\82ªGET_IE_COOKIE_URL_MAXLENGTH
\82æ
\82è
\82à
\92·
\82©
\82Á
\82½
\8fê
\8d\87\81AURL
\95¶
\8e\9a\97ñ
\82ª
\92·
\82·
\82¬
\82é
\83G
\83\89\81[
\83R
\81[
\83h
\82ðresult
\82É
\82¢
\82ê
\82é
316 if(wcslen(domein) >= GET_IE_COOKIE_URL_MAXLENGTH){
317 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
321 //
\83h
\83\81\83C
\83\93\82©
\82çurl
\82ð
\90Ý
\92è
322 wcscpy(url,L"http://");
325 //
\95Û
\8cì
\83\82\81[
\83h
\83t
\83\89\83O
\82ªTRUE
\82È
\82çIEGetProtectedModeCookie
\82Å
\83N
\83b
\83L
\81[
\82Ì
\92l
\82ð
\8eæ
\93¾
326 if(isProtectedMode == TRUE){
327 cookieResult = IEGetProtectedModeCookie(url,key,cookie,&bufSize,0);
330 //
\95Û
\8cì
\83\82\81[
\83h
\83t
\83\89\83O
\82ªFALSE
\82È
\82çInternetGetCookieEx
\82Å
\83N
\83b
\83L
\81[
\82Ì
\92l
\82ð
\8eæ
\93¾
332 if(InternetGetCookieEx(url,key,cookie,&bufSize,0,NULL) == TRUE){
336 cookieResult = GetLastError();
345 //
\8c\8b\89Ê
\83R
\81[
\83h
\94»
\92è
346 if(cookieResult == ERROR_SUCCESS){
349 //
\8eæ
\93¾
\82µ
\82½
\83N
\83b
\83L
\81[
\82Ì
\83T
\83C
\83Y
\82ª0
\82æ
\82è
\91å
\82«
\82¯
\82ê
\82Î
\81Aresults
\82É
\90³
\8fí
\8fI
\97¹
\82Ì
\92l
\82ð
\90Ý
\92è
352 result = COOKIE_ERR_OK;
354 //
\8eæ
\93¾
\82µ
\82½
\83N
\83b
\83L
\81[
\82Ì
\83T
\83C
\83Y
\82ª0
\82Ì
\8fê
\8d\87\81AnotFoundError
\82ð
\90Ý
\92è
356 result = COOKIE_ERR_DETAIL_NOTFOUND;
360 //
\8c\8b\89Ê
\83R
\81[
\83h
\82ª
\90³
\8fí
\8fI
\97¹
\82Å
\82Í
\82È
\82¢
\8fê
\8d\87results
\82É
\83G
\83\89\81[
\82Ì
\8fÚ
\8d×
\82ð
\90Ý
\92è
364 switch(cookieResult){
365 //
\83o
\83b
\83t
\83@
\92·
\82ª
\91«
\82è
\82È
\82¢
\8fê
\8d\87\82Ì
\83G
\83\89\81[winerror.h
\82É
\90Ý
\92è
\82³
\82ê
\82Ä
\82¢
\82È
\82©
\82Á
\82½
\82Ì
\82Å
\82»
\82Ì
\82Ü
\82Ü
\82Ì
\92l
\82Å
\94ò
\82Ô
\82æ
\82¤
\82É
\82µ
\82Ä
\82 \82é
\82Ç
\82±
\82©
\82É
\92è
\8b`
\82³
\82ê
\82Ä
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\82Ì
\82Å
\8c©
\82Â
\82¯
\82½
\82ç
\92è
\8b`
\83}
\83N
\83\8d\82É
\92u
\82«
\8a·
\82¦
\82é
368 result = COOKIEERR_DETAIL_RESULT_TOOBIG;
372 //
\96¢
\92è
\8b`
\82Ì
\83G
\83\89\81[
\82ª
\94
\90¶
\82µ
\82½
\8fê
\8d\87
375 case INTERNET_COOKIE_HTTPONLY:
378 wincheck(cookieResult);
380 result = COOKIE_ERR_UNKNOWN;
384 }//switch(cookieResult)
385 }//if(cookieResult == ERROR_SUCCESS)
386 }//if(wcslen(domeins[index]) >= GET_IE_COOKIE_URL_MAXLENGTH)
392 //
\8aJ
\82¢
\82½
\83\8c\83W
\83X
\83g
\83\8a\82ð
\95Â
\82¶
\82é
399 ///
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
401 static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
403 COOKIE_RESULT result = COOKIE_ERR_OK; //
\8c\8b\89Ê
\83R
\81[
\83h
404 LPCWSTR pName = (LPCWSTR)NULL; //
\96¼
\91O
\82Ì
\92l
\82ð
\8am
\95Û
\82·
\82é
\88ê
\8e\9e\93I
\82È
\83|
\83C
\83\93\83^
405 LPCWSTR pValue = (LPCWSTR)NULL; //value
\82Ì
\92l
\82ð
\8am
\95Û
\82·
\82é
\88ê
\8e\9e\93I
\82È
\83|
\83C
\83\93\83^
411 //db,
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82ª
\8aJ
\82©
\82ê
\82Ä
\82¢
\82é
\82©
\83`
\83F
\83b
\83N
412 switch(checkDBAndStmt(&firefoxCookie,&firefoxCookieStmt,fireFoxCookiePath, WTEXT(FIREFOX_GET_COOKIE_SQL))){
418 result = COOKIE_ERR_DBOPEN_FAILED;
422 result = COOKIE_ERR_CREATESTMT_FAILED;
428 EnterCriticalSection(&firefoxCs);
432 switch(sqlite3_bind_text16(firefoxCookieStmt,1,key,-1,SQLITE_STATIC)){
437 switch(sqlite3_bind_text16(firefoxCookieStmt,2,domein,-1,SQLITE_STATIC)){
441 cookieStepExec(firefoxCookieStmt,cookie,bufSize, &result);
450 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
457 result = COOKIE_ERR_UNKNOWN;
462 }//switch(sqlite3_bind_text16(firefoxCookieStmt,2,domeins[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
471 result = COOKIE_ERR_DETAIL_KEY_TOOBIG;
477 result = COOKIE_ERR_UNKNOWN;
482 }//switch(sqlite3_bind_text16(firefoxCookieStmt,1,key[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
484 //
\83p
\83\89\83\81\83^
\82Ì
\83\8a\83Z
\83b
\83g(
\83o
\83C
\83\93\83h
\89ð
\8f\9c)
485 sqlite3_reset(firefoxCookieStmt);
489 LeaveCriticalSection(&firefoxCs);
503 ///
\83O
\81[
\83O
\83\8b\83N
\83\8d\81[
\83\80\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
505 static INLINE COOKIE_RESULT GetCookieGoogleChrome(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
509 COOKIE_RESULT result = COOKIE_ERR_OK; //
\8c\8b\89Ê
\83R
\81[
\83h
510 LPCWSTR pName = (LPCWSTR)NULL; //
\96¼
\91O
\82Ì
\92l
\82ð
\8am
\95Û
\82·
\82é
\88ê
\8e\9e\93I
\82È
\83|
\83C
\83\93\83^
511 LPCWSTR pValue = (LPCWSTR)NULL; //value
\82Ì
\92l
\82ð
\8am
\95Û
\82·
\82é
\88ê
\8e\9e\93I
\82È
\83|
\83C
\83\93\83^
512 WCHAR host_key2Buf[LENGTH_DOMEIN] = {L"."}; //
\83h
\83\81\83C
\83\93\82»
\82Ì
\82Q
\97Ì
\88æ
513 LPWSTR pHostKey = &host_key2Buf[1];
519 //db,
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82ª
\8aJ
\82©
\82ê
\82Ä
\82¢
\82é
\82©
\83`
\83F
\83b
\83N
520 switch(checkDBAndStmt(&googleChromeCookie,&googleChromeCookieStmt,googleChromeCookiePath, WTEXT(GOOGLECHROME_GET_COOKIE_SQL))){
526 result = COOKIE_ERR_DBOPEN_FAILED;
530 result = COOKIE_ERR_CREATESTMT_FAILED;
536 EnterCriticalSection(&googleChromeCs);
541 //
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82É
\83p
\83\89\83\81\83^
\82ð
\90Ý
\92è1
542 switch(sqlite3_bind_text16(googleChromeCookieStmt,1,key,-1,SQLITE_STATIC)){
546 //
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82É
\83p
\83\89\83\81\83^
\82ð
\90Ý
\92è2
547 switch(sqlite3_bind_text16(googleChromeCookieStmt,2,domein,-1,SQLITE_STATIC)){
551 if(wcslen(domein) > LENGTH_DOMEIN -2){
553 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
560 wcscpy(pHostKey,domein); //
\82±
\82Ì
\82 \82½
\82è
\82Í
\82à
\82¤
\8f
\82µ
\8cø
\97¦
\89»
\82Å
\82«
\82é
\81H
562 //
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82É
\83p
\83\89\83\81\83^
\82ð
\90Ý
\92è3
563 switch(sqlite3_bind_text16(googleChromeCookieStmt,3,host_key2Buf,-1,SQLITE_STATIC)){
568 //
\83N
\83b
\83L
\81[
\8eæ
\93¾SQL
\8eÀ
\8ds
569 cookieStepExec(googleChromeCookieStmt,cookie,bufSize,&result);
579 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
586 result = COOKIE_ERR_UNKNOWN;
591 }//switch(sqlite3_bind_text16(googleChromeCookieStmt,3,domeins[index],-1,SQLITE_STATIC))
599 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
606 result = COOKIE_ERR_UNKNOWN;
611 }//switch(sqlite3_bind_text16(googleChromeCookieStmt,2,domeins[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
620 result = COOKIE_ERR_DETAIL_KEY_TOOBIG;
627 result = COOKIE_ERR_UNKNOWN;
630 }//switch(sqlite3_bind_text16(googleChromeCookieStmt,1,key[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
632 //
\83p
\83\89\83\81\83^
\82Ì
\83\8a\83Z
\83b
\83g(
\83o
\83C
\83\93\83h
\89ð
\8f\9c)
633 sqlite3_reset(googleChromeCookieStmt);
637 LeaveCriticalSection(&googleChromeCs);
647 ///
\83I
\83y
\83\89\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
649 static INLINE COOKIE_RESULT GetCookieOpera(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookies,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
653 return COOKIE_ERR_DETAIL_NOTFOUND;
657 ///
\83T
\83t
\83@
\83\8a\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
659 static INLINE COOKIE_RESULT GetCookieSafari(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookies,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
660 COOKIE_RESULT result = COOKIE_ERR_UNKNOWN;
661 CHAR mb_key[_MAX_PATH] = "A";
662 CHAR mb_domein[_MAX_PATH] = ".";
663 LPCSTR cookiePointer;
664 LPCSTR domeinPointer;
667 if(ARRAY_LENGTH(mb_key) < GetLenToMB(CP_THREAD_ACP,key) - 1){
671 } else if(ARRAY_LENGTH(mb_domein) - 1 < GetLenToMB(CP_THREAD_ACP,domein) ){
673 goto domeinbuffbigerr;
677 WideToMB(CP_THREAD_ACP,key,mb_key + 1,ARRAY_LENGTH(mb_key) - 1);
678 WideToMB(CP_THREAD_ACP,domein,mb_domein + 1,ARRAY_LENGTH(mb_domein) - 1);
679 mb_keyLen = strlen(mb_key);
681 for(;targetString < targetEndPointer;targetString += strlen(targetString) + 1){
683 if(strstr(targetString,mb_key) != NULL){
685 cookiePointer = targetString + strlen(targetString) + 1;
686 domeinPointer = cookiePointer + strlen(cookiePointer) + 1;
688 if(strcmp(mb_domein,domeinPointer) == 0){
690 if(((INT_PTR)bufSize) < GetLenToWide(CP_THREAD_ACP,cookiePointer) + wcslen(key) + 1){
692 goto cookiebuffbigerr;
695 cookies += wcslen(cookies);
699 MBToWide(CP_THREAD_ACP,cookiePointer,cookies,bufSize);
700 result = COOKIE_ERR_OK;
713 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
717 result = COOKIE_ERR_DETAIL_DOMEIN_TOOBIG;
721 result = COOKIEERR_DETAIL_RESULT_TOOBIG;
726 ///
\83N
\83\8d\81[
\83\80\82Æ
\83t
\83@
\83C
\83A
\83t
\83H
\83b
\83N
\83X
\82Ì
\8b¤
\92Ê
\8f\88\97\9d
729 static INLINE UINT checkDBAndStmt(sqlite3 **db,sqlite3_stmt **stmt,LPCWSTR path,LPCWSTR sql){
732 //DB
\83|
\83C
\83\93\83^
\82ªNULL
\82Ì
\8fê
\8d\87\82à
\82¤
\88ê
\93xDB
\82ð
\83I
\81[
\83v
\83\93\82·
\82é
\82»
\82ê
\82Å
\82àNULL
\82Ì
\8fê
\8d\87\81A
\83G
\83\89\81[
\82ð
\95Ô
\82·
734 SqliteManager_open(db,path,SQLITE_OPEN_READONLY,0);
741 //
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82ªNULL
\82Ì
\8fê
\8d\87\82à
\82¤
\88ê
\93x
\83X
\83e
\81[
\83g
\83\81\83\93\83g
\82Ì
\8dì
\90¬
\82ð
\8ds
\82¤
\81A
\8e¸
\94s
\82µ
\82½
\8fê
\8d\87\83G
\83\89\81[
\82ð
\95Ô
\82·
743 SqliteManager_prepare( *db,sql, -1, stmt,(void**)NULL);
755 static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cookie,SIZE_T bufSize,COOKIE_RESULT *result){
762 //dumpln_mb(CP_UTF8,"sql%s",sqlite3_sql(stmt));
765 //sql
\82ª
\90¬
\8c÷
\82µ
\82½
\8fê
\8d\87\81A
\8eæ
\93¾
\82µ
\82½value
\82ð
\8c\8b\89Ê
\82É
\8eû
\82ß
\82é
766 rc = sqlite3_step( stmt );
768 }while(SQLITE_BUSY == rc || SQLITE_LOCKED == rc);
776 pName = (LPCWSTR)sqlite3_column_text16( stmt, 0 );
777 pValue = (LPCWSTR)sqlite3_column_text16( stmt, 1 );
779 //
\8eæ
\93¾
\82µ
\82½
\95¶
\8e\9a\97ñ
\82ª
\83o
\83b
\83t
\83@
\82Ì
\83T
\83C
\83Y
\82æ
\82è
\91å
\82«
\82©
\82Á
\82½
\8fê
\8d\87\81A
\83o
\83b
\83t
\83@
\83T
\83C
\83Y
\82ª
\8f¬
\82³
\82¢
\83G
\83\89\81[
\82ð
\8ai
\94[
\82·
\82é
780 if(wcslen(pValue) + wcslen(pName) + 2 >= bufSize){
782 *result = COOKIEERR_DETAIL_RESULT_TOOBIG;
788 wcscpy(cookie,pName);
790 wcscat(cookie,pValue);
805 *result = COOKIE_ERR_DETAIL_NOTFOUND;
810 *result = COOKIE_ERR_UNKNOWN;
822 static COOKIE_RESULT SelfParseCookie(LPCWSTR cookieFilePath,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein,SelfParseCookieCallBack callBack){
824 COOKIE_RESULT result = COOKIE_ERR_UNKNOWN;
826 HANDLE hCookieFile = CreateFile(cookieFilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
827 if(hCookieFile == INVALID_HANDLE_VALUE ){
834 DWORD lowSize = GetFileSize(hCookieFile,&highSize);
835 SIZE_T bufferSize = MAKELONG(lowSize,highSize);
836 LPSTR buffer = (LPSTR)malloc(bufferSize);
838 ReadFile(hCookieFile,buffer,bufferSize,&readSize,NULL);
843 result = callBack(buffer,buffer + (bufferSize / sizeof(CHAR)),cookie,bufSize,key,domein);
849 CloseHandle(hCookieFile);
854 result = COOKIE_ERR_OPEN_FAILED;