/* * Tool name : IEBrowserFavorites * Description : Tool to dump IE browser favorites. * Version : 0.1 * Todo : Implementing Firefox browser favorite dumps. * * Changes : * */ #include #include #define MAX_BUF_SIZE 1024 /* * Constants, data types and function forward declarations. * */ void searchFavoriteFiles(char *pBaseDirectory); void extractFavoriteDetails(char *pFileName); /* * Program entry point * */ int main() { int lRetVal = 0; searchFavoriteFiles(getenv("HOMEPATH")); printf("\n\nHit enter to stop execution ...\n"); getc(stdin); return(lRetVal); } /* * Function that searches inside a directory for * favorite files. If it finds an other directory, * it calls itself recursively. * */ void searchFavoriteFiles(char *pBaseDirectory) { WIN32_FIND_DATA lFileData; HANDLE lSearchHandle; char lFilePattern[MAX_BUF_SIZE + 1]; char lSubDirectory[MAX_BUF_SIZE + 1]; char lFavoriteFile[MAX_BUF_SIZE + 1]; int lRetVal = 0; char lHomeDirectory[MAX_BUF_SIZE + 1]; if (pBaseDirectory != NULL) { ZeroMemory(lHomeDirectory, sizeof(lHomeDirectory)); strncpy(lHomeDirectory, pBaseDirectory, sizeof(lHomeDirectory)); if (lHomeDirectory[strlen(lHomeDirectory) - 1] != '\\') strcat(lHomeDirectory, "\\"); ZeroMemory(lFilePattern, sizeof(lFilePattern)); _snprintf(lFilePattern, sizeof(lFilePattern) - 1, "%s*", lHomeDirectory); /* * Start the search. * */ if ((lSearchHandle = FindFirstFile(lFilePattern, &lFileData)) != INVALID_HANDLE_VALUE) { do { /* * File is a directory. Do a recursive function call to * check it for other favorite files. * */ if(lFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (strcmp(lFileData.cFileName, ".") && strcmp(lFileData.cFileName, "..")) { ZeroMemory(lSubDirectory, sizeof(lSubDirectory)); _snprintf(lSubDirectory, sizeof(lSubDirectory) - 1, "%s\\%s", pBaseDirectory, lFileData.cFileName); searchFavoriteFiles(lSubDirectory); } // if (strcmp(lFileDa... } else { /* * File is a Internet Explorer favorite file. * Extract the relevant entries. * */ if (strstr(lFileData.cFileName, ".url")) { ZeroMemory(lFavoriteFile, sizeof(lFavoriteFile)); _snprintf(lFavoriteFile, sizeof(lFavoriteFile) - 1, "%s\\%s", pBaseDirectory, lFileData.cFileName); extractFavoriteDetails(lFavoriteFile); } // if (strstr(lFileData... } // if(lFileData.dwFileAt... } while (FindNextFile(lSearchHandle, &lFileData)); } // if ((lSearchHandle = FindFirstFile(l... } // if (pBaseDirectory != NULL) } /* * Extract favorite entry details. * */ void extractFavoriteDetails(char *pFileName) { FILE *lFH = NULL; char lTemp[MAX_BUF_SIZE + 1]; char lFavoriteTitle[MAX_BUF_SIZE + 1]; char *lFavoriteURL = NULL; if ((lFH = fopen(pFileName, "r")) != NULL) { ZeroMemory(lTemp, sizeof(lTemp)); while (fgets(lTemp, sizeof(lTemp) - 1, lFH) != NULL) { /* * Check for trailing NL/CR characters * */ if (lTemp[strlen(lTemp) - 1] == '\n') lTemp[strlen(lTemp) - 1] = 0; if (lTemp[strlen(lTemp) - 1] == '\r') lTemp[strlen(lTemp) - 1] = 0; /* * find URL-entry in favorite file * */ if (strncmp(lTemp, "url=", 4) == 0 || strncmp(lTemp, "URL=", 4) == 0) { /* * Extract favorite URL * */ lFavoriteURL = lTemp + 4; /* * Extract favorite title URL * */ if (strchr(pFileName, '\\')) strncpy(lFavoriteTitle, strrchr(pFileName, '\\') + 1, sizeof(lFavoriteTitle)), lFavoriteTitle[strlen(lFavoriteTitle) - 4] = 0; else strncpy(lFavoriteTitle, pFileName, sizeof(lFavoriteTitle)), lFavoriteTitle[strlen(lFavoriteTitle) - 4] = 0; printf("%s - %s\n", lFavoriteTitle, lFavoriteURL); } // if (strncmp(lData... } // while (fgets(lTemp, si... fclose(lFH); } // if ((lFH = fopen(p... }