linux c++源代码,如何隐藏源代码中的常量字符串?使得通过反汇编难以获取到此字符串。 不使用加壳。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux c++源代码,如何隐藏源代码中的常量字符串?使得通过反汇编难以获取到此字符串。 不使用加壳。相关的知识,希望对你有一定的参考价值。

首先,要对这个常量字符串进行加密。
然后,加密用的密码(密钥)需要进行特殊处理。
比如:要保护字符串123456,用密钥13579进行加密。
密钥13579的16进制数组形式为:0x31, 0x33, 0x35, 0x37, 0x39, 0x00
你可以对这个数组进行数据干扰。比如:高位乱填数据(因为你知道是3),低位都加/减某数值:
变为了: 0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00
你在代码中对每一位进行恢复:
*p &= 0x0F, *p |= 0x30, *p -= 0x02,如此得到你的原始密码:13579;
反汇编看到的你的密钥串为:0xA3, 0xF5, 0x67, 0xD9, 0x3A, 0x00。
不知道你思路的话,只能碰运气猜啦。

在上面两种干扰方法基础上,你甚至还可以把高低位调换,这样就又加了一层干扰信息。
别人想破解也得好好猜一会了。
参考技术A 其实也可以
常量字符串
分成好几个小字符
代码混乱后拼起来

再 添加几个 干扰的 无意义 的字符 也在代码中跑 但不去干扰正常数据就可以
参考技术B 将字符串转成Byte数组,然后对这个二进制数据进行加密。然后在程序里使用的时候再解密,这样反汇编的时候就不会直接看到内容了。追问

加密使用的密码不还是存在同样的难题?

追答

不可能做到完全安全。只需要在一定程序上安全就可以了。往往是破解者觉得破解太过麻烦而不去破解。

追问

我的意思是:加密使用的密码也是常量字符串;也需要隐藏;

不同平台上比较方法中的 C++ 常量引用

【中文标题】不同平台上比较方法中的 C++ 常量引用【英文标题】:C++ constant reference in compare method on different platforms 【发布时间】:2015-12-15 19:46:20 【问题描述】:

我有这段用于对结构进行排序的 c++ 代码,

const bool operator<(P& p) const 
  //...

它在带有“gcc 4.9.2”的 linux 设备上编译没有任何问题。 但是,如果在带有“gcc 4.7.1”(Code::Blocks 13.12 附带的那个)的 Windows 机器上尝试它,它会产生令人讨厌的错误,您可以在此处看到 http://pastebin.com/S28tD9kc

在这两种情况下我都使用了编译:“g++ -std=c++11”

如果我将“operator

一个example。

【问题讨论】:

应该是const bool operator&lt;(P const &amp; p) const 顺便说一句,您可以并且应该将更高版本的 gcc 与 C::B 一起使用。 @M.M 不需要const bool,你走得太远了。 @MarkRansom 没有实际意义,它损害了可读性,但仅此而已 我不知道为什么这会吸引反对票,这似乎是一个合理的问题。 【参考方案1】:

这可能是因为在那些 gcc 版本中,排序的实现方式不同。我在 VS2005 下检查过,它也产生了这样的错误,但是从我的 stl 实现来看 - 我看到排序时使用了很多 const T&amp; 参数。如果在没有 const& 参数的情况下使用 operator

struct my_comp 
 bool operator() (const P& a, const P& b) const 
   return const_cast<P&>(a).operator<(const_cast<P&>(b));
 
;
std::vector<P> pp(10);
std::sort(pp.begin(), pp.end(), my_comp());

我不确定这是否是正确的代码,只是为了编译实验而写的。

另一方面,在 Visual Studio 2015 下,使用 operator

【讨论】:

以上是关于linux c++源代码,如何隐藏源代码中的常量字符串?使得通过反汇编难以获取到此字符串。 不使用加壳。的主要内容,如果未能解决你的问题,请参考以下文章

在哪里定义 C++ 中的错误代码常量

C++的字面值和字面值类型

不同平台上比较方法中的 C++ 常量引用

[C++] C++ 的常量究竟是什么? 它与 C# 和 Java 中的常量有什么区别? 应该如何理解常量?

如何在 C# 和 C++ 代码之间共享常量?

C++:隐式常量转换中的溢出 [-Woverflow]