fallen_pnz
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Собственно, понадобилось мне написать некий криптор для MZ EXE. Состоит из двух частей - написанный на ассемблере декриптор, который приписывается к концу шифруемого файла, и оболочка, написанная на cpp, которая шифрует исходный файл и приписывает к нему декриптор. С дописью декриптора (ака заражением) проблем не возникало - сохраняется старый entrypoint и стек, затем дописывается декриптор и заголовок MZ меняется таким образом, чтобы entrypoint и стек указывали на декриптор. Все это замечательно работает. Теперь возникла проблема собственно с шифрованием файла. То есть банально зашифровать весь код заражаемого EXE - не проблема. Проблема в том, что в этом случае под шифрование попадут и те адреса в файле, которые будут загрузчиком обрабатываться в соответствии с relocation table. То есть к еще зашифрованным данным будет прибавляться начальный сегмент, по которому будет загружена программа, а затем эти данные будут расшифровываться декриптором. Тогда в этих местах будет совершенно не то, что должно быть. Поэтому я надеюсь, что все же кто-нибудь здесь помнит дос и сможет мне помочь. Я пока вижу только одну возможность - запоминать старую таблицу релокейшенов, обнулять их в заголовке MZ, а затем, после расшифровки кода декриптором, эмулировать загрузчик ОС - то есть вручную править все адреса, которые находятся в старой таблице. Но это все же сопряжено с определенными трудностями, поэтому хотелось бы найти решение попроще. По этой же причине не хочется изучать исходники (если таковые существуют) готовых крипторов. |