// Internet Download Manager is a program that may integrate itself into all commpon browsers. // It claims to download much faster and be more comfortable. // // The code below has been written after analysis of several systems where IDM was installed. // Documentation also can be found under // https://tise2015.kku.ac.th/drupal/sites/default/files/1-s2.0-S1742287610000575-main.pdf // That documentation refers too a much older version of IDM, but the string obfuscation // technique is still the same. function fred_report_info() { var info = { report_cat : "NTUSER", report_name : "Internet Download Manager", report_author : "Guy Voncken ", report_desc : "Extract IDM download list and configuration settings", fred_api : 2, hive : "NTUSER" }; return info; } function IsValid (val) { if(typeof val !== 'undefined') return true; else return false; } function GetKeyVal(path, key) { var val=GetRegistryKeyValue(path, key); var Ret = (IsValid(val)) ? RegistryKeyValueToString (val.value, val.type) : ""; return String (Ret); } var table_style = "border-collapse:collapse; margin-left:20px; font-family:arial; font-size:14;"; var cell_style = "border:1px solid #888888; padding:5; max-width:500px; word-wrap: break-word; "; function PrintTableHeaderCell (str) { println (" ",str,""); } function PrintTableDataCell(alignment,str) { var style = cell_style + "text-align:" + alignment + ";"; println (" ",str,""); } function StrSizeToNum (StrSize) { var Str = String(StrSize); var Num = 0; var i = Str.length-1; while (i >= 1) { if (Str[i] == " ") { i--; } else { Byte = 16 * parseInt (Str[i-1], 16) + parseInt (Str[i ], 16); Num = Num * 256 + Byte; i -= 2; } } return Num; } function SizeToHuman (StrSize) { var Size = parseInt (StrSize,10); var Unit = "  B"; if (Size > 1024) {Size = Size / 1024.0; Unit = "KiB"}; if (Size > 1024) {Size = Size / 1024.0; Unit = "MiB"}; if (Size > 1024) {Size = Size / 1024.0; Unit = "GiB"}; if (Size > 1024) {Size = Size / 1024.0; Unit = "TiB"}; return Size.toFixed(2) + " " + Unit; } function ConvertSillyDateFormat (DateIn) { var DateOut = DateIn.slice (16,20) + " " + DateIn.slice (0,6) + "  " + DateIn.slice (7,15); return DateOut; } function ConvString8 (EncStr, Encrypted) { var Str = ""; for (i=0; i 0) Str = Str + String.fromCharCode (Code); } return Str; } function ConvString16 (EncStr, Encrypted) { var Str = ""; for (i=0; i 0) Str = Str + String.fromCharCode (Code); } return Str; } function fred_report_html0 () { var val; println("

Internet Download Manager

"); var IDM_Root = "\\Software\\DownloadManager"; if (!IsValid (GetRegistryKeyValue(IDM_Root, "idmvers"))) { println ("

No IDM installation found.

") return; } Version = String (GetKeyVal(IDM_Root, "idmvers")); Serial = String (GetKeyVal(IDM_Root, "Serial")); TempPath = String (GetKeyVal(IDM_Root, "TempPath")); println ("

")
   println ("Installed version: " + Version);
   println ("Serial:            " + Serial);
   println ("Temp path:         " + TempPath);
   println ("
") // Download folders // ---------------- var IDM_Folders = IDM_Root + "\\FoldersTree"; var FoldersNodes = GetRegistryNodes (IDM_Folders); // var Folders = [] if (IsValid (FoldersNodes)) { println ("

IDM default download paths

"); println (" "); println (" "); PrintTableHeaderCell ("ID"); PrintTableHeaderCell ("Name"); PrintTableHeaderCell ("Mask"); PrintTableHeaderCell ("Path"); println(" "); for(var i=0; i < FoldersNodes.length; i++) { var Name = FoldersNodes[i]; var Key = IDM_Folders + "\\" + Name; IDStr = String (GetKeyVal(Key, "ID")); Mask = String (GetKeyVal(Key, "mask")); PathW = String (GetKeyVal(Key, "pathW")); ID = parseInt (IDStr.slice(2),16), Path = ConvString16 (PathW, false); println(" "); PrintTableDataCell ("left", ID); PrintTableDataCell ("left", Name); PrintTableDataCell ("left", Mask); PrintTableDataCell ("left", Path); println(" "); // Folders[IndexStr] = Name; } println("
"); } else { println ("

No folders found.

") } // Downloaded files // ---------------- var RootNodes = GetRegistryNodes (IDM_Root); if (IsValid(RootNodes)) { println ("

IDM file downloads

"); println(" "); println(" "); PrintTableHeaderCell("Ref"); PrintTableHeaderCell("File Name"); PrintTableHeaderCell("Size"); PrintTableHeaderCell("Size Human"); PrintTableHeaderCell("Date added"); PrintTableHeaderCell("Last try date"); PrintTableHeaderCell("Status"); PrintTableHeaderCell("Save To"); PrintTableHeaderCell("Description"); PrintTableHeaderCell("URL"); PrintTableHeaderCell("Referer"); PrintTableHeaderCell("Password"); PrintTableHeaderCell("U-User"); PrintTableHeaderCell("U-Password"); println(" "); RootNodes.sort(function(a, b) { return parseInt(a,10) -parseInt(b,10) }) for(var i=0; i= 0) Filename = Filename.slice(0, PosQ); // Cut of Filename at first occurence of "?" Size = StrSizeToNum (StrSize); SizeHuman = SizeToHuman (Size); DateAdded = ConvertSillyDateFormat (DateAdded); DateLastTry = ConvertSillyDateFormat (DateLastTry); switch (Status) { case "0x00000000": StatusStr = "Not found"; break; case "0x00000003": StatusStr = "Completed"; break; default : StatusStr = Status; } // SavedTo = Folders[Category]; SavedTo = ConvString16 (SavedToEnc , true); Password = ConvString8 (PasswordEnc , true); U_Password = ConvString8 (U_PasswordEnc, true); println(" "); PrintTableDataCell ("left", RootNodes[i]); if (IsValid (GetRegistryKeyValue(Key, "FR_FNCD"))) PrintTableDataCell ("left", Renamed); else PrintTableDataCell ("left", Filename); PrintTableDataCell ("right", Size); PrintTableDataCell ("right", SizeHuman); PrintTableDataCell ("left", DateAdded); PrintTableDataCell ("left", DateLastTry); PrintTableDataCell ("left", StatusStr); PrintTableDataCell ("left", SavedTo); PrintTableDataCell ("left", Description); PrintTableDataCell ("left", URL); PrintTableDataCell ("left", Referer); PrintTableDataCell ("left", Password); PrintTableDataCell ("left", U_User); PrintTableDataCell ("left", U_Password); println(" "); } } println("
"); println ("

The results above have been verified with IDM 6.26 under Windows 8.1 pro.

"); println ("

Not tested yet: Download paths with characters above ASCII range.

"); } else { println ("

No file download entries found.

") } } function fred_report_html() { try { fred_report_html0() } catch (Exc) { println ("Exception occured: " + Exc) } }