这个理论有几率,但是几率如同大海里的一粒沙子一样,你可以认为几率几乎为0;
一个可执行文件exe,必须是有固定格式,特定的字节或字段有特定的含义,每个字节或者字段会被检测,看是否exe合法,再回最终加载到系统内运行。
在windows系统中,exe可执行文件,必须满足PE格式(Portable Executable),它是是Windows操作系统下使用的可执行文件格式,不是任何txt改为exe后,就会符合PE格式的。
这是一个PE格式的简要框图。
当widonws加载exe的时候,它首先会检查DOS header里的PE header偏移,通过偏移找到PE头。如果有一个TXT,那么这个偏移就随机,你想想,PE头找到哪里去了,鬼都不知道。
即使这个字段蒙上了,正好跳到了一个合法地址(几率很小很小啊)
windows加载器会跳转到PE header,然后后,接下来要做的就是检查PE header是否有效。如果该PE header有效,就跳转到PE header的尾部。
PE头包括以下几个重要信息
1.Magic
为IMAGE_OPTIONAL_HEADER32时,magic码为10B,为IMAGE_OPTIONAL_HEADER64时,magic码为20B
其它无效,您能保证这个头部,正好是10B或者20B么,其它都无效,启动失败。
2、AddressOfEntryPoint
程序入口地址,
该值指出程序最先执行的代码起始地址,相当重要。
如果是txt改变过来的exe,这个地方的地址是多少,鬼知道啊,加载器会到哪里加载程序,几率渺茫。
3、ImageBase
程序的基础地址,一般windows程序,这个值是00400000,如果随机的,这个值的范文就海了去了。
执行PE文件时,PE装载器先创建进程,再将文件载入内存,然后把EIP寄存器的值设置为ImageBase+AddressOfEntryPoint。这家伙这些值随机,范围会随机,合法性检测很难通过
4、SectionAlignment,FileAlignment
硬盘和内存的对齐位置。
就是按照什么字节对齐,这个也不许合法,如果随机,执行加载会乱套,所以不合法也不会加载
5、SizeOfImage
程序大小,一般都有个上限,随便填写也不会加载成功
6、SizeOfHeader
PE头大小
SizeOfHeader用来指出整个PE头大小。该值必须是FileAlignment的整数倍。必须和SizeOfHeader距文件开始偏移的量相同。
7、Subsystem
驱动还是普通程序,其它不合法,加载失败
8、NumberOfRvaAndSizes
NumberOfRvaAndSizes用来指定DataDirectory的数组个数,加载器识别这个值
简单列了这些,其实PE头里的信息和字段远远不止这些,合法性检测也比这多得多。
所以,随机使用一个txt硬改为exe,里面的二进制bit并不是符合PE格式的,检测会不通过,加载器加载失败,程序运行不起来的。