根据.h或.hpp文件中的代码,有人可以了解您的应用是什么?

时间:2016-12-09 11:41:14

标签: c++ c++11

我不确定如何表达这个问题,所以如果有更好的方法,请随意改写: 通常,代码按以下方式在.h和.cpp文件之间分配..

  

类声明,函数原型和枚举之类的东西   通常进入头文件。总之,“定义”。

     

代码文件(.cpp)旨在提供实现   只需要在一个文件中知道的信息。一般来说,   函数体和应该/将永远不会的内部变量   由其他模块访问,属于.cpp文件。总之,   “实施方式”。

参考使用提交到iOS和Android应用程序商店的本机代码(C ++)的应用程序,外人可以通过检查包内容了解哪些信息?例如,我听说可以发现类定义和函数名称?这让我觉得这是因为.h文件中的正常情况。但是如果.h文件中包含函数体,它们是否也可见?如果有人正在检查我的应用程序,我是如何在.h和.cpp文件之间分隔我的代码会影响某人可以发现的内容吗?

编辑:我试图解决没有问题。我只是想根据我的.h文件中的代码来了解人们可以看到的内容。

1 个答案:

答案 0 :(得分:2)

免责声明:这只关注项目的C ++部分及其编译选项(根据问题的标签),而不是其他语言。

在编译本机库之后,标头和源文件之间没有区别。它们由预处理器组合成一个单独的“translation unit”(#include字面插入各自的位置等等)从那一点开始就没有任何区别来自哪个行来自哪个文件

什么是可见是导出函数的名称。你不能改变这一点,你可以通过给他们晦涩的名字让攻击者的生活更糟糕。并且您需要导出函数,因为它们是C ++和Objective-C斜杠项目共享的Java部分的通用语言:没有任何接口,无法以任何方式访问您的本机库。

就代码而言 - 正如一些程序员Dude所说,如果你的攻击者想要非常糟糕,他们找出你的代码所做的事情。 C ++命令不是可以直接恢复的(除非你用GCC或Clang中的-g编译调试符号),就像它们来自Java一样,所以这是一个混淆程度,但没有机器代码完全免于reverse engineering。如果不出意外,您的处理器需要最终了解要求遵循的步骤,并且您可以简单地模拟处理器。

TLDR:Java编译的代码很容易“读取”,C ++编译的代码不是.cpp / .h分离。