那么一個txt改成exe?
這個理論有幾率,但是幾率如同大海里的一粒沙子一樣,你可以認為幾率幾乎為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格式的,檢測會不通過,加載器加載失敗,程序運行不起來的。