C:模糊处理的整

如果我有几个地方在我的代码是这样的整数...

int my_secret = 42;

......是有可能使其更难以找到在已编译的程序,整数。 我已经看到了这个做了使用字符串,例如通过用X字符移位每个字母,然后在运行时未移他们,但我怀疑这种技术将工作与数字。

--------------解决方案-------------

您可以通过两个变量之间分割该值做到这一点。 比如像这样:

volatile int my_secret_1 = 20;
volatile int my_secret_2 = 22;

然后用+ my_secret_2而不是my_secret my_secret_1。

volatile关键字是必要的,因为大部分(如果不是全部)的C编译器,否则优化。 以任何方式,最好是看到什么汇编代码由编译器产生的。

这永远不会奏效。 密钥应该永远,永远是在代码中。 在运行时的作品创造他们。 模糊处理是确实诱人的天意。

你可以在运行时通过一些功能,例如使用数字的平方,然后通过一个数学库函数求平方根的编译器不能优化计算。

当然,问题是,没有这一类型的东西都阻挡不住一个有决心的人。

它也可以说,你真的不需要理会。 模糊处理字符串使得很多的意义,因为有吨的易于使用的工具,这将倾倒字符串从一个exe。 您的42但只是将被编码为二进制数。 整个的exe是二进制数字只是一个长序列并没有搜索的42.你将不得不拆开exe文件,了解装配一个简单的工具。 任何人谁去要经过很麻烦很可能会找出一些无论你做什么。

所以,简单的答案是不要打扰它的模糊足以随便使用。

在哈桑的评论最初的问题是关键的一年。 这取决于你保持着怎样的秘密,为什么,至于有多少工作是-worth IT-。 一般来说,瞒着谁在使用它(在某一时刻)把这些值加在一起是不可能做到永远程序别人的东西。 你可以使它更难攻击者,但是。

那么问题就变成你想要多少工作去,以使其更难为攻击者。 然后,你可以做从代码混淆任何东西(不是很安全,但可能会阻止一个非常随意的攻击,是比较容易做到,特别是因为原始的源可以与正在发生的事情进行评论)全亮加密和一些“黑箱“式方法已用于复制保护(虽然甚至没有最终都是易碎)于,如果这是关键的是,提供这种作为东西Web服务,其中该代码是不会对最终用户的影响。 即使这并非总是失效保护。

那么,怎样的秘密,你想你的秘密,有多少工作,你愿意投入到设法保持这种方式?

我听说过使用自修改代码混淆的目的的人。 正如其他人所说,一个人决定的足够仍然可以破解它,但它使一个潜在的攻击者生活艰难,如果他们甚至不能看到最终的代码拆卸或设置断点在里面。 (设置断点达与更换内存字节INT 3指令;如果内存被修改为自修改代码操作的一部分,断点会消失,可能破坏我们的指导和领导,以更有趣。)

它仍然可以通过在调试器的代码单步。 为了部分抵消这一点,你可以测试的IsDebuggerPresent()偶尔会导致攻击者在雁追逐如果是的话。 当然,这也可能是反抵消,例如,通过DLL匀场,甚至创造一个低级别的设备驱动程序,如果有必要的。

有没有办法完全隐藏坚定的攻击这样的秘密,但有办法提高标准(这有时会同时作为一种防范措施,并一项临时措施。)

这样做的最简单的方法是通过采用一次性垫状异。

int pad = 322;
int secret = 360;
int value = pad ^ secret; // This is 42

可以添加的这种一次性垫组合,连同混淆加密功能,以使其更难为攻击者找到的值。

需要注意的是,尽管这使得它更难攻击者获得通过查看编译代码的关键,他们仍然可以附加一个调试器正在运行的进程,拉动计算的关键正确的内存不足。 事实上,有调试器(如IDA PRO),使这样的东西几乎是微不足道的。

你也不必担心操作系统分页的钥匙盘已经计算后,这是相当平凡提取。 (使用类似MLOCK()来锁定页面的内存可以帮助你与此有关。)

总之,这是一个非常棘手的问题,一方面,许多软件作者正在争夺与实现非侵入(如,无验证密钥在网络上)特许计划。

如何使用的补

int secret = ~42;
printf("%0X %0x" , secret , ~secret );

打印

FFFFFFD5 42

编辑:或使用宏

#define OBFUSCATE(X) (~(X)^0xdeadbeef)

int secret = OBFUSCATE( 42 );
printf("%0X %d" , secret ,OBFUSCATE( secret ));

2152413A 42

隐藏代表其在其他一些基值。 见例如在基地转化和基地64

真的是没有办法隐藏刚刚在节目中的一个整数,有人可能只是单步调试,以确定其最终值。

最好的办法是使用一些自动混淆混淆了整个程序/项目。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#,模糊,整
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.460 (s). 10 q(s)