С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Как защитить EXE от исследования?

26.08.2014, 16:26. Показов 4753. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет !

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

Какими средствами и опциями компиляции следует воспользоваться?
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2014, 16:26
Ответы с готовыми решениями:

Как защитить исполняемый файл (.exe) от модификации?
Собираюсь залить в Интернет своё click-once-приложение для скачивания в виде обычного exe-файла. Как защитить исполняемый файл от...

Защитить exe от подобных программ, как DeDe ( Delphi 7 )
Вообщем суть такова.... Есть project1.exe надо какт защитить от Декомпиляции, от просмотра текста ... (Delphi 7) ----- Добавлено через...

Как защитить сторонний exe-файл от запуска, установив на него пароль
Всем привет. Дали задание. Суть его такова: есть какой-то файл.exe. На него нужно "навесить" защиту. Как я понял нужно...

37
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
26.08.2014, 17:59
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Чтобы взломщик не увидел строковые константы, я бы поступил так:

1) Описал бы отвлекающие константы (и оставил бы их открытыми)
2) Рабочие константы хранил бы в захорированном виде, а открывал бы перед использованием.
3
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
26.08.2014, 18:12
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Протекторы, упаковщики. Самый лучший протектор - свой собственный. Я писал упаковщик, вот его можно использовать к примеру. Хочешь, можешь доработать и сделать шифрование, перемешки и т.п. защиту.
Цитата Сообщение от Dragokas Посмотреть сообщение
но в особенности чтобы нельзя было увидеть константных строк в явном виде
Хранение шифрованных строк в ресурсах например. Вообще многими способами можно сделать. Хотя это не спасет к примеру при передачи какой-нибудь API функции строки, ее все-равно нужно будет расшифровывать, хотя можно делать реализацию нужных API вручную.
Цитата Сообщение от Dragokas Посмотреть сообщение
Какими средствами и опциями компиляции следует воспользоваться?
Компилировать в Native со всеми опциями оптимизации, тогда в декомпиляторах вообще будет практически невозможно получить исходник.
А вообще это вопрос опыта, кто захочет то разберется.

Добавлено через 4 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
Описал бы отвлекающие константы (и оставил бы их открытыми)
Я что-то подобное делал.
Обфускатор кода, защита программы
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.08.2014, 20:12  [ТС]
Спасибо Catstail, The trick. Ваши рекомендации ценны.

Да. На API-вызовах на чтение реестра реализация спалится.
Пачка отвлекающих запросов... Подумаю...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.08.2014, 21:46  [ТС]
Чем бы таким зашифровать строку в ресурсах,
чтобы и себе накладно не было?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.08.2014, 21:50
Цитата Сообщение от Dragokas Посмотреть сообщение
Чем бы таким зашифровать строку в ресурсах,
чтобы и себе накладно не было?
Что собственно будет шифроваться, и для чего?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.08.2014, 21:57  [ТС]
Строка (табличные данные) порядка 5 Кб, чтобы залить в ресурсы.
Цель: чтобы эти данные в открытом виде в исходнике не болтались.
Ключ можно и симметричный. Этот же исходник сам свой ресурс и будет расшифровывать.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.08.2014, 22:08
А вообще расшифровка для чего будет нужна? Я к тому что может и не нужно расшифровывать вовсе, а работать с зашифрованной строкой напрямую.
Зашифровать можно просто поксорить с какой-нибудь функцией (можно с RND)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.08.2014, 22:28  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Я к тому что может и не нужно расшифровывать вовсе, а работать с зашифрованной строкой напрямую.
Это что-то для меня новое Поясни, пожалуйста...

Вообще, там пути к реестровым разделам.
ProcMon-om это легко увидеть, но в таком случае реверсеру придется попотеть,
чтобы активировать каждое из ветвлений кода (для каждого случая из строкового ресурса разные пути берутся).
К тому же при первой удачи чтения, остальные пути не используются. Так что эта защита ресурса имеет смысл.

Пишем 2 конкурентных проекта.
Кто первый, тот имеет шанс списать у другого.
Вот только мои алгоритмы уже готовы и мне списывать без особой нужды. ))
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
27.08.2014, 22:40
"Криптостойкость" всех этих решений - 0. Взломщик или поставит брэйк на функцию расшифровки или, если не поленится, напишет скрипт дешифровки. Скрыть, и то условно, можно только от просмотра - наметанный взгляд немедленно зацепится за необычный участок дампа.

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

Для текстов на латинице (точнее, 7-битных) неплохие результаты дает компрессор Chuck Guzis, упаковывающий по три символа в слово + RLE. (Dr. Dobb's Journal. #207 November 1993. pp. 117, 118, 144, 145.)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.08.2014, 22:50  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
"Криптостойкость" всех этих решений - 0. Взломщик или поставит брэйк на функцию расшифровки или, если не поленится, напишет скрипт дешифровки. Скрыть, и то условно, можно только от просмотра - наметанный взгляд немедленно зацепится за необычный участок дампа.
Цитата Сообщение от Dragokas Посмотреть сообщение
Хотелось бы усложнить жизнь гипотетическому исследователю,
который не особо искушен в языке VB и отладчиках,
++ лучше хотя бы поверхностные методы защиты, чем вообще без какой либо защиты.
Это отсеит часть вломщиков уровня newbie.

За рекомендации спасибо.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.08.2014, 23:02
Цитата Сообщение от Dragokas Посмотреть сообщение
Поясни, пожалуйста...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Option Explicit
 
Dim seq() As Byte
 
Private Sub Form_Load()
    Dim src     As String
    Dim tmp     As String
    Dim match   As String
    Dim index   As Long
    
    ' Инициализируем
    cryptInit
    ' Шифруем строку для примера, в реальном EXE они уже зашифрованы
    src = "Всем привет !" & vbNewLine & _
          "Хотелось бы усложнить жизнь гипотетическому исследователю," & vbNewLine & _
          "который не особо искушен в языке VB и отладчиках," & vbNewLine & _
          "чтобы тяжело было отследить логику работы программы," & vbNewLine & _
          "но в особенности чтобы нельзя было увидеть константных строк в явном виде," & vbNewLine & _
          "напрямую декомпилировав EXE." & vbNewLine & _
          "Какими средствами и опциями компиляции следует воспользоваться?" & vbNewLine & _
          "Спасибо."
          
    cryptProcess src
    
    ' Например чтобы найти слово "программы" необязательно расшифровывать строку
    match = "программы" ' В файле она зашифрована
    cryptProcess match
    
    ' Поиск слова
    index = cryptInStr(0, src, match)
    tmp = Mid$(src, index, Len(match))
    ' Дешифровка
    cryptProcess tmp, index - 1
    
    ' Вывод
    Debug.Print tmp
    
End Sub
 
' Инициализация таблицы для шифровки/дешифровки
Private Sub cryptInit(Optional ByVal seed As Long)
    Dim i As Long
    ReDim seq(255)
    Randomize seed
    For i = 0 To 255
        seq(i) = Rnd * 255
    Next
End Sub
 
' Шифрование/дешифровка строки
Private Sub cryptProcess(str As String, Optional ByVal index As Long)
    Dim i As Long, bin() As Byte
    bin = str: index = index * 2
    For i = 0 To UBound(bin)
        index = (index + 1) And &HFF&
        bin(i) = bin(i) Xor seq(index)
    Next
    str = bin
End Sub
 
' Поиск подстроки в строке
Private Function cryptInStr(ByVal index As Long, src As String, match As String) As Long
    Dim src_() As Byte, match_() As Byte
    Dim n As Long, z As Long, v As Byte
    src_ = src: match_ = match
    n = index * 2
    Do While n <= UBound(src_)
        v = match_(z) Xor seq((z + 1) And &HFF) Xor seq((n + 1) And &HFF)
        If src_(n) = v Then
            z = z + 1
            If z > UBound(match_) Then
                cryptInStr = (n - UBound(match_)) \ 2 + 1
                Exit Function
            End If
        Else
            If z Then n = n - z + 1: z = 0
        End If
        n = n + 1
    Loop
End Function
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.08.2014, 23:15
А вот уже в зашифрованном виде в ресурсах:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Form_Load()
    Dim src     As String
    Dim tmp     As String
    Dim match   As String
    Dim index   As Long
    
    ' Èíèöèàëèçèðóåì
    cryptInit
    
    src = LoadResData(101, "CUSTOM")
    match = LoadResData(102, "CUSTOM")
    
    ' Ïîèñê ñëîâà
    index = cryptInStr(0, src, match)
    tmp = Mid$(src, index, Len(match))
    ' Äåøèôðîâêà
    cryptProcess tmp, index - 1
    
    ' Âûâîä
    MsgBox tmp
    
End Sub
Ни на каком этапе не происходит расшифровки строки, только расшифровка нужного участка при показе, при поиске никаких расшифровок всего текста не делается.
Вложения
Тип файла: rar SmallCrypt.rar (6.5 Кб, 16 просмотров)
1
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
01.09.2014, 16:38
Цитата Сообщение от The trick Посмотреть сообщение
Хранение шифрованных строк в ресурсах например. Вообще многими способами можно сделать. Хотя это не спасет к примеру при передачи какой-нибудь API функции строки, ее все-равно нужно будет расшифровывать, хотя можно делать реализацию нужных API вручную.
Немного не догнал, а зачем собсно расшифровывать? Поясни если не сложно.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
01.09.2014, 16:42
Цитата Сообщение от CRIDEL Посмотреть сообщение
а зачем собсно расшифровывать?
Ну допустим тебе нужно создать ключ в реестре или файл с определенным именем, а оно у тебя зашифровано. Чтобы создать - его нужно расшифровать.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.09.2014, 16:49  [ТС]
Получается очень удобно.
Если таблица в ресурсах имеет статическое число символов в строке, а вначале каждой - уникальный ID строки.
Можно вытянуть из таблицы только записи, связанные с этим ID, не храня в памяти в расшифрованном виде сразу всю таблицу.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
01.09.2014, 16:58
Цитата Сообщение от The trick Посмотреть сообщение
Ну допустим тебе нужно создать ключ в реестре или файл с определенным именем, а оно у тебя зашифровано. Чтобы создать - его нужно расшифровать.
Понял, спасиб
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
13.09.2014, 04:21
Цитата Сообщение от Catstail Посмотреть сообщение
тобы взломщик не увидел строковые константы, я бы поступил так
кстати да, это идея.. а ведь можно сделать несколько констант величеной с килобайт
и использовать только кусок из какой либо константы.. более того можно этот ребус устроить так.. что из нескольких отвлекаящих констант выборочно брать фрагменты и использовать как
источник данных из разрозненных кусков непосредственно в режиме выполнения..
и чтоб чтото достоверно пере-проверить потребуется бесконечное количество времени
..ну это только идея, которую врят-ли кто заметит, потому что тут
одни и теже, и двое из них умиляются друг-другом, спасибки ставят.. бесит аж
неспособые воспринимать новое

Добавлено через 13 минут
Цитата Сообщение от gazlan Посмотреть сообщение
С другой стороны, если уж так хочется обфускации, можно использовать несложную упаковку, например, один из вариантов LZ.
Никто не станет пользоваться несложными упаковками.. из сомнительных источников
во всяком случае здравомыслящий человек, которому, небезразлично, что его
данные могут быть увиденными.. пущщай лучше расшифровка в режиме выполнения займет
минуту!, зато надёжно.. всё нужно делать ручками, своими руками, а не подсматривать
как шифруют данные другие, и тогда точно никто не смогёт ничего увидеть

Добавлено через 15 минут
да даже можно сделать так..
вот константы
  • Const xx1="Яблоко"
  • Const уу1="Груша"
  • и тд
несколько ничем не связанных констант.. но они могут породить одно значение..
если какое-либо из слов, рассматривать как внутренний ключ для расшифровки

Добавлено через 4 минуты
Причем прежде чем расшифровать арбуз ...
нужно расшифровать грушу, а прежде чем расшифровать грушу..
нужно расшифровать яблоко.. тут-уж никто не станет заниматься
внешним перебором.. чтобы *подсмотреть* так-как проще повеситься )

Добавлено через 5 минут
хотя это всё отстой, сейчас передовая наука роится в квантовой криптографии
0
Заблокирован
13.09.2014, 07:08
Если бы мне требовалось усложнить жизнь любопытному
Буратино, то я бы применил оператор GOTO. Большое
их количество (не обязательно рабочие) собьют спесь
любому хакеру!! Поверьте мне!
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
13.09.2014, 07:08
Цитата Сообщение от Антихакер32 Посмотреть сообщение
всё нужно делать ручками, своими руками, а не подсматривать
как шифруют данные другие, и тогда точно никто не смогёт ничего увидеть
Худшее, что можно предложить. Crypto - это не для дилетантов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2014, 07:08
Помогаю со студенческими работами здесь

Защитить exe от вирусов
Как это сделать для своего приложения ?

Защитить exe-файл на флешке
Пользуюсь одной портабельной прогой на флешке, но уже жутко достало то, что его все время ковыряют вирусы, так как работаю с флешкой на...

Коммерческо-тайное ПО: защитить exe-файл
Разрабатываю для фирмы ПО. Недаано начальство сказало, дескать надо от конкурентов защититься, что бы они не смогли, имея exe-шник, понять...

Защитить excel файла и скомпилировать на exe файл
Имеется файл екселя нужно его защитить этот файл от сохранение копирование на другой комп. Короче к файлу должен получить доступ один...

Внедрить файл Excel в exe или защитить этот файл
Имеется файл excel. Нужно создать программку которая не даст возможность копировать этот файл на другой компьютер или носители. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru