一、开发环境及工具
本文所示代码环境:Windows10 x64专业版(19042.746)+ VS2015 Enterprise Update3。
本文所使用到的工具:Process Explorer v16.42 + CFF Explorer 。
二、航天发票税控软件概述
2021年年初,航天发布新一代增值税发票税控开票软件(金税盘版)软件3.0版,自3.0版开始使用了开源组件SOUI来开发界面,SOUI是C++轻量级Windows桌面开源DirectUI库,UI展示使用xml布局、配置,使UI界面与逻辑分离,类似于Duilib的开源UI库,相较于QT庞大的库文件着实轻量许多。
2.0版时代,安装航天开票程序后会启动一个 wtautoreg.exe 的进程,该进程是金税盘的值守程序,以响应金税盘的插入、拔出事件,当金税盘插入或拔出时会在系统托盘区提示相应信息,图1为通过Process Explorer查看的进程信息。
查看该进程相关信息可以看到其中加载了航天金税盘版国密库模块ai109b_gm.dll,如图2所示。
使用CFF Explorer加载查看该模块相关信息,当前系统是64位Win10,可以看到航天安装程序将该模块安装在系统文件夹(C:\Windows\SysWOW64)中,如图3所示。继续查看该模块导出函数,导出函数大约有170个左右,该模块既包含标准的国密SKF函数又夹杂着标准的pkcs11库,是个混合库,如图4所示。本文将简要谈谈利用这个模块中的国密SKF函数来读取金税盘中的数字证书,并解析出金税盘的基本信息。
3.0版取消了2.0版的值守程序wtautoreg.exe,但3.0版(目前最新版是V3.2.00.220104)安装程序仍自带该模块,因此本文示例代码适用于航天税控开票软件2.0/3.0版。
图1 航天开票软件值守进程
图2 航天金税盘版国密库模块
图3 航天金税盘版国密函数库模块
图4 航天金税盘版国密模块导出函数
三、金税盘信息获取程序(C++版)
金税盘中保存了二个数字证书:签名和加密证书。作为示例,本文主要展示如何读取金税盘数字证书的基本信息,如果需要获取其他信息可以从数字证书的二进制数据中进一步解析。下面我们来看看