|
1 | 1 | var ie_addons_detect = { };
|
2 | 2 |
|
| 3 | +var XMLDOMRESULTS = { |
| 4 | + UNKNOWN : {value: 0, message: "Unknown!", color: "black", data: ""}, |
| 5 | + BADBROWSER: {value: 1, message: "Browser is not supported. You need IE!", color: "black", data: ""}, |
| 6 | + FILEFOUND : {value: 2, message: "File was found!", color: "green", data: ""}, |
| 7 | + FOLDERFOUND : {value: 3, message: "Folder was found!", color: "green", data: ""}, |
| 8 | + NOTFOUND : {value: 4, message: "Object was not found!", color: "red", data: ""}, |
| 9 | + ALIVE : {value: 5, message: "Alive address!", color: "green", data: ""}, |
| 10 | + MAYBEALIVE : {value: 6, message: "Maybe an alive address!", color: "blue", data: ""}, |
| 11 | + DEAD : {value: 7, message: "Dead to me! Undetectable?", color: "red", data: ""}, |
| 12 | + VALIDDRIVE : {value: 8, message: "Available Drive!", color: "green", data: ""}, |
| 13 | + INVALIDDRIVE : {value: 9, message: "Unavailable Drive!", color: "red", data: ""} |
| 14 | +}; |
| 15 | + |
| 16 | +ie_addons_detect.validateXML = function (txt) { |
| 17 | + var result = XMLDOMRESULTS.UNKNOWN; |
| 18 | + if (window.ActiveXObject) { |
| 19 | + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); |
| 20 | + xmlDoc.async = true; |
| 21 | + try { |
| 22 | + xmlDoc.loadXML(txt); |
| 23 | + if (xmlDoc.parseError.errorCode != 0) { |
| 24 | + var err; |
| 25 | + err = "Error Code: " + xmlDoc.parseError.errorCode + "\n"; |
| 26 | + err += "Error Reason: " + xmlDoc.parseError.reason; |
| 27 | + err += "Error Line: " + xmlDoc.parseError.line; |
| 28 | + var errReason = xmlDoc.parseError.reason.toLowerCase(); |
| 29 | + if (errReason.search('access is denied') >= 0) { |
| 30 | + result = XMLDOMRESULTS.ALIVE; |
| 31 | + } else if(errReason.search('the system cannot locate the object') >= 0 || errReason.search('the system cannot find the file') >= 0 || errReason.search('the network path was not found') >= 0) { |
| 32 | + result = XMLDOMRESULTS.NOTFOUND; |
| 33 | + } else if(errReason!=''){ |
| 34 | + result = XMLDOMRESULTS.FILEFOUND; |
| 35 | + } else{ |
| 36 | + result = XMLDOMRESULTS.UNKNOWN; // No Error? Unknown! |
| 37 | + }; |
| 38 | + } else { |
| 39 | + result = XMLDOMRESULTS.FILEFOUND; |
| 40 | + } |
| 41 | + } catch (e) { |
| 42 | + result = XMLDOMRESULTS.FOLDERFOUND; |
| 43 | + } |
| 44 | + } else { |
| 45 | + result = XMLDOMRESULTS.BADBROWSER; |
| 46 | + } |
| 47 | + result.data = ""; |
| 48 | + return result; |
| 49 | +}; |
| 50 | + |
| 51 | + |
| 52 | +ie_addons_detect.checkFiles = function (files) { |
| 53 | + var foundFiles = new Array(); |
| 54 | + // the first one is for all drives, the others are for the C drive only! |
| 55 | + var preMagics = ["res://","\\\\localhost\\\\", "file:\\\\localhost\\", "file:\\"]; |
| 56 | + // or any other irrelevant ADS! - we do not need this when we use Res:// |
| 57 | + var postMagics = ["::$index_allocation"]; |
| 58 | + |
| 59 | + var templateString = '<?xml version="1.0" ?><\!DOCTYPE anything SYSTEM "$target$">'; |
| 60 | + |
| 61 | + for (var i = 0; i < files.length; i++) { |
| 62 | + var filename = files[i]; |
| 63 | + if (filename != '') { |
| 64 | + filename = preMagics[0] + filename; // postMagics can be used too! |
| 65 | + var result = ie_addons_detect.validateXML(templateString.replace("$target$", filename)); |
| 66 | + if (result == XMLDOMRESULTS.FOLDERFOUND || result == XMLDOMRESULTS.ALIVE) result = XMLDOMRESULTS.UNKNOWN; |
| 67 | + result.data = filename; |
| 68 | + if (result.message.search(/file was found/i) > -1) { |
| 69 | + var trimmedFilename = result.data; |
| 70 | + // Clean up filenames |
| 71 | + for (var prem in preMagics) { trimmedFilename = trimmedFilename.replace(preMagics[prem], ''); } |
| 72 | + for (var postm in postMagics) { trimmedFilename = trimmedFilename.replace(postMagics[postm], ''); } |
| 73 | + foundFiles.push(trimmedFilename); |
| 74 | + } |
| 75 | + } |
| 76 | + } |
| 77 | + return foundFiles; |
| 78 | +}; |
| 79 | + |
3 | 80 | /**
|
4 | 81 | * Returns true if this ActiveX is available, otherwise false.
|
5 | 82 | * Grabbed this directly from browser_autopwn.rb
|
|
0 commit comments