程序员要从0下表开始,这篇是介绍这个系列的背景的,没有兴趣的人可以直接跳过。


为什么要开发ActiveX控件

由于工作需要,我们开发了一个网站,使用了一款身份证识别仪的网页ActiveX(OCX)插件。但是我发现现在市面上各种识别仪的ActiveX插件都有一个共同的问题,都是可以被仿冒伪造,好多厂家为了适应性,采用了同一个ClassID,实现同样的接口来读取信息。

我们的网站是要给到下线使用的,他们有些就会安装一些身份证读取软件,来通过实现一个同样接口同样ClassID的ActiveX,达到身份证读取欺诈的目的。例如clsid:10946843-7507-44FE-ACE8-2B3483D179B7

<form id="form1" runat="server">
<OBJECT classid="clsid:10946843-7507-44FE-ACE8-2B3483D179B7"
id="CVR_IDCard" name="CVR_IDCard" width="0" height="0" >
</OBJECT> <script language="javascript" type ="text/javascript"> function Button1_onclick() {
var CVR_IDCard = document.getElementById("CVR_IDCard");
var strReadResult = CVR_IDCard.ReadCard();
if(strReadResult == "0")
{
ClearForm();
document.all['Name'].value = CVR_IDCard.Name;
document.all['Sex'].value = CVR_IDCard.Sex;
document.all['Nation'].value = CVR_IDCard.Nation;

既然欺诈的ActiveX这么猖獗,而身份证识别仪必须采用ActiveX控件的方式读取外设,所以我们需要开发自己的安全的ActiveX控件。

PS:一开始我们也觉得从技术上是无法完全防范的,从业务规范上的防范会更有效,甚至说安装个摄像头防止下面乱来都会有效。不过既然这里是技术博客,我们还是从技术层面做点探讨


为什么要从ActiveX调用另一个ActiveX

既然身份证厂家提供了ActiveX(也就是OCX形式的控件),有的甚至会卖大包提供SDK包,也就是下面DLL的调用说明

华视电子识别仪驱动目录↓

南京艺数识别仪驱动目录↓

如果我的ActiveX调用他们的DLL,当然技术上是简单,但是因为识别仪厂家的驱动是不同的,而且DLL的接口也不尽相同,有的甚至不会提供接口文档,就会造成通用性很差。

如果我的ActiveX调用他们的ActiveX,因为大家提供给网页端都有同样的接口,所以通过ActiveX调用ActiveX会更加简单和通用。为了增加安全性,我们的ActiveX不会通过网页进行中转,而是在内存中直接调用识别仪厂家的ActiveX。

var CVR_IDCard = document.getElementById("CVR_IDCard");
var strReadResult = CVR_IDCard.ReadCard();
if(strReadResult == "0")
{ document.all['Name'].value = CVR_IDCard.Name;
document.all['Sex'].value = CVR_IDCard.Sex;
document.all['Nation'].value = CVR_IDCard.Nation;

识别仪厂家的ActiveX控件有什么问题?

问题多了去了!!!我简单分析了BS加载识别仪数据的过程,有多个漏洞点可以想办法绕过。

1:可以通过通信截取的,例如用Fiddler等工具拦截通信,修改读取的信息

2:直接在浏览器通信前用js脚本修改数据

3:修改注册表,将ActiveX控件的指向自己写的一个伪造控件,服务器就分不清是真控件读取的还是伪造控件读取的

4:大部分识别仪厂家的ActiveX控件都是基于公安部发布的几个动态链接库,如termb.dll、sdtapi.dll等,这些dll的接口都是无校验的。写一个伪造的termb.dll替换官方的dll,就可以范围伪造的信息。

5:从dll读取usb端口应该还有文章可做,只是过于底层没有深入研究

还没算系统钩子、反编译破解等高级方法,当然我也不是安全方面的专家,至少将1、2、3等门槛较低的问题修复也就差不多了,为了达到这个目的,我们的做法是开发一个ActiveX来调用识别仪厂家的ActiveX控件,并作安全处理(至于中间的安全做法和防护方法,不在本系列讨论内容)。

开发ActiveX控件调用另一个ActiveX系列0——身份证识别仪驱动的问题的更多相关文章

  1. 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件

    ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...

  2. 开发ActiveX控件调用另一个ActiveX系列3——ActiveX调用另一个ActiveX

    终于进入正题了,怎样在ActiveX中调用另一个ActiveX.我们的项目需要调用华视电子身份证识别仪的ActiveX控件 在这里有很多识别仪ActiveX插件下载:http://www.idukaq ...

  3. 开发ActiveX控件调用另一个ActiveX系列2——调试ActiveX

    关于调试ActiveX控件,有若干方法,例如可以建一个MFC工程调用调试,我则倾向于使用附加到浏览器进程,因为浏览器才是真正运行的环境. 打开加载ActiveX的目标页面,当然希望我们的调试内容不是自 ...

  4. Js或 Activex 控件调用打印预览等操作

    <input value="打印" type="button" onclick="javascript:window.print()" ...

  5. 如何用ATL创建ActiveX控件

    演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...

  6. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  7. {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件

    在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...

  8. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  9. c# ActiveX 控件的开发

    关于ActiveX控件的开发,网上很多例子,昨天也整整研究一天才捋顺了. 网上大部分例子都是js调用控件的方法,由于要实现在html页面"相应"控件的事件,整整折腾一天. 关键点在 ...

随机推荐

  1. react之只用classNames避免字符串拼接

    之前在react当中使用了字符串拼接的方式来拼接类名的字符串,这种方法不仅不够方便,还会出现很多问题 使用classNames这个工具,可以省去拼接字符串的烦恼,大大提高开发效率 首先,最简单的使用方 ...

  2. 关于Delphi cxGrid主从表中从表只能编辑第一条记录的问题

    在Delphi cxGrid主从表中从表只能编辑第一条记录,这个问题是由于设置主从关联字段错误造成的. 从表DBtableView2的keyfieldnames,DetailKeyFieldNames ...

  3. 【AtCoder Regular Contest 076 F】Exhausted (贪心)

    Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...

  4. 《Java性能权威指南》笔记----Java性能调优工具

    OS 1.CPU 用户态时间(us):cpu执行应用代码所占时间的百分比. 内核态时间(sy):cpu执行内核代码所占时间的百分比,系统态时间与应用相关. 空闲时间(id):cpu空闲时间百分比.空闲 ...

  5. 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络

    4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...

  6. Codeforces 918D MADMAX 图上dp 组合游戏

    题目链接 题意 给定一个 \(DAG\),每个边的权值为一个字母.两人初始各占据一个顶点(可以重合),轮流移动(沿着一条边从一个顶点移动到另一个顶点),要求每次边上的权值 \(\geq\) 上一次的权 ...

  7. glRectf(-0.5f, -0.5f, 0.5f, 0.5f)

    http://bbs.csdn.net/topics/370049656 x向右,y向上时OPENGL坐标系,z向屏幕外表示正方向(-0.5,-0.5)是左下角坐标,(0.5,0.5)是右上角坐标,, ...

  8. 学习总结——JMeter做WebService接口功能测试

    用JMeter作WebService接口功能测试(可以借助SoapUI来完成) SoapUI里面的操作: Wsdl文件或链接导入或添加到SoapUI打开待测请求:运行请求:取URL  SOAPActi ...

  9. jquery 中的post和get方法同步问题

    解决方法: 在需要同步的js代码前修改ajax的async属性. 有两种设置方法: 1: $.ajaxSettings.async = false; 2: $.ajaxSetup({ async : ...

  10. validate插件使用

    validate插件使用 官网:http://jqueryvalidation.org/ 项目实操 引入文件 add.html调用(注意顺序问题) 为form表单定义一个ID,以方便获取该元素 添加验 ...