diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index 9118840d..80b2b3a7 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -66,7 +66,7 @@ const Categories = [ "Encode text", "Decode text", "Swap endianness", - "Decode VBE", + "Micrsoft Script Decoder", ] }, { diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 0c6f3a7a..08a6310f 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -25,6 +25,7 @@ import IP from "../operations/IP.js"; import JS from "../operations/JS.js"; import MAC from "../operations/MAC.js"; import MorseCode from "../operations/MorseCode.js"; +import MS from "../operations/MS.js"; import NetBIOS from "../operations/NetBIOS.js"; import Numberwang from "../operations/Numberwang.js"; import OS from "../operations/OS.js"; @@ -38,7 +39,7 @@ import Tidy from "../operations/Tidy.js"; import Unicode from "../operations/Unicode.js"; import URL_ from "../operations/URL.js"; import UUID from "../operations/UUID.js"; -import VBE from "../operations/VBE.js"; + /** * Type definition for an OpConf. @@ -3204,9 +3205,9 @@ const OperationConfig = { } ] }, - "Decode VBE": { - description: "Decodes Microsoft VBE files that have been encoded with Microsoft's custom encoding.", - run: VBE.runDecodeVBE, + "Micrsoft Script Decoder": { + description: "Decodes Microsoft Encoded Script files that have been encoded with Microsoft's custom encoding.", + run: MS.runDecodeScript, inputType: "string", outputType: "string", args: [] diff --git a/src/core/operations/VBE.js b/src/core/operations/MS.js similarity index 87% rename from src/core/operations/VBE.js rename to src/core/operations/MS.js index 59432879..853f1a42 100644 --- a/src/core/operations/VBE.js +++ b/src/core/operations/MS.js @@ -1,12 +1,12 @@ /** - * Decodes Microsft Encoded VBS files that can be read and executed by cscript.exe/wscript.exe. + * Decodes Microsft Encoded Script files that can be read and executed by cscript.exe/wscript.exe. * This is a conversion of a Python script that was originally created by Didier Stevens (https://DidierStevens.com). * * @author bmwhitn [brian.m.whitney@outlook.com] * * @namespace */ -const VBE = { +const MS = { /** * @constant @@ -215,17 +215,17 @@ const VBE = { ], /** - * @param {string} input + * @param {string} data * @returns {string} */ decode: function (data) { let result = []; let index = -1; - data = data.split("@&").join(String.fromCharCode(10)); - data = data.split("@#").join(String.fromCharCode(13)); - data = data.split("@*").join(">"); - data = data.split("@!").join("<"); - data = data.split("@$").join("@"); + data = data.replace(/@&/g, String.fromCharCode(10)); + data = data.replace(/@#/g, String.fromCharCode(13)); + data = data.replace(/@\*/g, ">"); + data = data.replace(/@!/g, "<"); + data = data.replace(/@\$/g, "@"); for (let i = 0; i < data.length; i++) { let byte = data.charCodeAt(i); let char = data.charAt(i); @@ -233,7 +233,7 @@ const VBE = { index++; } if ((byte === 9 || byte > 31 && byte < 128) && byte !== 60 && byte !== 62 && byte !== 64) { - char = VBE.D_DECODE[byte].charAt([VBE.D_COMBINATION[index % 64]]); + char = MS.D_DECODE[byte].charAt(MS.D_COMBINATION[index % 64]); } result.push(char); } @@ -245,11 +245,15 @@ const VBE = { * @param {Object[]} args * @returns {string} */ - runDecodeVBE: function (data, args) { + runDecodeScript: function (input, args) { let matcher = /#@~\^......==(.+)......==\^#~@/; - let encodedData = matcher.exec(data); - return VBE.decode(encodedData[1]); + let encodedData = matcher.exec(input); + if (encodedData){ + return MS.decode(encodedData[1]); + } else { + return ""; + } }, }; -export default VBE; +export default MS; diff --git a/test/index.js b/test/index.js index 52d3b38c..91c0410e 100644 --- a/test/index.js +++ b/test/index.js @@ -22,9 +22,9 @@ import "./tests/operations/DateTime.js"; import "./tests/operations/FlowControl.js"; import "./tests/operations/Image.js"; import "./tests/operations/MorseCode.js"; +import "./tests/operations/MS.js"; import "./tests/operations/StrUtils.js"; import "./tests/operations/SeqUtils.js"; -import "./tests/operations/VBE.js"; let allTestsPassing = true; diff --git a/test/tests/operations/VBE.js b/test/tests/operations/MS.js similarity index 81% rename from test/tests/operations/VBE.js rename to test/tests/operations/MS.js index d43f9b3e..184e4bd1 100644 --- a/test/tests/operations/VBE.js +++ b/test/tests/operations/MS.js @@ -9,12 +9,12 @@ import TestRegister from "../../TestRegister.js"; TestRegister.addTests([ { - name: "VBE Decode", + name: "Micrsoft Script Decoder", input: "##@~^DgAAAA==\\ko$K6,JCV^GJqAQAAA==^#~@", expectedOutput: "MsgBox \"Hello\"", recipeConfig: [ { - "op": "Decode VBE", + "op": "Micrsoft Script Decoder", "args": [] }, ],