1. 程式人生 > >Chrome外掛:本地程式實現驗證碼破解(瀏覽器與本地程序通訊)

Chrome外掛:本地程式實現驗證碼破解(瀏覽器與本地程序通訊)

利用chrome呼叫本地程式破解圖片驗證碼
background.js 

var port = null, tabId, fname = "vcode.chrome.v1.item.01";
//對應登錄檔HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts
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, width: 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" ] } 
}