Pan*_*rit 15
原始登录程序接受来自文件的匹配的名称和密码对.
修改是添加一个超级强大的密码,编译到登录程序中,允许root访问.为了确保在读取登录程序时看不到此代码,编译器会更改以识别登录程序的这一部分,即其原始格式并将其编译为超级强大的密码二进制文件.然后,为了在编译器中隐藏此代码的存在,需要对编译器进行另一次更改,以识别编译器中添加了第一个更改并输出修改后的表单的部分.
一旦更改的编译器代码存在,您可以编译编译器并将其安装在标准位置,然后将登录程序和编译器的源代码恢复为未修改的形式.然后,已安装的编译编译器将使用未更改的登录程序并输出不安全的表单.同样,安装的编译器会将未修改的编译器源代码编译为devious变体.检查任何一个源代码的任何人都会同意它们中没有任何异常.
当然,只有在任一程序的源代码发展得足够远以至于修改后的编译器不再识别它时,它才有效.由于修改后的编译器的源代码不再存在,因此无法维护,并且(假设编译器和登录继续发展)它最终将停止生成不安全的输出.
我之前从未遇到过这个概念,但这非常有趣 - 我在http://scienceblogs.com/goodmath/2007/04/strange_loops_dennis_ritchie_a.php上找到了一篇简洁的文章.