Задача следующая: написать DLL, функции в которой при вызове сами расшифровывались. Делал ли кто-нибудь такое и есть ли статьи на данную тему?
track82 > Делал ли кто-нибудь такое и есть ли статьи на данную > тему? делал. единственная сложность - необходимость обрабатывать fixup'ы иначе получится черт знает что. только это не сильно усложняет взлом. ну разве что использовать принцип матрещки: достустим, мы имеем 10 расшифровщиков, которые отрабатывают один за другим, причем в каждом из них расположено 10% кода зашифрованной фукнкци. т.е. функция расшифровывается как бы порциями, но никогда не расшифровывается целиком. это ломается сложнее, но и сложнее программируется.
можно предложить так сделать криптор добавляет секцию в которую помещает функциЮ(и) { расшифровать выполнить зашифровать обратно вернуть результат } потом шифрует настоящие функции и устанавливает точки входа на новые функции ключом шифрования можно сделать какую - то функцию от образа зашифрованной секции проблемы - 1)релоки 2)это всё всё равно отламывае тся. и довольно просто уж лучше прога такая , которая преобразует в p-cod функции не помню как называется. в инструментах была, кажись
Если dll делать целиком на ассемблере, то от релоков можно совсем избавиться, оставив один левый, что бы загрузчик загружал. Расшифровщик можно поставить на SEH и в начале зашифрованых ф-ций ставить, например, int3. IMHO на системе нереального времени (виндос) смысла в таком мало, если очень нужно, можно вручную расшифровать функции и выкинуть раскриптовку. kaspersky > Да, такая неломаемая защита была ещё во времена спектрума, штук 200 расшифровок =)
S_T_A_S_ > Если dll делать целиком на ассемблере, то от релоков > можно совсем избавиться, ну это понятно, но dll на асме это какая-то маааленькая dll будет в ней очень просто разобраться. а вот если перекомпилить MFC, да еще и слегка пропадчить начало функций, то вот это по настоящему кранты. флирт не работает, а дизасмить библиотечные функции можно очень долго, особенно если поверх них навешана шифровка... > оставив один левый, что бы загрузчик загружал. dll без релоков грузится, если про флаг стрипанья не забывать, или я что-то путаю? > Расшифровщик можно поставить на SEH и в начале > зашифрованых ф-ций ставить, например, int3. а пофиг. если это асмовский расшифровщик, тожно навять скрипт в иде который все это будет расшифровывать. так что расшифровщик должен быть сложным, это раз. не должно быть возможности выдрать расшифровщик из программы, чтобы расшифровывать его руками, это два... > IMHO на системе нереального времени (виндос) смысла в > таком мало, если очень нужно, можно вручную > расшифровать функции и выкинуть раскриптовку. полностью согласен. но смысл в шифровке все-таки есть, без ее совсем элементарно отламывается просто надо не переусрдстовать с ней > Да, такая неломаемая защита была ещё во времена > спектрума, штук 200 расшифровок =) кстати, шифровку легко автоматизировать а вот обратно - сложно. P.S. не так давно ломал программу, в которой ключевой модуль был на форте. порадовался возможности вспомнить форт и хотя быстро написал декопилятор, возился все-таки долго...
kaspersky > Это если адрес загрузки совпадает с IMAGE BASE. Иначе загрузчик начнёт ругаться. > А зачем его выдирать для расшифровки? Пусть себе расшифровывает кусочки сам. Так можно подампить их по очереди =)
S_T_A_S_ Игра Hronos от Bill Gilbert'а была так запакована 16 раз Но взлом дал только "бесконечный" лазер, а формат музона я так и не понял