реклама на сайте
подробности

 
 
> Защита ресурсов EXE-файла
toweroff
сообщение Nov 10 2012, 17:24
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день

Возник вот какой вопрос. Есть EXE-файл. Его можно открыть всякими ResHacker, XN Resource Editor и т.д. и подправить капчи, фонты, лейблы и прочую
Что можно предпринять, чтобы это было бы хотя бы ну уж не так прямо "в лоб"?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 23)
AHTOXA
сообщение Nov 10 2012, 18:14
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Раньше был какой-то AsPack. Для совсем простых случаев - упаковать upx-ом.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 10 2012, 18:27
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



а, допустим, ксорить строковые константы и присваивать значения в процессе создания формы?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 10 2012, 18:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(toweroff @ Nov 10 2012, 20:27) *
а, допустим, ксорить строковые константы и присваивать значения в процессе создания формы?

А почему ксорить-то? тогда уж лучше зашифровать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2012, 18:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А зачем ксорить-шифровать, если достаточно проверить целостность? Раз уж задача поставлена "чтобы нельзя было подправить".
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 10 2012, 19:00
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Nov 10 2012, 22:48) *
А зачем ксорить-шифровать, если достаточно проверить целостность? Раз уж задача поставлена "чтобы нельзя было подправить".

а механизм проверки?

допустим, я считаю КС файла, куда я ее дену? если заменю в редакторе определенное место этой суммой, то результирующая ведь тоже поменяется?

или я все не так понимаю?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2012, 19:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Nov 10 2012, 23:00) *
или я все не так понимаю?

Что-то я не понимаю затруднений. Считаете хэш, прикручиваете его к .exe файлу, на старте проверяете. От пионеров хватит.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 10 2012, 19:22
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Nov 10 2012, 23:06) *
Что-то я не понимаю затруднений. Считаете хэш, прикручиваете его к .exe файлу, на старте проверяете. От пионеров хватит.

опять непонятно. Вот я выделил константу, с которой буду сравнивать рассчитанный хэш, знаю расположение в EXE
считаю, допустим, MD5, сохраняю в это место

запускаю EXE, считаю MD5. Но ведь сумма будет уже другой!

Повторяю вопрос - какой вообще механизм проверки целостности?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2012, 19:47
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Nov 10 2012, 23:22) *
Повторяю вопрос - какой вообще механизм проверки целостности?

Самый простой вариант - записать в конце. Если значение записано где-то в середине, то, разумеется, во время проверки придется его подменить.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 10 2012, 19:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Nov 10 2012, 23:47) *
Самый простой вариант - записать в конце. Если значение записано где-то в середине, то, разумеется, во время проверки придется его подменить.

ну так что мешает тогда "хакеру" найти сумму в конце, что надо подправить и снова записать сумму в непроверяемую область?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2012, 20:10
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если это сумма, то ничего не помешает. А вот если это CRC32 с неизвестным полиномом и стартовым значением, то пионера отвадит.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Nov 10 2012, 20:36
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(toweroff @ Nov 10 2012, 23:53) *
ну так что мешает тогда "хакеру" найти сумму в конце, что надо подправить и снова записать сумму в непроверяемую область?
Вы определитесь, какого уровня крякера (от слова crack, а не хакера) Вы хотите остановить. Если минимального - то достаточно упаковать UPX и поискать утиль, который делает его нераспаковываемым самим UPX. С контрольной суммой тоже просто. Отводите для нее статическу переменную, зануляете, считаете внешней прогой КС и добавляете в переменную так, чтоб КС стала равнв нулю. После запуска и распаковки - проверяете КС. Естественно, все это потребует некоего времени и минимальных знаний, как устроен код, сгенеренный вашим компилятором. От человека, который хотя бы минимально знаком с крекингом, Вы за кототкий промежуток времени, без использования специализированных программ, не защититесь.

Цитата(aaarrr @ Nov 11 2012, 00:10) *
Если это сумма, то ничего не помешает. А вот если это CRC32 с неизвестным полиномом и стартовым значением, то пионера отвадит.
"ПионЭр" просто найдет место, где проверяется на сопадение и заменит один байтик условного перехода на код 0хEB - безусловный переход на нужное место.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2012, 20:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(vvs157 @ Nov 11 2012, 00:36) *
"ПионЭр" просто найдет место, где проверяется на сопадение и заменит один байтик условного перехода на код 0хEB - безусловный переход на нужное место.

Если не поленится. Проверять можно не только на старте. А вообще, пионеры - они разные бывают. В т.ч. и очень упорные sm.gif
Go to the top of the page
 
+Quote Post
Flood
сообщение Nov 10 2012, 21:04
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Делать любую защиту "несекретных" EXE при помощи упаковщика не только бесполезно, но и вредно.
Во-первых, любой пионер за 5 минут загуглит программу для снятия упаковщка, что делает его использование бесполезным.
Во-вторых, любая нормальная антивирусная программа при виде такого файла впадет в ступор от 0,1 до нескольких секунд (длительность ступора зависит от сложности упаковщика и размера EXE-файла), что делает использование упаковщика вредным.
В-третьих, любой сервис типа virustotal выдаст несколько ложноположительных детектов только из-за присутствия упаковщика, что также нельзя назвать приятным.

Исключения - случаи, когда защита действительно имеет смысл, например, при применении секретных узкоспециализированных алгоритмов в более-менее массовом софте. И делается это при помощи самых тяжеловесных протекторов: WinLicense, EXECryptor, и т.д. с обязательным внесением элементов защиты на уровне исходных кодов. В зависимости от качества наложенной защиты и, главное, количества и усердия супостатов, можно получить от нескольких месяцев до нескольких лет защищенности.

Если очень хочется защитить логотип софта от скучающих пионеров - можно хранить его в зашифрованном или нестандартном формате. Но это не остановит даже мало-мальски заинтересованного пионера, так что спорный вопрос, стоит ли тратить на это время разработчика.
Наилучшая защита от внесения изменений - подпись исполняемого файла и распространение информации об обязательности ее наличия. Это не спасает от изменений, но дает надежный инструмент их обнаружения.
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 10 2012, 23:12
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Вообще-то ресурсы как отдельная и открытая составляющая exe-файла и проектировались специально для удобства локализации, когда, не затрагивая авторских прав на код, можно было бы подправить интерфейс.
Не хотите ресурсов - создавайте кнопки, переключатели, окна диалога и пр. в ходе выполнения программы. Иконки-картинки шифруйте и храните в теле программы.
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 12 2012, 09:15
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Шифруйте свои ресурсы, только не 'xorом', а нормальным несимметричным алгоритмом (можно задействовать CryptoAPI). Тогда никакие хакеры не смогут поменять в вашей программе никаких ресурсов, т.к. для этого им понадобится приватный ключ, которого у них просто не будет.
Если у вас Builder, то дешифровку можно врезать прямо в VCL
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 12 2012, 09:39
Сообщение #17


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(aaarrr @ Nov 11 2012, 00:10) *
Если это сумма, то ничего не помешает. А вот если это CRC32 с неизвестным полиномом и стартовым значением, то пионера отвадит.

CRC вообще не вариант, независимо от полинома. Ломается на раз тупым (тупейшим) перебором в пределах одного кодового слова. Причем, диапазон перебора не так уж и велик - в пределах кодового расстояния.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 12 2012, 12:16
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(MrYuran @ Nov 12 2012, 13:39) *
CRC вообще не вариант, независимо от полинома. Ломается на раз тупым (тупейшим) перебором в пределах одного кодового слова. Причем, диапазон перебора не так уж и велик - в пределах кодового расстояния.

Пусть дан произвольный файл объемом 200кБайт, в котором где-то вшит CRC. Что и как перебирать будем?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 12 2012, 13:07
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(XVR @ Nov 12 2012, 13:15) *
Шифруйте свои ресурсы, только не 'xorом', а нормальным несимметричным алгоритмом (можно задействовать CryptoAPI). Тогда никакие хакеры не смогут поменять в вашей программе никаких ресурсов, т.к. для этого им понадобится приватный ключ, которого у них просто не будет.
Если у вас Builder, то дешифровку можно врезать прямо в VCL

а каким образом это врезается в Builder?
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 12 2012, 14:33
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(toweroff @ Nov 12 2012, 17:07) *
а каким образом это врезается в Builder?

Берете сорцы VCL, находите там место, где происходит чтение форм и добавляете дешифровку. Потом модифицированные исходники VCL добавляете к себе в проект
Go to the top of the page
 
+Quote Post
Flood
сообщение Nov 13 2012, 05:49
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(XVR @ Nov 12 2012, 13:15) *
Шифруйте свои ресурсы, только не 'xorом', а нормальным несимметричным алгоритмом (можно задействовать CryptoAPI). Тогда никакие хакеры не смогут поменять в вашей программе никаких ресурсов, т.к. для этого им понадобится приватный ключ, которого у них просто не будет.


Сначала заменяется открытый ключ, затем подменяются ресурсы.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Nov 13 2012, 06:46
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(XVR @ Nov 12 2012, 13:15) *
Шифруйте свои ресурсы, только не 'xorом', а нормальным несимметричным алгоритмом
Вообще-то RSA, ECC и иже с ними крайне вычислительно накладны. Поэтому ими обычно шифруется симметричный ключ или их используют для проверки правильности хеша, который считается по той части программы, которая дожна контролироваться. Про то, что можно подменить открытый ключ уже написали
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 13 2012, 08:44
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Flood @ Nov 13 2012, 09:49) *
Сначала заменяется открытый ключ, затем подменяются ресурсы.
Ключ должен быть вшит в программу, а не лежать в ресурсах. Однако, если взломщик обладает достаточной квалификацией, то ему и ключ подменять не надо будет - он просто врежется в программу после дешифровки ресурсов, снимет их расшифрованный образ, потом положит его (с любыми своими правками) обратно в ресурсы и отломает дешифровку вообще.
От этого защиты нет, но такие действия требуют немалой квалификации rolleyes.gif
Go to the top of the page
 
+Quote Post
vvs157
сообщение Nov 13 2012, 11:27
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(XVR @ Nov 13 2012, 12:44) *
Ключ должен быть вшит в программу, а не лежать в ресурсах.
На самом деле подмена ключа методически правильнее, чем лопатить программу в поисках всех точек дешифровки, так как их может быть несколько.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 15:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.02454 секунд с 7
ELECTRONIX ©2004-2016