oracle packages加密,解析oracle 9i以前版本加密文件二

对上一篇文章做一下补充

create or replace function get_rowid wrapped

0

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

3

8

9200000----------解密方式--------

一、加密方式9200000代表的是oracle的版本,也就是9.2,但是在数据库中存储的确实是9200000的十进制形式,上篇文章中的图片已证明。

二、版本上一行的8标识的是加密的数据类型:

7-Procedure

8-Function

9-Package

b-Package Body

解密样本有限,暂时只列出这么多。

三、每个代码块都有代码长度,后面有个未知标记,应该为size of byte,推测应该是每个数据的最大字节数,比如2标识,下面的每个数据最大值都不超过2个byte。还有6个代码段,只转换了4个,每个代码段的意义将在下面说,这里说一下转换规则。仔细研究的人可能发现了,所有代码段的开头数据都是0,这就相当于编程语言中大部分数组的索引都是0一样,所以转换的时候都进行了忽略,直接跳过,从下一个索引进行转换的。

四、上文提到过代码块中冒号开头的数据,只是说了如何处理,搜索了一下,比较正式的说法是: RLE全称(run-length encoding),翻译为游程编码,又译行程长度编码,又称变动长度编码法(run coding) ,还有叫做行程长度编码压缩算法 。

结束补充内容,说一下4个转换表的大致作用。下面tab1代表第一个转换表,一共4个转换表。

tab1存储了文件的组成结构,比如B5表示global block end。

tab2存储的是tab1中数据的索引。

tab3存储的就是数据。

tab4存储的是参数,比如一个函数或者存储过程的in和out参数。

大致流程:

tab1中取出结构类型,根据tab2的索引,去tab3中取出数据。如果解析到的类型是参数,就去tab4进行查找处理。

假设tab1中10000001为aa,然后查找对应tab2的20000001的数据(tab1和tab2的长度是相等的,也是一一对应的)。比如tab2取出的数据是4,则从tab3中30000004开始取数据,根据类型取相应个数数据。tab3的长度要比tab1和tab2长很多,30000000+tab2的数据=数据起始位置。

以上就是tab1查找对应数据的过程。明白过程之后,tab2和tab3可以隐藏掉,简化过程,便于理解:

tab1----------(中间过程隐藏)--------->数据

隐藏过程后就是递归解析流程了,比如tab1中的68,代表的结构意思为declare procedure/function,它取出的数据为1 3 E 12,这些作为id再去tab1取出结构解析,

ID对应结构,id计算好为10000001,10000003,10000014,10000018,对应为

1->9A 3->55 E->11 12->17

再将结构进行解析,如此递归。

继续进行研究,下一篇文章争取拿一个简单的例子进行说明完整过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值