当前位置:编程语言 -> C++语言 -> C++数据隐藏技术分析和代码实现

原创版权标志C++数据隐藏技术分析和代码实现

作者:codexia  发表时间:2016/9/1 23:46:28  阅读:1683
[摘要]本文属于进阶学习的,在提供给别人使用的代码中,我们可以利用数据隐藏技术将提供的头文件的类用到的各种数据成员隐藏起来,让使用者无需关心接口类的数据成员,也防止实现方法被逆向分析出来,在特殊保护代码场合会用到。而且这个技术还会大大增强接口的扩展性,维护升级更加方便。
文章来源:C++技术网 原创文章版权所有,未经授权,禁止转载。

    在提供给别人使用的代码中,我们可以利用数据隐藏技术将提供的头文件的类用到的各种数据成员隐藏起来,让使用者无需关心接口类的数据成员,也防止实现方法被逆向分析出来,在特殊保护代码场合会用到。

    之前我都没有关注过隐藏数据的做法,看到同事代码里用到了,而且看起来很厉害的样子,然后差不多了解一下,就自己来实现一下。其实这个数据隐藏技术并不会很难,只是对于初学者来说,可能有点绕而已。下面我全面分析一下,供部分需要学习的同学看。

    一般的的提供接口的文件结构是这样的,一个main函数所在的测试代码文件,一组接口代码(含头文件和CPP文件),头文件就是提供给别人使用的接口类声明。CPP则是生成Dll后提供给别人使用的,所以CPP里面的代码别人是无法知道的。

    在这种情况下,头文件和生成的dll或者lib一同提供给别人,为了让代码更好被人理解,我们会写一个测试代码,也就是main函数代码,演示接口的使用。cpp文件中的代码被编译成二进制代码后,是很难逆向分析出来的。所以可以很好的保护代码的安全性。然而,头文件必须暴露给别人的,否则你的接口别人是无法使用的。头文件是你dll的一个接口描述文档一样,所以头文件包含了大量的二进制代码的信息。但是一般情况下,我们都将数据成员声明在类里。这是最直接的,很所人会问,不放在类里放在哪里,这不是有点废话了吗。当然不是咯。如果成员变量都声明在类里,使用者是可以看到的。虽然你定义的一些成员变量是私有的,使用者也无法直接操作,却也被暴露给了使用者。一方面,让接口看起来繁杂,这个其实让使用者倒是挺烦的,接口越简单,越清爽。另一方面,不管是私有成员还是公有成员,都毫无遮掩。我们知道,一个程序的实现往往和成员变量的定义密切相关。也就是说,从你定义的成员变量的表示和结构,以及提供的一套接口函数,可以很大程度来推测你代码的实现原理,甚至是过程。在很多专业技术中,基本原理都是差不多的,有时候一个巧妙的实现可以突破瓶颈。但是这很容易从你的数据成员中看到端倪,进而推测实现。这样可以让你很快失去优势,他人不费吹灰之力就可以逆向分析,从而快速从你的接口结构中得到实现方法,进而追赶上你。

...【登录后阅读更多内容】

文章来源:C++技术网 原创文章版权所有,未经授权,禁止转载。


当前位置:编程语言 -> C++语言 -> C++数据隐藏技术分析和代码实现

  • codexia    2016/9/3 23:52:28回复
    当然,这里所说的技术不仅可以用在数据成员上,还可以用在以下这些地方:
    1.成员函数
    2.内部使用的类型定义
    3.其他所有内部使用的东西都可以隐藏。


返回顶部

关于我们 QQ群 广告服务 增值服务 捐款资助 版权声明 RSS订阅 站点地图 百度网站地图 意见反馈
鄂ICP备14001349号-2, Copyright © 2014-2017, CJJJS.COM/CJJJS.CN, All Rights Reserved

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)

C++技术网群聊