• ActiveX控件打包、签名、嵌入详解


    ActiveX控件打包、签名、嵌入详解

    前言

    在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理。这就导致我们每次给用户安装的时候,均需要手动注册一下。比较要命的是,一旦用户电脑上的摄像头黑屏或者不能用的时候,我们都需要远程指导用户怎么操作,相当麻烦。所以,遂决定将这些类库打包一下,以便实现自动无值守安装。

    这里先将工具列举一下:

    iexpress.exe  用于CAB打包

    signtool.exe  用于附加数字签名

    makecab.exe 用于CAB打包

    http://www.ca365.com 用于申请免费数字证书

    下面让我们开始进行制作。

    第一步,准备Inf配置文件。

    首先,新建一个后缀名为 dahua.inf 的文件并打开,输入如下内容并保存:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    [version] 
    signature="$CHICAGO$" 
    AdvancedINF=2.0 
       
    [DefaultInstall] 
    CopyFiles=files 
    RegisterOCXs=RegisterFiles 
       
    [DefaultUninstall] 
    cleanup=1 
    Delfiles=files 
    UnRegisterOCXs=RegisterFiles 
       
    [SourceDisksNames] 
    1 = %DiskName%,"dahua.cab",1 
       
    [SourceDisksFiles] 
    RealPlayX.ocx=1 
    dhnetsdk.dll=1 
    ssleay32.dll=1
    MP3Decoder.dll=1
    libeay32.dll=1
    jpegdec.dll=1
    IvsDrawer.dll=1
    dllmpeg4.dll=1
    dllh264.dll=1
    DllDeinterlace.dll=1
    dhplay.dll=1
    dhdvr.dll=1
    DhDecode.dll=1
    dhconfigsdk.dll=1
    AmrDll.dll=1
    AACDecoder.dll=1
       
    [RegisterFiles] 
    %11%dahuaRealPlayX.ocx 
       
    [DestinationDirs] 
    files=11, dahua 
       
    [files] 
    RealPlayX.ocx=RealPlayX.ocx
    dhnetsdk.dll=dhnetsdk.dll
    ssleay32.dll=ssleay32.dll
    MP3Decoder.dll=MP3Decoder.dll
    libeay32.dll=libeay32.dll
    jpegdec.dll=jpegdec.dll
    IvsDrawer.dll=IvsDrawer.dll
    dllmpeg4.dll=dllmpeg4.dll
    dllh264.dll=dllh264.dll
    DllDeinterlace.dll=DllDeinterlace.dll
    dhplay.dll=dhplay.dll
    dhdvr.dll=dhdvr.dll
    DhDecode.dll=DhDecode.dll
    dhconfigsdk.dll=dhconfigsdk.dll
    AmrDll.dll=AmrDll.dll
    AACDecoder.dll=AACDecoder.dll
          
      
    [RealPlayX.ocx]
    file-win32-x86=thiscab
    clsid={30209FBC-57EB-4F87-BF3E-740E3D8019D2}
    DestDir=11
    FileVersion=1,0,0,1
    RegisterServer=yes
     
    [Strings] 
    DiskName = "dahua" 

    最开始一般是[Version]区,这里不用管,保持默认内容就行。

    然后是[DefaultInstall]区,表明文件拷贝的地方,我们这里为[files]区下的所有文件,并将[RegisterFiles ]区下的文件进行注册。

    然后是[RegisterFiles]区,表明注册System32dahua文件夹下的RealPlayX.ocx

    然后是[DestinationDirs]区,11表明放到  WindowsSystem或者WinNTSystem32下,dahua则是创建的子级文件夹。

    最后是[RealPlayX.ocx]区,第一个file值告诉ie到哪里去得到这个ocx,file一共包括三个部分,第一部分是file,这个永远都是这样的;第二部分告诉声明支持的OS,win32表示windows,mac就是苹果MAC OX了;第三部分是CPU类型,比如说x86、mips等。file的值可以取三个:一个URL、ignore和thiscab,如果是URL则说明到URL所在的位置去下;如果是ignore说明对于这种OS和CPU,不需要下载这个文件;如果是thiscab就在当前的cab文件中了。第二部分是RegisterServer,可以取两个值yes和no,如果为yes则说明ie要注册该ocx,如果是no就不必了;接下来是clsid,需要填写该ocx的class guid。再下来是DestDir,它的值是ocx将要存到本地硬盘的位置,如果它的值是10,则将ocx放到Windows或者WinNT下;如果是11,则放到WindowsSystem或者WinNTSystem32下;如果是空(就是没有值)则会放到Windows或者WinNT下的Downloaded Program Files目录下;最后是FileVersion,说明了ocx的版本号。

    第二步,制作CAB包。

    打开iexpress,按照下面的顺序来一一进行:

    QQ截图20140227135052-1

    QQ截图20140227135112-2

    QQ截图20140227135154-3

    QQ截图20140227135218-4

    QQ截图20140227135227-5

    QQ截图20140227135250-6

    注意:在进行第五步的时候,请注意文件夹里面一定要放置makecab.exe,否则会导致生成不成功。

    所有步骤进行完成后,会得到一个dahua.cab包。

    第三步,对CAB包进行签名。

    首先,我们需要申请一个数字签名证书。

    打开http://www.ca365.com/网站,点击免费证书下的“用表格申请证书”选项,这时会弹出“申请免费证书“页面。其中,“识别信息”可以随意填写,“证书用途”要选择“代码签名证书”,“加密服务提供”是用微软提供的“Microsoft Strong Cryptographic Provider”,其他默认,点“提交”即可。最后点击”下载证书“就可以把生成的”大华网络监控.cer”下载到自己的电脑中。

    然后,我们需要将数字签名证书导入到IE中。

    打开IE浏览器,打开菜单,点选”工具“按钮,弹出下拉菜单,选择”Internet选项“,切换到”内容“选项卡,点击”证书“按钮,点击”导入“按钮,导入刚刚生成的数字签名证书。导入成功后,我们就可以看到相关证书信息了。

    QQ截图20140227140147-7

    之后,打开signtool.exe,在命令行窗口下输入signtool.exe  signwizard来启动可视化安装界面。按照如下图示一步一步进行:

    QQ截图20140227140401-8

     QQ截图20140227140454-9

    QQ截图20140227140502-10

    QQ截图20140227140526-11

    QQ截图20140227140605-12

    QQ截图20140227140613-13

    QQ截图20140227140622-14

    注意,其中一步需要填写”给数据盖时间戳“,我们将”将时间戳添加到数据中“ 选中,然后在时间戳服务URL栏写入:

    http://timestamp.verisign.com/scripts/timstamp.dll

    做完这一步,我们就可以得到一个完整的数字签名包。

    第四步:嵌入到网页中使用。

    打开网页,在需要嵌入的地方写入如下代码:

       1:  <object id="AV_RealPlayX" style="100%; height:100%;" 
       2:                      classid="CLSID:30209FBC-57EB-4F87-BF3E-740E3D8019D2"                     
       3:                      codebase="DaHua.CAB#version=1,0,0,1">
       4:                      <param name="_Version" value="65536" />
       5:                      <param name="_ExtentX" value="22357" />
       6:                      <param name="_ExtentY" value="16589" />
       7:                      <param name="_StockProps" value="0" />
       8:   </object>

    其中param根据你的activex的控件的需要进行配置。尤其需要注意classid和codebase这两个属性,只要配置对了就行。

    第五步:IE权限设置。

    由于Activex只能运行在支持Activex的浏览器中,尤其是IE中,所以这里我们需要对IE浏览器进行下设置。

    打开IE,点击”工具“菜单,点击”Internet选项“,在弹出的窗口中,选择”安全“标签,切换到”可信站点“,点击”自定义级别“,将”对标记为可安全执行脚本的ActiveX控件执行脚本“设为”启用“;将”对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本“设为”启用“;将”下载未签名的ActiveX控件“设为”提示“;将”下载已签名的ActiveX控件“设为”启用“即可。

    然后点击”站点“按钮,将”http://localhost“添加到可信列表,并去掉勾选”对该区域的所有站点要求服务器验证(https:)“。

    最后重启浏览器。

    第六步:设置完毕,运行。

    设置完毕后,打开浏览器,输入网址,运行:

    首先,我们可以成功看到视频效果:

    QQ截图20140227142205-15

    然后打开System32文件夹,我们可以看到一个名称为dahua的文件夹被建立,并且所有的dll和ocx都被放入了进来。

    好了,就是这些,希望对你有用。谢谢。

    添加信任列表

    最后需要说明,运行此Activex插件需要将当前网址添加到信任列表。请将如下的脚本保存为vbs文件,然后运行即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    on Error Resume Next
     
    Const HKEY_CURRENT_USER = &H80000001
     
    strComputer = "."
    Set objReg=GetObject("winmgmts:\" & strComputer & " ootdefault:StdRegProv")
    strKeyPath = "SoftwareMicrosoftWindowsCurrentVersionInternet Settings" _
        & "ZoneMapRangesRange1"
     
    objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
     
    strValueName = "http"
    dwValue = 2
     
    strValueNameEx = ":Range"
    dwValueEx="123.7.63.174"
     
    objReg.SetStringValue  HKEY_CURRENT_USER, strKeyPath, strValueNameEx, dwValueEx
    objReg.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
  • 相关阅读:
    资深项目经理推荐的几款免费/开源项目管理工具
    内网穿透工具frp简单使用教程
    10部全尺度欧美宫斗剧!献给不甘平淡的你
    Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!
    搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
    集成Activiti工作流的J2EE快速开发框架
    国内5大前端团队网站,你了解多少
    5 天 4000 star 的一个爆款开源项目
    「干货」常用的10个网络DOS命令,菜鸟学了变高手
    js自定义正则表达式
  • 原文地址:https://www.cnblogs.com/andyliu1988/p/5956394.html
Copyright © 2020-2023  润新知