源代码如何包含与语言无关且仍然编译的“隐藏消息”?

时间:2014-05-06 19:20:16

标签: c++ assembly language-agnostic

this question on programmers提醒我,Nimda病毒的字面意思是“概念病毒(CV)V.5,版权所有(C)2001 R.P.China”。内置于它的代码中。这怎么可能?它不会导致编译时错误或至少被优化掉,因为它没有做任何事情吗?这是在病毒的消解版本中看到的吗?

1 个答案:

答案 0 :(得分:4)

这取决于病毒是如何开发的,但作为一个例子,在汇编中,这个:

UnusedString DB 'Concept Virus(CV) V.5, Copyright(C)2001 R.P.China.', 0

将字符串(null终止)嵌入到目标代码和可执行文件中。代码是否实际引用UnusedString对于大多数汇编程序来说是没有意义的(根据我的经验)。

Visual C ++将删除"未使用的局部变量"作为其死代码优化的一部分。但是,如果为变量赋值,但不使用它,则Visual C ++不会将其视为" unused",并将其保留在应用程序中。所以......

char UnusedString[] = "Concept Virus(CV) V.5, Copyright(C)2001 R.P.China.";

也会在应用程序中产生相同的以null结尾的字符串,但实际上并未使用该字符串。

然后是.exe或.dll文件的标题,可以包含大量内容。有关示例,请查看Microsoft提供的可执行文件的属性对话框。