艺灵设计

全部文章
×

javascript骚操作之读取U盘序列号制作抢红包开挂程序

作者:艺灵设计 - 来源:http://www.yilingsj.com - 发布时间:2021-01-27 20:40:48 - 阅: - 评:0 - 积分:0

摘要:好久没有分享关于javascript相关的文章了,今天来一篇骚操作。如实说,用javascript读取U盘序列号,当听到这个需求的时候我整个人就已经傻了,javascript还有这操作?这么屌的吗??事情证明,javascript确实可以读取U盘序列号......

1、需求

上周凯哥提了个需求,大致是:搞个抢红包的外挂,然后代码跟U盘序列号绑定。当时听完我整个人都懵了,心理活动:卧槽!javascript还有这么骚的操作?U盘这属于硬件,javascript还能这么搞???反正我是满脑子的问号。

随后,凯哥给我发了个网址,有兴趣的可以看看→→用JavaScript获取指定U盘的物理序列号。原来早在之前就有人这么干过,只不过凯哥在本地跑代码时程序报错,代码跑不起来......

2、踩坑之路

2.1、javascript到底能不能读取U盘序列号呢?

话不多说,直接祭出神器Ctrl+C,Ctrl+V。打开浏览器控制台一看,果真报错了。错误信息如下:
Uncaught ReferenceError: ActiveXObject is not defined
如图:非IE浏览器报错ActiveXObject

网上搜索一圈后发现,原来javascript之所有能够读取U盘序列号是使用了ActiveX控件,而这个控件是微软独有,只有基于IE内核的浏览器才能使用。

既然如此,打开ie浏览器后成功弹窗“请插入U盘”。如图:用IE浏览器打开时会弹窗请插入U盘当我把U盘插到笔记本上后再刷新网页,发现一堆弹窗。事实证明,javascript确实可以读取U盘序列号,只不过要在IE内核的浏览器上才行。当然了,如果看官使用360极速浏览器并切换到IE模式,也是可以的哈。

2.2、优化代码

如果看官复制了文章前面提到的网址中的代码到本地测试的话会发现一个问题:多次弹窗。再看代码,可以发现逻辑是这样写的。

  1. for (; !e.atEnd(); e.moveNext()) {
  2.   var p = e.item();
  3.   var strSN;
  4.   var uSerialNum;
  5.   var sn = p.DeviceID
  6.   if (sn.indexOf("VID") > 0) {
  7.     strSN = GetUsbSN(sn);
  8.     uSerialNum = strSN.substring(8);
  9.     arrayUsbSN[intCount] = strSN;
  10.     intCount = intCount + 1;
  11.     alert("你的U盘系列号为:"+ uSerialNum);
  12.   }
  13. }

发现问题了没有,弹窗的alert在一个for循环中,所以当循环次数超过1次时,就会出现多次弹窗。

修改的话也很简单,把uSerialNum放循环外面接收就行了。

  1. var uSerialNum;
  2. for (; !e.atEnd(); e.moveNext()) {
  3.   var p = e.item();
  4.   var strSN;
  5.   var sn = p.DeviceID
  6.   if (sn.indexOf("VID") > 0) {
  7.     strSN = GetUsbSN(sn);
  8.     uSerialNum = strSN.substring(8);
  9.     arrayUsbSN[intCount] = strSN;
  10.     intCount = intCount + 1;
  11.   }
  12. }
  13. alert("你的U盘系列号为:"+ uSerialNum);

这样的话,就避免了出现多次弹窗的情况。完整代码在文章末尾,有兴趣的可以自行下载。

2.3、javascript获取的到底对不对呢?

当时艺灵我还在网上下了一些软件进行测试,测试发现确实和软件检测出的一样。如图:javascript读取和软件检测结果相同当时我以为这就完事了,后面的事实证明:这是一个大坑,因为还有“山寨”盘!!!这个后面会讲到,有兴趣的小伙伴可以继续往下看。

2.4、本地可以发送ajax请求吗?

不得不说,这又是一个坑!我在代码写完后测试时提出的结论是:除IE浏览器外,360极速浏览器、Chrome浏览器打开本地页面是可以发送ajax请求的,但IE不行。如果IE通过网址访问,哪怕是本地的服务网址,也是可以发送ajax请求的。

那这个问题严重吗?

当然严重啊!因为艺灵我此时又有了新的发现!读U盘的代码在IE浏览器中通过本地网页访问是可以获取到序列号的,当通过网址访问时,代码出现报错!如图:IE浏览器支持本地网页执行ActiveXObject函数

现在的情况就有点儿尴尬了,鱼与熊掌不可兼得,这可怎么是好?

又花了好长时间,我用了一个更骚的操作把这个问题解决了。哈哈哈哈哈,我可真是个小机灵鬼[:滑稽]。至于是什么操作,暂且留个悬念,看官仔细思考下应该没问题。

2.5、“山寨”U盘到底有多坑?

前面艺灵我已经解决了javascript读取U盘序列号的问题,又解决了IE浏览器打开本地网页发送ajax的问题。当我把代码安装到U盘中进行最后的测试时,一个弹窗“该U盘无权操作!”让我崩溃!卧槽,什么情况?前面测试还好好的,怎么现在突然翻车了???

立即打开调试模式,结果惊喜的发现,U盘的序列号发生了变化!!!U盘还是那个U盘,怎么序列号突然就发生了变化呢???这车翻的我措不及防......

随后,我又拿着这个U盘在公司的几个台式机上进行了测试,更让人惊喜的是:插机箱上不同的usb插槽时,打印的序列号也是不一样的!不敢相信眼前这一幕的我又用网上的软件进行测试,结果每次软件读取的也不一样!如图:同一个U盘在不同的usb插槽上检测出序列号也不一样.png同一个U盘在不同的usb插槽上检测出序列号也不一样当时我差点儿吐血身亡!花了2天多的时间把程序写完了,最终测试时你给我来这套???

按理来说,U盘的序列号应该是唯一且不会随着usb插槽而发生变化的才对。那为什么现在这个U盘变成了百变U盘呢?好在公司还有一个U盘,然后我把代码改了下,拷贝到另一个U盘中进行了上述测试。结果发现,所有usb插槽上读取的数据是唯一且不变的。看到此时,我那颗悬着的心终于落了下来。那现在唯一的解释可能就是:前面那个U盘有毒,极有可能是个山寨货![:笑哭]

3、源码下载

资源下载→→javascript读取U盘序列号.7z

4、最后

javascript读取U盘序列号这个骚操作让我对js有了新的认知,没想到在IE浏览器中还能玩出新高度,牛逼!!!

转载声明:
  若亲想转载本文到其它平台,请务必保留本文出处!
本文链接:/jquery/2021-01-27/javascript-read-u-disk.html

若亲不想直保留地址,含蓄保留也行。艺灵不想再看到有人拿我的技术文章到他的地盘或者是其它平台做教(装)程(B)而不留下我的痕迹。文章你可以随便转载,随便修改,但请尊重艺灵的劳动成果!谢谢理解。

亲,扫个码支持一下艺灵呗~
如果您觉得本文的内容对您有所帮助,您可以用支付宝打赏下艺灵哦!

Tag: javascript ActiveX控件 ActiveXObject U盘序列号 抢红包 开挂程序 IE浏览器 ajax请求

上一篇: 帝国CMS7.5二次开发之制作Ajax版重发帐号激活插件   下一篇: 帝国CMS7.5二次开发之制作Ajax版密码安全修改插件

评论区