欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]获取IE浏览器cookie

[原创]获取IE浏览器cookie

闲来无事,对IE浏览器的cookie进行了分析,发现IE浏览器的cookie是存放在固定的几个文件夹中,需要对这次文件进行遍历解析。
步骤:
1.获取IE浏览器Profile文件的路径;
2.开始遍历Profile所在文件夹;
3.开始解析文件夹所有文件。
下面看看主要代码:
1.获取IE浏览器Profile文件的路径

//获取 IE profile 文件路径

WCHAR *GetIEProfilePath(WCHAR *cookie_path)

{

  static WCHAR FullPath[MAX_PATH];

  WCHAR appPath[MAX_PATH];

  memset(appPath, 0, sizeof(appPath));

  GetEnvironmentVariableW(L"APPDATA", appPath, MAX_PATH);

  _snwprintf_s(FullPath, MAX_PATH, L"%s\\%s", appPath, cookie_path);  

  return FullPath;

}


2.开始遍历Profile所在文件夹
int DumpIECookies(WCHAR *cookie_path)

{

  WCHAR *ie_dir;

  WIN32_FIND_DATAW find_data;

  WCHAR cookie_search[MAX_PATH];

  HANDLE hFind;

  //获取IP Profile 路径

  ie_dir = GetIEProfilePath(cookie_path);

  _snwprintf_s(cookie_search, MAX_PATH, L"%s\\*", ie_dir);  

  printf("\ncookie_path:\n%S\n",cookie_search);

  //开始cookie文件夹遍历

  hFind = FindFirstFileW(cookie_search, &find_data);

  if (hFind == INVALID_HANDLE_VALUE)

    return 0;

  do {

    if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 

      continue;

    _snwprintf_s(cookie_search, MAX_PATH, _TRUNCATE, L"%s\\%s", ie_dir, find_data.cFileName); 

    //解析Cookie

    ParseIECookieFile(cookie_search);

  } while (FindNextFileW(hFind, &find_data));

  FindClose(hFind);

  return 1;

}

3.开始解析文件夹所有文件
void ParseIECookieFile(WCHAR *file)

{

  char *session_memory = NULL;

  DWORD session_size;

  HANDLE h_session_file;

  DWORD n_read = 0;

  char *ptr, *name, *value, *host;

  //创建文件

  h_session_file = CreateFileW(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

  if (h_session_file == INVALID_HANDLE_VALUE)

    return;

  //获取文件大小

  session_size = GetFileSize(h_session_file, NULL);

  if (session_size == INVALID_FILE_SIZE || session_size == 0) {

    CloseHandle(h_session_file);

    return;

  }

  session_memory = (char *)malloc(session_size + sizeof(WCHAR));

  if (!session_memory) {

    CloseHandle(h_session_file);

    return;

  }

  //读取

  memset(session_memory, 0, session_size + sizeof(WCHAR));

  if (!ReadFile(h_session_file, session_memory, session_size, &n_read, NULL)) {

    CloseHandle(h_session_file);

    SAFE_FREE(session_memory);

    return;

  }

  CloseHandle(h_session_file);

  if (n_read != session_size) {

    SAFE_FREE(session_memory);

    return;

  }

  ptr = session_memory;

  for(;;) {

    name = ptr;

    if (!(ptr = strchr(ptr, '\n')))

      break;

    *ptr = 0;

    ptr++;

    value = ptr;

    if (!(ptr = strchr(ptr, '\n')))

      break;

    *ptr = 0;

    ptr++;

    host = ptr;

    if (!(ptr = strchr(ptr, '\n')))

      break;

    *ptr = 0;

    ptr++;

    if (!(ptr = strstr(ptr, "*\n")))

      break;

    ptr+=2;

    NormalizeDomainA(host);

    if (host && name && value && IsInterestingDomainA(host))

      printf("host=%s,\tname=%s,\tvalue=%s\n",host,name,value);

  } 

  SAFE_FREE(session_memory);

}

主要用到C++,编译器是VS2010。
在这里我留下一个问题:
这套代码已经支持win XP、win7(x86_64)环境下的IE8、IE9、IE10、IE11,但是不支持win8.1(x86_64)的IE11,需要怎么改进代码?
完整代码见附件---解压密码是pediy.com

上传的附件 IECookie.7z

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功