コード例 #1
0
        /// <summary>
        /// Inject a JavaScript element into the document head
        /// </summary>
        /// <param name="javaScript">the script code</param>
        public void InjectJavaScript(string javaScript)
        {
            if (null == this.Document)
            {
                return;
            }

            try
            {
                HtmlElement headElement   = this.Document.GetElementsByTagName("head")[0];
                HtmlElement scriptElement = this.Document.CreateElement("script");
                if (scriptElement == null)
                {
                    return;
                }

                scriptElement.SetAttribute("type", "text/javascript");

                // use the custom mshtml interface to append the script to the element
                IHtmlScriptElement element = (IHtmlScriptElement)scriptElement.DomElement;
                element.Text = "/* <![CDATA[ */ " + javaScript + " /* ]]> */";
                headElement.AppendChild(scriptElement);
            }
            catch (InvalidOperationException ioex)
            {
                Debug.WriteLine("InjectJavascript: " + ioex, "GEWebBrowser");
            }
        }
コード例 #2
0
        private static async Task <string> DecodeResponse(IHtmlDocument htmlDocument, HttpClient httpClient, HttpResponseMessage httpResponseMessage)
        {
            string responseString = await httpResponseMessage.Content.ReadAsStringAsync();

            string responseJson = string.Empty;

            if (responseString.StartsWith("{"))
            {
                responseJson = responseString;
            }
            else
            {
                if (JintEngine == null)
                {
                    IHtmlScriptElement appJsScript = htmlDocument.Scripts.FirstOrDefault(s => s.Source?.Contains("app.js") == true || s.Source?.Contains("app.min.js") == true);
                    string             appJsSource = await httpClient.GetStringAsync(appJsScript.Source);

                    List <JavaScriptHelper.Function> functions    = JavaScriptHelper.Parse(appJsSource);
                    JavaScriptHelper.Function        readFunction = functions.FirstOrDefault(f => f.Name == "read");

                    JintEngine = new Engine();
                    JintEngine.Execute(readFunction.Body);
                }

                JsValue jsValue = JintEngine.Invoke("read", responseString);
                responseJson = Encoding.UTF8.GetString(Convert.FromBase64String(jsValue.ToString()));
            }

            return(responseJson);
        }
コード例 #3
0
    private static async Task <string> DecodeResponse(IHtmlDocument htmlDocument, HttpClient httpClient, HttpResponseMessage httpResponseMessage)
    {
        string responseString = await httpResponseMessage.Content.ReadAsStringAsync();

        string responseJson = string.Empty;

        if (responseString.StartsWith("{"))
        {
            responseJson = responseString;
        }
        else
        {
            lock (DecodeResponseLock)
            {
                if (JintEngine == null)
                {
                    IHtmlScriptElement appJsScript = htmlDocument.Scripts.FirstOrDefault(s =>
                                                                                         s.Source?.Contains("app.js") == true ||
                                                                                         s.Source?.Contains("app.min.js") == true ||
                                                                                         s.Source?.Contains("app.obf.js") == true ||
                                                                                         s.Source?.Contains("app.obf.min.js") == true
                                                                                         );

                    Obfuscated = appJsScript.Source.Contains("obf.");

                    string appJsSource = httpClient.GetStringAsync(appJsScript.Source.Replace("obf.", string.Empty)).GetAwaiter().GetResult();
                    List <JavaScriptHelper.Function> functions = JavaScriptHelper.Parse(appJsSource);

                    JintEngine = new Engine();

                    JintEngine.Execute(functions.FirstOrDefault(f => f.Name == "read").Body);

                    if (Obfuscated)
                    {
                        Func <string, string> atob = str => Encoding.Latin1.GetString(Convert.FromBase64String(str));
                        JintEngine.SetValue("atob", atob);

                        JintEngine.Execute(functions.FirstOrDefault(f => f.Name == "gdidecode").Body);
                    }
                }

                JsValue jsValue = JintEngine.Invoke("read", responseString);

                if (Obfuscated)
                {
                    jsValue      = JintEngine.Invoke("gdidecode", jsValue.ToString());
                    responseJson = jsValue.ToString();
                }
                else
                {
                    responseJson = Encoding.UTF8.GetString(Convert.FromBase64String(jsValue.ToString()));
                }
            }
        }

        return(responseJson);
    }
コード例 #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="scriptElement"></param>
 public Javascript(IHtmlScriptElement scriptElement)
 {
     ScriptElement = scriptElement;
     Content       = scriptElement.Text;
 }
コード例 #5
0
        /// <summary>
        /// Converts AngleSharp Script to BrowseSharp Javascript
        /// </summary>
        /// <param name="scriptElement"></param>
        /// <returns></returns>
        private Javascript ConvertToJavascript(IHtmlScriptElement scriptElement)
        {
            Javascript javascript = new Javascript(scriptElement);

            return(javascript);
        }