利用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" ] }
}

Chrome插件:本地程序实现验证码破解(浏览器与本地进程通信)的更多相关文章

  1. Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..

    Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...

  2. 网页调用本地程序(Windows下浏览器全兼容)

    用网页调用本地应用程序的思路是,先进行注册表注册自定义一个URL Protocol协议,再利用URL Protocol实现网页调用本地应用程序. 1.先写一个注册表文件,将其保存为.reg后缀的注册表 ...

  3. 制作chrome插件/扩展程序,禁止谷歌浏览器访问某些网站

    简单地说,浏览器插件,可以大大的扩展你的浏览器的功能.包括但不仅限于这些功能: 捕捉特定网页的内容 捕捉HTTP报文 捕捉用户浏览动作,改变浏览器地址栏/起始页/书签/Tab等界面元素的行为 与别的站 ...

  4. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序

    本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...

  5. 通过私有协议Chrome浏览器页面打开本地程序

    近期方有这样的要求:这两个系统,根据一组Chrome开展,根据一组IE开展,需要Chrome添加一个链接,然后进入IE该系统的开发.这,需要Chrome跳转到创建一个链接IE浏览器指定的页面.同时也实 ...

  6. 开发一个简单的chrome插件-解析本地markdown文件

    准备软件环境 1. 软件环境 首先,需要使用到的软件和工具环境如下: 一个最新的chrome浏览器 编辑器vscode 2. 使用的js库 代码高亮库:prismjs https://prismjs. ...

  7. Windows和Mac浏览器启动本地程序

    前言 这几天有个需求,需要在IE上启动本地程序,就如下面一样. 一开始,我还以为IE有提供特殊的接口,类似上图中的“RunExe”,可以找了大半天觉得不对经(找不到该方法). 后来想想不对,这种方式是 ...

  8. 一个实现浏览器网页与本地程序之间进行双向调用的轻量级、强兼容、可扩展的插件开发平台—PluginOK中间件

    通过PluginOK中间件插件平台(原名本网通WebRunLocal)可实现在网页中的JavaScript脚本无障碍访问本地电脑的硬件.调用本地系统的API及相关组件,同时可彻底解决ActiveX组件 ...

  9. 利用chrome插件批量读取浏览器页面内容并写入数据库

    试想一下,如果每天要收集100页网页数据甚至更多.如果采用人工收集会吐血,用程序去收集也就成为一个不二的选择.首先肯定会想到说用java.php.C#等高级语言,但这偏偏又有个登陆和验证码,搞到无所适 ...

随机推荐

  1. Bootstrap指定表格字段宽度

    默认情况下,表格会占据屏幕所有宽度,可以使用bootstrap的布局功能.但表格标题字段的宽度必须与相应字段内容的宽度一致. <div class="container"&g ...

  2. UVa 12716 && UVaLive 6657 GCD XOR (数论)

    题意:给定一个 n ,让你求有多少对整数 (a, b) 1 <= b <= a 且 gcd(a, b) = a ^ b. 析:设 c = a ^ b 那么 c 就是 a 的约数,那么根据异 ...

  3. markdown(语法)入门学习:

    原文链接:https://segmentfault.com/a/1190000010223222#articleHeader9 1.标题 注:#后面保持空格 # h1 ## h2 ### h3 ### ...

  4. java 调用动态库打包sdk

    java连接c++动态库并生成jar包提供给别人调用 1.需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承 在项目的src目录执行,否则会提示 错误:找不到符号 ja ...

  5. spring boot 项目发布运行

    1. maven install 发布jar包 2. java -jar webservice.jar 启动jar包

  6. Qt事件系统之二:鼠标事件和滚轮事件

    在Qt中,事件作为一个对象,继承自 QEvent 类,常见的有键盘事件 QKeyEvent.鼠标事件 QMouseEvent 和定时器事件 QTimerEvent 等,与 QEvent 类的继承关系图 ...

  7. A - Add More Zero

    Bryce1010模板 #include <bits/stdc++.h> using namespace std; #define LL long long int main() { in ...

  8. 水题 Codeforces Beta Round #70 (Div. 2) A. Haiku

    题目传送门 /* 水题:三个字符串判断每个是否有相应的元音字母,YES/NO 下午网速巨慢:( */ #include <cstdio> #include <cstring> ...

  9. 加密解密(3)Bob到CA申请证书过程

    网络安全中最知名的人物大概就是Bob和Alice了,因为很多安全原理阐述中都用这两个虚拟人物来进行实例说明. 我们来看看Bob是怎么从CA中心获得一个数字证书的: 1.Bob首先创建他自己的密钥对(k ...

  10. D. Chloe and pleasant prizes 树上dp + dfs

    http://codeforces.com/contest/743/problem/D 如果我们知道mx[1]表示以1为根节点的子树中,点权值的最大和是多少(可能是整颗树,就是包括了自己).那么,就可 ...