通da信股本变迁gbbq权息文件解密

点击上方蓝字[协议分析与还原]关注我们


 解密及完全解析通da信股本变迁gbbq权息文件。

前些天,被一位陌生人耍猴了,很不开心,求安慰。这个人,姑且称为讨厌的家伙吧,找我分析通da信gbbq文件的解密算法,报价后满口同意,并提了一堆要求,让我加班加点给他搞定,却在帮他搞定后喊穷乱压价,这个讨厌的家伙真的很是无耻。

言归正传,之前分析过通da信TCP长连接数据的算法:

通da信TCP长连接数据算法分析

它的数据是压缩未加密的。

通da信的资源很丰富,大量的第三方软件依赖它来实现,而在通da信安装目录下的的\T0002\hq_cache目录内,存在gbbq和gbbq.map两个文件,它包含了中国证券市场有史以来所有的股本和权息信息,非常的完整。

另外,通da信有很多不同的券商定制版本,例如招商证券的智远一户通等,皮不一样,本质相同。

gbbq是加密的,而gbbq.map文件则是未加密的很多数字,协议分析与还原公众号将介绍前者解密的方法,并对解密后的数据格式进行解析,然后对后者的含义进行解释,让大家有个开心的体验,掌握第一手的数据,是快人一步的前提。

另外,后续还将对同花顺等软件进行分析,实现一些小功能,有兴趣的可以找我聊聊(微信号ProtoSec)。

01

gbbq文件解密

使用二进制编辑器(例如UE)打开gbbq文件,会看到好多的二进制数据,当然是需要解密的:

仔细观察,头四个字节应该是长度相关的数据,为记录的条数,每条记录29字节,可以去算一算,文件大小对得上,根据分析,算法为3DES,每条记录的前24字节加密,而后5字节没有加密。直接上解密的核心代码,C的:

  unsigned char *pKeyNow=key;
  unsigned char *pDataNow=*pdata+4;
  int count=*(int*)*pdata;
  while (count && pDataNow<*pdata+insz)
  {
    for (int i = 0; i < 3; i++)
    {
      unsigned int eax = *((unsigned int*)(pKeyNow + 0x44));
      unsigned int ebx=*((unsigned int*)(pDataNow));
      unsigned int num = eax^ebx;
      unsigned int numold = *((unsigned int*)(pDataNow + 0x4));


      for (int j = 0x40; j > 0; j = j - 4)
      {
        ebx = (num & 0xff0000) >> 16;
        eax = *((unsigned int*)(pKeyNow + ebx * 4 + 0x448));
        ebx = num >> 24;
        eax += *((unsigned int*)(pKeyNow + ebx * 4 + 0x48));
        ebx = (num & 0xff00) >> 8;
        eax ^= *((unsigned int*)(pKeyNow + ebx * 4 + 0x848));
        ebx = num & 0xff;
        eax += *((unsigned int*)(pKeyNow + ebx * 4 + 0xC48));
        eax ^= *((unsigned int*)(pKeyNow + j));


        ebx = num;
        num = numold^eax;
        numold = ebx;
      }
      numold ^= *((unsigned int*)pKeyNow);
      unsigned int *pInt = (unsigned int*)pDataNow;
      *pInt = numold;
      pInt = (unsigned int*)(pDataNow+4);
      *pInt = num;
      pDataNow = pDataNow + 8;
    }
    pDataNow = pDataNow + 5;
    count--;
  }

这里的key是已经初始化好的密钥结构体数据块,具体的过程就是几次异或循环。

解密后,得到明文的数据文件:

诶,还是有乱码,怎么回事呢,其实,这是因为数据本来就是二进制的,需要对数据格式进行解析,继续看后面。

02


gbbq文件数据格式解析

股本变迁gbbq权息文件解密后得到的文件是二进制格式,去除文件前四个字节后,每29字节为一条记录,每条记录里面的数据字段如下:

其中,m为市场类型,占1字节,0为深市,1为沪市。股票代码为字符串,占7字节,其中最后一字节为0。日期为整数,占4字节,为年月日的格式,如图中8DA72F01转下字节序,即为19900301,t为数据类别,占1字节,不同的t值表示不同的数据类型,t值取值区间为1~14,根据t的值不同,之后的四个数据含义不同,数据1、数据2、数据3、数据4这四个数据均是float型数据,各占四字节。

下面列出不同数据类别t的含义以及对应的四个数据的含义:

protosec数据类别t
1 除权除息 
  数据1  分红
  数据2  配股价
  数据3  送转股 
  数据4  配股   
2 送配股上市
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
3 非流通股上市
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
4 未知股本变动 公众号协议分析与还原
  数据1   0
  数据2   0
  数据3   0
  数据4   0
5 股本变化
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
6 增发新股
  数据1  0
  数据2  增发价
  数据3  增发数量
  数据4  0 
7 股份回购
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
8 增发新股上市
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
9 转配股上市
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
10 可转债上市 protosec
  数据1  前流通盘
  数据2  前总股本
  数据3  后流通盘
  数据4  后总股本 
11 扩缩股
  数据1  0
  数据2  0
  数据3  比例
  数据4  0
12 非流通股缩股
  数据1  0
  数据2  0
  数据3  比例
  数据4  0
13 送认购权证
  数据1  行权价
  数据2  0
  数据3  份数
  数据4  0
14 送认沽权证
  数据1  行权价
  数据2  0
  数据3  份数
  数据4  0

最终解析出的数据整理后如下:

如果没整理,则是这种形式:

条数,市场,股票代码,日期,数据类别,数据1,数据2,数据3,数据4

0,0,000001,19900301,1,0.0,3.559999942779541,0.0,1.0

1,0,000001,19910403,5,0.0,0.0,2650.0,4850.01708984375

2,0,000001,19910502,1,3.0,0.0,4.0,0.0

3,0,000001,19910502,2,2650.0,4850.01708984375,3949.072265625,8975.1640625

4,0,000001,19910817,1,0.0,0.0,10.0,0.0

5,0,000001,19920323,1,2.0,0.0,5.0,0.0

6,0,000001,19930524,1,3.0,16.0,8.5,1.0

7,0,000001,19930524,2,3949.072265625,8975.1640625,18812.984375,26941.7890625

8,0,000001,19930630,2,18812.984375,26941.7890625,18004.330078125,26125.369140625

9,0,000001,19940709,2,18004.330078125,26125.369140625,19804.76953125,28737.91015625

还是前面整理的好,如果想要解析好了的数据样例,找我获取吧,wx:protosec。

当然,需要注意一下,里面的b股的价格相关数据,是人民币价格,如果要转成美元价格,需要根据当时的汇率转换下。

03


gbbq.map文件数据解析

前面介绍了gbbq文件的解密和解析,这里继续介绍下gbbq.map,它是明文的,没有加密,全部是数字,截取一段内容是这样:

0000017703  
0000027760  
0000047695  
0000056936  
0000067760  
0000077412  
0000087546  
0000097756  
0000107542  
0000117497  
0000127775  
0000147497  
0000167487  
0000176808  
0000197542  
0000206544  
0000217548  
0000237503  
0000257497  
0000267699  

它的含义很简单,每行一个股票的描述,前6字节为股票代码,后4字节为更新批次,表示gbbq里面该股票的数据最近一次是更新是哪一次,大家可以不纠结它。

04


结束

到这里,对通da信gbbq相关文件的解析就结束了,大家如果对此有什么问题,撩我,不要耍我。再透露下,后面可能会搞搞同花顺的小工具,为大家服务,至于啥时候搞,谁知道呢,祝大家发财。

别忘点“在看”、“赞”和“分享”

新的规则,及时收推文要先给公号星标

别忘了星标一下,不然就错过了

长按进行关注,时刻进行交流。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值