0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
另一个似乎使用ORA_HASH的系统
好吧,如果它"似乎在使用",那么进行一些逆向工程并检查究竟是什么调用和反汇编函数代码是有意义的.
但是,如果您想深入了解Oracle内部,那么以下内容可能有所帮助.
首先,您必须弄清楚内部C函数的调用.为此,您可以在一个会话中执行一些长时间运行的代码.我做了这个
它也可以是PL/SQL代码,你只需要确保你经常调用ora_hash.
现在让我们谷歌为evahash.我们非常幸运,因为官方网站上有一个头文件,链接逃避.
最后是有实际C代码的页面
到目前为止,我们还记得,如果我们将它构建到库(Windows上的DLL)中,我们可以在Oracle中使用外部C函数.
例如,如果我将功能签名更改为我的Win x64
我们试着测试一下 Oracle
没有数字匹配.那么问题是什么?ora_hash接受几乎任何类型的参数(例如select ora_hash(sys.odcinumberlist(1,2,3)) from dual
),而C函数接受值作为字节数组.这意味着在函数调用之前发生了一些转换.因此,在使用提到的C哈希函数之前,您必须弄清楚实际值在传递给它之前是如何转换的.
您可以使用IDA PRO + hex ray继续对Oracle二进制文件进行逆向工程,但这可能需要数天时间.更不用说平台特定的细节了.
我希望这很有意思.祝好运.
如果我们打开dbms_utility的包体,我们将看到以下声明
让我们谷歌icd_hash
,我们可以发现它映射到_psdhsh
().现在是时候反汇编oracle.exe并从中提取代码了_psdhsh
.也许明年我会花一些时间.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。