zoukankan      html  css  js  c++  java
  • Chrome插件:本地程序实现验证码破解(浏览器与本地进程通信)

    利用chrome调用本地程序破解图片验证码
    background.js 

    var port = null, tabId, fname = "vcode.chrome.v1.item.01";
    //对应注册表HKEY_CURRENT_USERSoftwareGoogleChromeNativeMessagingHosts
    var hostname = 'com.dbing.net.host';
    
    //onNativeDisconnect
    function onDisconnected() {  
        port = null;
    }
    
    //
    function connect(data) {
        port = chrome.runtime.connectNative(hostname);
        port.onDisconnect.addListener(onDisconnected);
        port.onMessage.addListener(onNativeMessage);
        port.postMessage(data);
    }
    
    function onNativeMessage(msg) {
        chrome.tabs.sendMessage(tabId, { cmd: 'setCode', code:msg });
    }// 监听消息
    chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {    
        tabId= sender.tab['id'];    
        if (!request.cmd) return;
        if (request.cmd=='getCode')
            connect(request.url);
    });

    test.js

    var nodeCode = document.getElementsByClassName('login-code');
    var nodeImg, timer;
    send();
    
    function send() {
        if (nodeCode && nodeCode[0] && nodeCode[0].nextElementSibling) {         nodeCode[0].children[0].innerText = '';
            nodeImg = nodeCode[0].nextElementSibling;
            nodeImg.onload = function () { sendMsg(); } 
        }
    };
    function sendMsg() {   
    var r = nodeImg.getBoundingClientRect();    
        var rect = { x: r.x, y: r.y + window.outerHeight - window.innerHeight,  r.width, height: r.height }   
        var rs = Math.round(rect.x) + ',' + Math.round(rect.y) + ',' + Math.round(rect.width) + ',' + Math.round(rect.height);
           chrome.runtime.sendMessage({ cmd: 'getCode', url: rs });
    }
    
    
    // 监听消息
    chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
        
        if (request.cmd == 'setCode') {        
            console.log('setCode,login-code.length:', nodeCode.length)
            if (!nodeCode) return;
            nodeCode[0].children[1].value = request.code;
            sendResponse({ status: 1 });
        } 
    
    });

    app.json

    {
      "name": "com.dbing.net.host", //名称需跟注册表的项名称一致
      "description": "open host pro",
      "path": "C:\Users\Administrator\Pro\Demo\Pro.AI\bin\Debug\Pro.AI.exe",
      "type": "stdio",
      "allowed_origins": [
        "chrome-extension://blejflebmbmpebolcigedgkclijabeop/" 
      ]
    }

    manifest.json

    {
      "name": "本地管道通信", //名称
      "description": "chrome.本地通讯.管道流", //介绍
      "version": "1.0.1", //版本
      "manifest_version": 2, //必须为2
    
      "permissions": [
        //必须,定义权限,需要和本地应用程序通信
        "nativeMessaging",
        "downloads"   
      ],
    
      "content_scripts": [
        {
          "matches": [ "*://*.google.com/*" ],
          "js": [ "test.js" ],
          "run_at": "document_end"
        }
      ],
    
      "background": { "scripts": [ "background.js" ] } 
    }
  • 相关阅读:
    guava cache 缓存
    策略模式干掉if-else,switch
    一.投资理论
    死锁问题
    Redis连接数居高不下的问题
    Entity Framework Core To SQL问题
    数据字典
    Core2.0升级2.2
    NetCoreAPI版本控制
    WEBAPI的请求方式与请求类型
  • 原文地址:https://www.cnblogs.com/he-bo/p/10127259.html
Copyright © 2011-2022 走看看