public List <ExtensionResult> GetResults(String term) { var results = new List <ExtensionResult>(); var extResults = __extension.CallMethod("results", term); // if it's null or not an array (__COMObject Type) then gtfo if (extResults == null || !extResults.IsComObject()) { return(null); } using (var inspector = new Scripting.Inspecting.ObjectInspector(extResults)) { foreach (var result in inspector.GetList()) { var hash = result as Hashtable; if (!hash.ContainsKey("text")) { continue; } String text = hash.TryGetValue("text").Convert <String>(); String command = hash.TryGetValue("command").Convert <String>(); results.Add(new ExtensionResult() { Extension = this, Text = text, Command = command }); } } return(results); }
public static dynamic Evaluate(string key, string script, IDictionary <string, object> parameterValuePair = null) { try { using (ScriptEngine engine = new ScriptEngine(ScriptEngine.VBScriptLanguage)) { List <object> parameters = new List <object>() { "ADMIN" }; string extraParameters = string.Empty; if (parameterValuePair != null && parameterValuePair.Count > 0) { extraParameters = "," + string.Join(",", parameterValuePair.Select(e => e.Key)); foreach (var para in parameterValuePair) { parameters.Add(para.Value); } } string parsedScript = string.Format(@"Function {0}(NecUserProfile {2}) {1} End Function" , key, script, extraParameters); ParsedScript parsed = engine.Parse(parsedScript); dynamic value = parsed.CallMethod(key, parameters.ToArray()); return((value != null) ? value.ToString() : string.Empty); } } catch (Exception ex) { throw; } }
/// <summary> /// Get a payload list for the mutation /// </summary> /// <param name="rawRequest"></param> /// <param name="mutationRule"></param> /// <param name="hasFuzz">Whether the request contains <fuzz></param> /// <param name="entityId">The entitiy id</param> /// <returns></returns> public List <string> GeneratePayloadListFromMutation(string rawRequest, TestJob testJob, bool hasFuzz, string entityId) { List <string> payloadList = new List <string>(); string mutationRule = testJob.TestDef.Mutation; string payloadString = ""; if (mutationRule.StartsWith(JAVASCRIPT_FUNCTION_TAG)) { //extract JS function from rule string jsCode = mutationRule.Substring(JAVASCRIPT_FUNCTION_TAG.Length); //function should match the signature Callback(<string>,<string>, using (ScriptEngine engine = new ScriptEngine(ScriptEngine.JavaScriptLanguage)) { ParsedScript parsed = engine.Parse(jsCode); payloadString = parsed.CallMethod(CALLBACK_NAME, rawRequest, testJob.ParameterName, testJob.ParameterValue, testJob.RequestLocation.ToString()) as string; } } else { payloadString = mutationRule; } if (hasFuzz) { payloadString = payloadString.Replace("$original", String.Empty); } else { payloadString = payloadString.Replace("$original", testJob.ParameterValue); } payloadString = payloadString.Replace("$entity_id", entityId); if (!String.IsNullOrWhiteSpace(payloadString)) { payloadString = payloadString.Replace(@"\,", "__comma__"); var list = payloadString.Split(','); foreach (string payload in list) { string finalPayload = payload.Replace("__comma__", ","); payloadList.Add(finalPayload); if (_testFile.GenerateAllEncodings) //also add encoding variants for the payload { payloadList.Add(Utils.UrlEncode(finalPayload)); payloadList.Add(Utils.UrlEncode(Utils.UrlEncode(finalPayload))); payloadList.Add(Utils.UrlEncodeAll(finalPayload)); payloadList.Add(Utils.JSONEncode(finalPayload)); payloadList.Add(Utils.HtmlEncode(finalPayload)); payloadList.Add(Utils.Base64Encode(finalPayload)); } } } return(payloadList); }
public void CustomTester_TestScriptingEngine() { using (ScriptEngine engine = new ScriptEngine(ScriptEngine.JavaScriptLanguage)) { ParsedScript parsed = engine.Parse( "function Callback(x){return '1,2,'+x;}"); var val = parsed.CallMethod("Callback", 3) as string; Assert.IsNotNull(val); Assert.AreEqual("1,2,3", val); } }
/// <summary> /// Run Javascript validation /// </summary> /// <param name="validation"></param> /// <param name="testResponseList"></param> /// <returns></returns> private bool RunJavaScriptValidation(string validation, List <string> testResponseList) { //extract JS function from rule string jsCode = validation.Substring(JAVASCRIPT_FUNCTION_TAG.Length); //function should match the signature boolean Callback(response1,...,responseN) bool found = false; using (ScriptEngine engine = new ScriptEngine(ScriptEngine.JavaScriptLanguage)) { ParsedScript parsed = engine.Parse(jsCode); found = (bool)parsed.CallMethod(CALLBACK_NAME, testResponseList.ToArray()); } return(found); }
private static string LazyGenerateToken(string text) { if (jsEngine == null) { jsEngine = new ScriptEngine("jscript"); } // https://github.com/hujingshuang/MTrans/blob/master/tk/Google.js ParsedScript parsed = jsEngine.Parse(@"function token(a) { var k = """"; var b = 406644; var b1 = 3293161072; var jd = "".""; var sb = ""+-a^+6""; var Zb = ""+-3^+b+-f""; for (var e = [], f = 0, g = 0; g < a.length; g++) { var m = a.charCodeAt(g); 128 > m ? e[f++] = m: (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128) } a = b; for (f = 0; f < e.length; f++) a += e[f], a = RL(a, sb); a = RL(a, Zb); a ^= b1 || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return a.toString() + jd + (a ^ b) }; function RL(a, b) { var t = ""a""; var Yb = ""+""; for (var c = 0; c < b.length - 2; c += 3) { var d = b.charAt(c + 2), d = d >= t ? d.charCodeAt(0) - 87 : Number(d), d = b.charAt(c + 1) == Yb ? a >>> d: a << d; a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d } return a }"); return(parsed.CallMethod("token", text).ToString()); }
private string GetSign(string text, string gtk) { if (jsEngine == null) { jsEngine = new ScriptEngine("jscript"); } // https://github.com/hujingshuang/MTrans/blob/master/tk/Baidu.js ParsedScript parsed = jsEngine.Parse(@"function a(r, o) { for (var t = 0; t < o.length - 2; t += 3) { var a = o.charAt(t + 2); a = a >= ""a"" ? a.charCodeAt(0) - 87 : Number(a), a = ""+"" === o.charAt(t + 1) ? r >>> a: r << a, r = ""+"" === o.charAt(t) ? r + a & 4294967295 : r ^ a } return r } var C = null; var token = function(r, _gtk) { var o = r.length; o > 30 && (r = """" + r.substr(0, 10) + r.substr(Math.floor(o / 2) - 5, 10) + r.substring(r.length, r.length - 10)); var t = void 0, t = null !== C ? C: (C = _gtk || """") || """"; for (var e = t.split("".""), h = Number(e[0]) || 0, i = Number(e[1]) || 0, d = [], f = 0, g = 0; g < r.length; g++) { var m = r.charCodeAt(g); 128 > m ? d[f++] = m: (2048 > m ? d[f++] = m >> 6 | 192 : (55296 === (64512 & m) && g + 1 < r.length && 56320 === (64512 & r.charCodeAt(g + 1)) ? (m = 65536 + ((1023 & m) << 10) + (1023 & r.charCodeAt(++g)), d[f++] = m >> 18 | 240, d[f++] = m >> 12 & 63 | 128) : d[f++] = m >> 12 | 224, d[f++] = m >> 6 & 63 | 128), d[f++] = 63 & m | 128) } for (var S = h, u = ""+-a^+6"", l = ""+-3^+b+-f"", s = 0; s < d.length; s++) S += d[s], S = a(S, u); return S = a(S, l), S ^= i, 0 > S && (S = (2147483647 & S) + 2147483648), S %= 1e6, S.toString() + ""."" + (S ^ h) }"); return(parsed.CallMethod("token", text, gtk).ToString()); }
/// <summary> /// /// </summary> /// <param name="script"></param> public RedjsConfig(string script) { this.Script = script; //执行js 脚本,获取版本号 和 发布时间 using (ScriptEngine engine = new ScriptEngine("jscript")) { var _c = engine.Eval(script); ParsedScript _v_parsed = engine.Parse("function getVersion(){var _c = new Config(); return _c.version ;}"); var _v = _v_parsed.CallMethod("getVersion"); ParsedScript _t_parsed = engine.Parse("function getTime(){var _c = new Config(); return _c.releaseTime ;}"); var _t = _t_parsed.CallMethod("getTime"); this.Version = _v.ToString(); this.ReleaseTime = _t.ToString().ConvertTo <DateTime>();; } }