2021年1月13日

编写谷歌插件给指定页面注入js

作者 huruwo

注入js->js rpc

最近搞某个页面的js参数算法,直接去抠js太累。
想到了搭建 js rpc 的方式

为了使用渣渣的https://github.com/virjar/sekiro框架,搭建需要把sekiro_web_client.js注入到指定页面

注入方法

检索到的方法有

1.Fiddler的AutoResponder
2.谷歌插件
3.油猴插件(同理谷歌插件)

选择谷歌插件,脚本最简单 只需要开启浏览器即可

谷歌插件编写

1.核心配置文件manifest.json

按照文档即可 主要是一些插件设置

{
     // 会一直常驻的后台JS或后台页面
    "background":{
        // 2种指定方式,如果指定JS,那么会自动生成一个背景页
        "page": "background.html"
        //"scripts": ["js/background.js"]
    },
    "browser_action":{
        "default_icon": "icon.png",        // 图标悬停时的标题,可选
        "default_popup": "popup.html",
        "default_title": "JS注入工具"
    },
     "content_scripts":[{
            // 多个JS按顺序注入
            "js": ["jquery.min.js", "content_script.js"],
            "matches": ["http://www.baidu.com/*", "https://www.baidu.com/*"],
            // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
            "run_at": "document_start",
             "all_frames":true
        }],
    "description": "JS注入工具",
    "icons":{
        "16": "icon.png",
        "48": "icon.png",
        "128": "icon.png"
    },
    "manifest_version": 2,
    "name": "awaycode专用插件",
    "permissions":["<all_urls>","webRequest","webRequestBlocking","tabs", "http://*/*","https://*/*","contextMenus","cookies","unlimitedStorage","notifications","storage","clipboardWrite"],// 权限申请
    "version": "3.0.0"
}

核心部分就是:

"content_scripts":[{
            // 多个JS按顺序注入
            "js": ["jquery.min.js", "content_script.js"],
            "matches": ["http://www.baidu.com/*", "https://www.baidu.com/*"],
            // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
            "run_at": "document_start",
             "all_frames":true
        }],

申明注入文件和注入时机以及作用域

除了必要的设置插件名外 还有几个额外引入的文件

background.html:在后台的背景页 这里不重要为空
popup.html 下拉菜单页面 这里不重要 为空
jquery.min.js 引入jq方便操控DOM
icon.png 图标
content_script.js 核心注入类

2.核心注入文件 content_script.js

(function(){
    'user strict';
    var s = document.createElement('script');
    console.log("正在注入js代码");
    s.src="https://www.www.wwww/sekiro_web_client-11dfe64bc7024a49ad923239b4a090b3.js"
    document.documentElement.appendChild(s);
})();

这里我把渣渣的js上传到静态服务器了,方便访问。也可以本地存放,相对路径即可。

最终的文件目录

image.png

安装插件

扩展程序-->加载已解压程序-->选择文件夹

image.png

好的 可以打开百度页面了,测试是否注入成功

image.png

测试注入成功

接下来可以使用函数接入ws

  function guid() {
            function S4() {
                return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
            }
            return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
        }
        var client = new SekiroClient("wss://xx.xx.xx.xx/websocket?group=ws-group-test&clientId="+guid());
        client.registerAction("screen_token", function (request, resolve, reject) {
            resolve("函数调用");
        });

也就是需要提前部署一个长连接服务框架在远程服务器

https://github.com/virjar/sekiro 下载jar包

链接上即可愉快的使用js的RPC功能了。

sekiro_web_client