И снова о Крипторе. Только теперь на Питоне

Тема в разделе "WASM.BEGINNERS", создана пользователем presidentua, 19 апр 2011.

  1. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    Для своего развитие хочется написать криптор и за основу беру Питон.

    И сразу чтобы не считали это идиотизмов, напишу несколько строк кода:

    Код (Text):
    1. pe = pefile.PE('a.exe')
    2. pe.extend_last_section(size=4096)
    3. pe.strip_bount_import()
    4. pe.OPTIONAL_HEADER.AddressOfEntryPoint = pe.sections[1].VirtualAddress + first_oep
    5. pe.data_replace(offset=pe.sections[1].PointerToRawData, new_data=first_data)
    6. 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 (это некоторые какие сейчас уже добавил, потом думаю список расшириться) :))
     
  2. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    если компиляторы такого не генерируют то это будет подозрительно. собирайте статистику и из исходите из результатов
    это русский? голова разболелась пока дочитал, пожалейте же
     
  3. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    Слепой набор не рулит :).

    Компиляторы конечно кодовую секцию почти никогда не делают записываемой, но в тоже время этот вес на моих тестовых прогах не сильно влияет. Многие паблик пакеры так делают. Но все же это вес...

    Как можно в масме указать чтобы он сецию данных делал по обределенному адресу?
    Тоесть типа так:

    .code
    aaaaaaaaa

    .data started 0x60000
    bbbb

    4. По этому пункту, я хотел спросить, хватит ли проги с двумя потоками и посылкой сообщений между собой - чтобы обойти антиемуль антивирей.
     
  4. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    проверьте, может и да, но опять же это все временно, в этом собственно и заключается поддержка (часть ее)
    что за "вес"? не ясно
     
  5. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    Проверить то можно, но это много очень работы, и было бы круто если кто-то подскажет свой опыт. Я не намерен делать комерческий крипт, поэтому времени не очень то много могу выделить. Это скорее разминка для ума, кросворд для взрослых )

    По поводу веса, то антивирусы обычно работают так - у них есть база сигнатур:
    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 - говорит что вирус и удаляет файл. Конечно это упрешенная модель, я хотел лишь показать что такое Вес.
     
  6. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Если секция записываемая и исполняемая - это очень плохо для ав.

    Про структуру ресурсов есть документация, где-то встречал...
    Манифест определяется по типу ресурса 24
    Код (Text):
    1. MNFST 24 DISCARDABLE "manifest.xml"
     
  7. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    Придумал как в Масме сдвинуть секцию данных до нужного адреса )

    Думаю можно реализовать через указание выравнивания секций линковщику -
    C:\masm32\bin\link.exe /SUBSYSTEM:WINDOWS test1.obj /ALIGN:131072

    Еще не тестил, но в теории проблем не будет.
     
  8. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    с этим будет
     
  9. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    выравнивание должно быть степенью числа 2
     
  10. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    Питон хорош при работе со строками. В данном направлении неясно зачем он вообще нужен.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    не путать с перлом...
     
  12. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    abc db 0 dup 20000
     
  13. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    В Питоне есть замечательный модуль для работы с бинарными структурами - import struct
    А в либе pefile - эти структуры все уже описаны. Это первое почему Питон пока очень хорошо подходит.

    Вторая причина, это удобная генерация ассемблеровских вставок, для Питона есть очень класные шаблонизаторы, что позволят легко реализовать замусоривание, рандомизацию и т.д.. Мне больше всего нравиться шаблонизатор от Торнадо. Это все можно оценить в моей статье опубликованой в Хакере о морфировании ХТМЛ и ЯваСкрипта - http://tutamc.com/js-morfer-na-pitoni
     
  14. presidentua

    presidentua New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    6
    Это не прокатит. Ведь мы незнаем каким размером будет наш скомпилированный исходник. Тут же сначала Питон генерит ассемблер и каждый раз он будет разного размера.

    Конечно можно сгенерить, скомпилить, потом посмотреть на размер, добавить констуркцию abc db 0 dup 20000, и еще раз скомпилить. Но это долго. Вариант с выравниванием проще, и работает :)
     
  15. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    за такое и шапку дать не жалко