Для своего развитие хочется написать криптор и за основу беру Питон. И сразу чтобы не считали это идиотизмов, напишу несколько строк кода: Код (Text): pe = pefile.PE('a.exe') pe.extend_last_section(size=4096) pe.strip_bount_import() pe.OPTIONAL_HEADER.AddressOfEntryPoint = pe.sections[1].VirtualAddress + first_oep pe.data_replace(offset=pe.sections[1].PointerToRawData, new_data=first_data) pe.write(filename="b.exe") И хотелось бы пораспрашивать несолько не совсем понятных моментов: 1. Насколько большой вес для антивирей если первая секция записываемая? Тоесть я могу поступть проще - генерирую на масма прогу с данными и кодом в одной секцией, а потом все записываю в кодовую секцию криптуемого екзешника. Второй, это генерирую код намасме в секцией кода и данных(как-то говорю масму чтобы его секцию там где и оригинальная секция с кодом). Дальше уже изменяю и кодовую секцию и секцию с данными. Это несколько сложнее, стоит ли сразу реализовать такой вариант? 2. Все тестирую на старой дельфиской проге, и палиться конечно же таблица импорта, как ее криптовать. Можно ли так что беру генерирую свою таблицу со случайными импортами из обычных что встреаются. А дальше запоминаю оригинальную где-то. И в конечном счете прохожу по всех ячейках где должен быть адрес на функцию и их востанавличаю через ЛоадЛибрали, при этом мне не нужно же востанаввливать ее полностью всю структуру?? 3. Я к примеру достал константу и мне нужно на масме сгенерировать на нее переход. К примеру есть такой шаблон: jmp {{ original_oep }} Который розворачивается в jmp 234524324 И мне это Масм отказывается компилить. Приходиться извращаться типа так: mov eax, {{ original_oep }} call eax Можно ли это сделать в Масме? или лучше перейти на Фасм сразу(на нем же можно это делать?) ) 4. Вначале кода мне нужно сгенерить обычную прогу с антиемуляцией, если я сделаю такую простейшую емуляцию, что прога создат обычное невиденное окно и зациклится в обработке сообщений, а также запущу поток второй который пошлет какое-то сообщение основному поток. Такого приема будет достаточно для антиемуля? Или лучше сразу думать несколько таких и потом рандомно генерить несколько защит подряд. 5. И опять ресурсы, прохожу по них циклом чтобы достать пошифровать все кроме манифеста, иконки, и что-то не могу там увидеть где именно эти вещи храняться, нужных имен нету ( for r in pe.DIRECTORY_ENTRY_RESOURCE.entries: print r.name for rr in r.directory.entries: print rr.name for rrr in rr.directory.entries: print rrr.name Где можно почитать докладно о них. Может манифест граниться по опрделенному идентификатору, а не по имени... Заранее благодарен за любые советы и подсказкы. Если может какие-то советы не хотите палить - напишите плиз в личку. Я же обещаю что потом выложу мою измененную либу для питона pefile с нужными доработками, такими как extend_last_section, add_last_section, strip_resource, strip_bount_import, delete_last_section, recount_SizeOfImage (это некоторые какие сейчас уже добавил, потом думаю список расшириться) )
если компиляторы такого не генерируют то это будет подозрительно. собирайте статистику и из исходите из результатов это русский? голова разболелась пока дочитал, пожалейте же
Слепой набор не рулит . Компиляторы конечно кодовую секцию почти никогда не делают записываемой, но в тоже время этот вес на моих тестовых прогах не сильно влияет. Многие паблик пакеры так делают. Но все же это вес... Как можно в масме указать чтобы он сецию данных делал по обределенному адресу? Тоесть типа так: .code aaaaaaaaa .data started 0x60000 bbbb 4. По этому пункту, я хотел спросить, хватит ли проги с двумя потоками и посылкой сообщений между собой - чтобы обойти антиемуль антивирей.
проверьте, может и да, но опять же это все временно, в этом собственно и заключается поддержка (часть ее) что за "вес"? не ясно
Проверить то можно, но это много очень работы, и было бы круто если кто-то подскажет свой опыт. Я не намерен делать комерческий крипт, поэтому времени не очень то много могу выделить. Это скорее разминка для ума, кросворд для взрослых ) По поводу веса, то антивирусы обычно работают так - у них есть база сигнатур: a - 0,1 b - 0,1 CodeSectionWritable - 0,4 VirtualAlloc - 0,1 super_zeus - 1 Где каждая строка это Вес, который состоит из правила и того насколько правило важно. Антивирь проходит по екзехе, проверяет все Весы. И предположим он в файле находит строку b и VirtualAlloc и CodeSectionWritable. Дальше все сумирует, и получается 0.6. И поскольку это число меньше 0.8 то говорит что файл чист. Если от 0.8 до 1, то тихо отсылает семпл себе, и говорит что файл подозрительный. Если результат 1 - говорит что вирус и удаляет файл. Конечно это упрешенная модель, я хотел лишь показать что такое Вес.
Если секция записываемая и исполняемая - это очень плохо для ав. Про структуру ресурсов есть документация, где-то встречал... Манифест определяется по типу ресурса 24 Код (Text): MNFST 24 DISCARDABLE "manifest.xml"
Придумал как в Масме сдвинуть секцию данных до нужного адреса ) Думаю можно реализовать через указание выравнивания секций линковщику - C:\masm32\bin\link.exe /SUBSYSTEM:WINDOWS test1.obj /ALIGN:131072 Еще не тестил, но в теории проблем не будет.
В Питоне есть замечательный модуль для работы с бинарными структурами - import struct А в либе pefile - эти структуры все уже описаны. Это первое почему Питон пока очень хорошо подходит. Вторая причина, это удобная генерация ассемблеровских вставок, для Питона есть очень класные шаблонизаторы, что позволят легко реализовать замусоривание, рандомизацию и т.д.. Мне больше всего нравиться шаблонизатор от Торнадо. Это все можно оценить в моей статье опубликованой в Хакере о морфировании ХТМЛ и ЯваСкрипта - http://tutamc.com/js-morfer-na-pitoni
Это не прокатит. Ведь мы незнаем каким размером будет наш скомпилированный исходник. Тут же сначала Питон генерит ассемблер и каждый раз он будет разного размера. Конечно можно сгенерить, скомпилить, потом посмотреть на размер, добавить констуркцию abc db 0 dup 20000, и еще раз скомпилить. Но это долго. Вариант с выравниванием проще, и работает