【方便查看】webBrowser中JS 注入,关键时刻顶大用
这个方法 在一般的时候 可能没什么用 但是在关键时刻 最用就大了。。这比如 Post时候 如果 一些东西 被JS 加密 或者弄乱了,一般情况下,可以通过JS 还原 在代码中重现也可以,我碰到过在js中RSA加密的,但是 这个代码很多,又压缩过,几乎解压不了。并且这个Rsa 被他们动了手脚,已经无法还原了这个时候注入JS 代码就有用了,可以通过自己注入的JS 调那个加密的函数我这里搞的那个 我就不方便透漏了
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Security.Permissions;namespace WS.Subscriber.Core{ [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)] public static class JSRSA { private static mshtml.IHTMLDocument2 currentDoc; private static mshtml.IHTMLWindow2 win; private static WebBrowser webBrowser1 = new WebBrowser(); public static bool IsLoadFinish = false; private static bool IsLoaded = false; public static void Load() { if (!IsLoaded) { IsLoaded = true; webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser1.Navigate(http://Url); } } //加载完成触发 static void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { currentDoc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; win = (mshtml.IHTMLWindow2)currentDoc.parentWindow;
//注入自己的JS 代码 win.execScript("var tmpat = new App.RSAKey();tmpat.setPublic($CONFIG.$encode_key, $CONFIG.$key_plus || \"10001\");function tmpencrypt(str){return tmpat.encrypt(str)}", "javascript"); IsLoadFinish = true; } private static void ScriptReady() { IsLoadFinish = true; } public static string JSRSA(string str) { string result = ""; try { webBrowser1.Invoke(new System.Action(delegate() {
//调用自己注入的JS 方法 获取到加密串 result = webBrowser1.Document.InvokeScript("tmpencrypt", new object[] { str }).ToString(); })); } catch(Exception ex) { Spider.Common.ErrorHander.WriteRecord(ex.StackTrace); } return result; } }}