利用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. .NETFramework-Drawing:Font

    ylbtech-.NETFramework-Drawing:Font 1.返回顶部 1. #region 程序集 System.Drawing, Version=4.0.0.0, Culture=ne ...

  2. 2-11 tensorflow常量变量定义

    D:\Users\ZHONGZHENHUA\Anaconda3\envs\tensorflow\Lib\site-packages\tensorflow https://developer.nvidi ...

  3. JS计算字符串实际长度

    http://www.qttc.net/201207136.html // UTF8字符集实际长度计算 function getStrLeng(str){ var realLength = 0; va ...

  4. 【原创】MapReduce备份Elasticsearch数据到HDFS(JAVA)

    一.环境:JAVA8,Elasticsearch-5.6.2,Hadoop-2.8.1二.实现功能:mapreduce读elasticsearch数据.输出parquet文件.多输出路径三.主要依赖 ...

  5. bzoj 2127 happiness【最小割+dinic】

    参考:https://www.cnblogs.com/chenyushuo/p/5144957.html 不得不说这个建图方法真是非常妙啊 假设S点选理,T点选文,a[i][j]为(i,j)选文收益, ...

  6. 支持宕机自动恢复触发一次性或周期性任务执行的组件包首次介绍-easyTask

    easyTask介绍 一个方便触发一次性或周期性任务执行的工具包,支持海量,高并发,高可用,宕机自动恢复任务 使用场景 需要精确到秒的某一时刻触发任务执行.比如订单交易完成24小时后如果客户未评价,则 ...

  7. springboot(五) 加载配置文件优先级顺序

    github代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service ...

  8. 安装ipython解释器

    安装ipython解释器 1.安装ipython,指定douban源下载 pip3 install -i https://pypi.douban.com/simple ipython 2.安装朱皮特 ...

  9. codeforces 570 D. Tree Requests (dfs)

    题目链接: 570 D. Tree Requests 题目描述: 给出一棵树,有n个节点,1号节点为根节点深度为1.每个节点都有一个字母代替,问以结点x为根的子树中高度为h的后代是否能够经过从新排序变 ...

  10. 彩色模型 分类: 图像处理 Matlab 2015-01-08 20:43 364人阅读 评论(0) 收藏

    彩色模型(又称彩色空间或彩色系统)是描述色彩的一种方法,本质上,彩色模型就是坐标系统和子空间的规范,系统中的每种颜色由单个点来表示.下面介绍两种最常用的彩色模型. 一.RGB彩色模型: RGB模型是最 ...