diff --git a/trunk/report_templates/NTUSER_InternetDownloadManager.qs b/trunk/report_templates/NTUSER_InternetDownloadManager.qs new file mode 100644 index 0000000..eea83e5 --- /dev/null +++ b/trunk/report_templates/NTUSER_InternetDownloadManager.qs @@ -0,0 +1,305 @@ +// 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) + } +} +