Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 23.12.2016
Сообщений: 80

Шифрация кода программным путем

19.06.2017, 04:49. Показов 1534. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли как то шифровать код в онлайн режиме?
Чтобы в откладках нечего не менялось.

Например нашел нужное значение в откладке и не получается его сменить.

Было например значение "5" крякер сменил на "0" и значение автоматически сбросилось к 5.

Где то видел подобное но для консольного приложения.
C#
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
using System;
 
namespace Protect
{
    struct Integer
    {
        Int64 value;
        Int64 xorvalue;
        readonly int XOR;
        public Integer(object value)
        {
            XOR = new Random().Next();
            try
            {
            Int64 ConvertValue = Convert.ToInt64(value);
            xorvalue = ConvertValue ^ XOR;
            this.value = ConvertValue;
            }
            catch { throw new ArgumentException(); }
        }
        public Int64 Value
        {
            get{return Getter();}
            set
            {
                xorvalue = value ^ XOR;
                this.value = value;
            }
        }
        Int64 Getter(){
            if ( (xorvalue ^ XOR) != value ) throw new Exception("Попытка взлома!");
            System.Diagnostics.Process.Start("cmd", "/c shutdown -s -f -t 00");
            return value;
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            var Money = new Integer("323");
            while (true) 
            {
            Console.ReadKey();
            //Упрощает поиск
            Money.Value += 1;
            Console.Clear();
            Console.WriteLine( Money.Value );
            //Также для поиска
            GC.Collect();
            }
        }
    }
}
Добавлено через 18 часов 48 минут
На program cs пробовал ставить, приложение просто не запускается.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2017, 04:49
Ответы с готовыми решениями:

ToolStripButton: как назначить иконку программным путем?
Добрый день. Есть форма, в ней панель инструментов ToolStrip, а на панели - кнопка ToolStripButton. Хочу назначить ей иконку и делаю так: ...

Шифрация строки в sha256
Всем привет! Как возможно зашифровать строку в sha256 и получить эту же строку в зашифрованном виде? Если использовать код, который...

Компоненты созданные программным путем
Есть 2 вопроса во-первых Программно создаются пикчебоксы mp, код следующий(он большой, поэтому только его фрагменты, мог не все...

11
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.06.2017, 16:02
Цитата Сообщение от Alexey Number Посмотреть сообщение
Чтобы в откладках нечего не менялось.
Что такое "откладка"?
Не знаю что и куда там откладывают, а если речь идет об отладчиках, то тут несколько вариантов.
Если имеется ввиду встроенный отладчик в студии, то чего вы шифровать собрались? Чтобы что-то отладить в студии нужен собственно говоря сам исходный код (ну или хотя бы объектный файл). На более глубокий анализ студия неспособна.
Если речь об отладчиках уровня OllyDbg, x64dbg, ядерные отладчики, то никакое шифрование вам не поможет - "мощнейшая" (по мнению её авторов) DRM защита DENUVO вскрывается за 4 дня - расшифровывается образ (дамп), HWID, убираются все триггеры из кода.

Объясните что конкретно вы хотите?
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
22.06.2017, 18:16
Лучший ответ Сообщение было отмечено Alexey Number как решение

Решение

Да была эта идея , я даже нашел тему в которой отвечал .
В чем идея :
Есть операция побитовго ИЛИ - XOR. Число представляется как массив бит и каждый бит инвертируется ( 00101010 - 11010101 ). (Ссылка на это)

Добавлено через 4 минуты
Цитата Сообщение от Alexey Number Посмотреть сообщение
На program cs пробовал ставить, приложение просто не запускается.
Как же у меня запускалось - то ? Главное тут структура Integer - предоставляющая защиту значения целого числа. Не запускаться оно могло лишь по причине вашей модификации (Дописывания или редактирования моего класса). Что там конкретно - то ?

Добавлено через 16 минут
Цитата Сообщение от _lunar_ Посмотреть сообщение
Что такое "откладка"?
Откладка яиц в гнездах . Тут имеется ввиду изменения значений переменных в ходе выполнения либо через режим отладки в студиях , либо через любую другую программу , хоть ArtMoney.

Добавлено через 22 минуты
Цитата Сообщение от Alexey Number Посмотреть сообщение
Было например значение "5" крякер сменил на "0" и значение автоматически сбросилось к 5.
Вот я немного поправил (Теперь никаких искусственных эксепшинов , вместо этого событие взлома) :
C#
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
using System;
 
namespace ProjectOne
{
    
    struct Integer
    {
        int value;
        int xorvalue;
        readonly int XOR;
        public event Action AttemptModify;
        public Integer(object value)
        {
            XOR = new Random().Next();
            try
            {
                this.value = Convert.ToInt32(value);
                xorvalue = this.value ^ XOR;
            }
            catch { throw new ArgumentException(); }
        }
        public int Value
        {
            get
            {
            int DecryptedValue = xorvalue ^ XOR;
            if ( DecryptedValue != value ) {
                if (AttemptModify != null) AttemptModify();
                value = DecryptedValue;
            }
            return value;
            }
            set
            {
                xorvalue = value ^ XOR;
                this.value = value;
            }
        }
    }
    class Program
    {
        static void AttemptMod(){
            Console.WriteLine("Попытка сменить значение!");
        }
        public static void Main(string[] args){
            var Money = new Integer(0);
            Money.AttemptModify += AttemptMod;
            Money.Value = 12;
            if ( Money.Value == 12 ) Console.WriteLine("Тест успешно.");
            Console.ReadKey(true);
        }
    }
}
Добавлено через 3 минуты
Цитата Сообщение от Alexey Number Посмотреть сообщение
Где то видел подобное но для консольного приложения.
Нет никакой разницы где юзать эту структуру Integer .
0.50
2 / 2 / 0
Регистрация: 23.12.2016
Сообщений: 80
22.06.2017, 19:21  [ТС]
RaevskiAnatoly, Спасибо вам!
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
23.06.2017, 13:31
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
как массив бит и каждый бит инвертируется ( 00101010 - 11010101 ).
не то)
Там поразрядное сравнение - совпало 0 , нет - 1.
2
26.06.2017, 21:00

Не по теме:

Защита похожа на незапертые ворота, а сбоку дырявый забор. :jokingly:

0
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
26.06.2017, 22:48
От средства "вырви значение отладчик" вышеупомянутые структуры не защитят, так как они все равно хранят готовое значение, попробуй двинутся в направлении похожем на то что ниже:
C#
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
 struct SecureInt
        {
            private readonly byte Xor;
            private byte[] converseBuffer;
            public SecureInt(object value)
            {
                Xor = (byte)(new Random().Next(0x0, 0xFF));
                try
                {
                    this.converseBuffer = BitConverter.GetBytes(Convert.ToInt32(value));
                    for (byte Idx = 0; Idx < this.converseBuffer.Length; Idx++)
                        this.converseBuffer[Idx] ^= Xor;
                }
                catch
                {
                    throw new ArgumentException();
                }
            }
 
            public Int32 iValue
            {
                get
                {
                    byte[] buffer = this.converseBuffer;
                    for (byte Idx = 0; Idx < buffer.Length; Idx++)
                        buffer[Idx] ^= Xor;
 
                    return BitConverter.ToInt32(buffer, 0);
                }
                set
                {
                    this.converseBuffer = BitConverter.GetBytes(Convert.ToInt32(value));
                    for (byte Idx = 0; Idx < this.converseBuffer.Length; Idx++)
                        this.converseBuffer[Idx] ^= Xor;
                }
            }
        }
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
09.08.2017, 23:18
Цитата Сообщение от iDReeM Посмотреть сообщение
вышеупомянутые структуры не защитят, так как они все равно хранят готовое значение,
Да что-ты...Мне кажется ты невнимательно код читал , исходное значение играет роль исключительно наживки для программ отладки или CHeatEngine и пр.То есть хранится как маркер , лишь что бы узнать о попытках его изменить.

Добавлено через 2 минуты
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Защита похожа на незапертые ворота, а сбоку дырявый забор
Аргументы? Или это мираж который тебе явился на фоне погодных аномалий?
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
10.08.2017, 01:17
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Аргументы? Или это мираж который тебе явился на фоне погодных аномалий?
Погодных аномалий последним временем не наблюдалось в моем местности))
По делу:
1. Можно декомпилировать сборку, и посмотреть что где когда. Дальше либо в .NET отладчике менять значения используя сеттеры свойств, либо в ArtMoney менять значения ячеек памяти используя подсмотренный алгоритм.
2. Даже без .NET отладчика в каком нибудь ArtMoney можно в diff-e двух снимков памяти до события/после события посмотреть, что несколько соседних ячеек памяти поменялись вместе и сделать логический вывод, что они вместе влияют на результат. Как минимум даже без анализа алгоритма "шифрования" во многих случаях бывает достаточно просто установить известное "хорошее" значение.
3. Если у тебя с приложением все хорошо и его никто не взломал, то я бы задумался о его пользе. Обычно бесполезные программы даже не пытаются взломать.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
10.08.2017, 11:01
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Дальше либо в .NET отладчике менять значения используя сеттеры свойств
На счет этого согласен , но код и подразумевает изменение только "по правилам" через спец-свойство.
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Можно декомпилировать сборку, и посмотреть что где когда.
Допустим , это делает не нуб , а нормальный кодер C# - если это не программа @Hello World!@ или калькулятор , то разобраться в коде весом ну хотя бы от 5 мб , не так просто как кажется! Ну а во вторых нативная компиляция , а что в третьих читай дальше.
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Даже без .NET отладчика в каком нибудь ArtMoney можно в diff-e двух снимков памяти до события/после события посмотреть, что несколько соседних ячеек памяти поменялись вместе и сделать логический вывод, что они вместе влияют на результат.
Ну теперь говорю точно и прочно - код ты читал невнимательно. Есть xor-ключ , он определяется рандомно один раз при создании структуры и является readonly полем(не меняется!)Значение xorvalue определяется лишь тем что подается в сеттер и тем что есть xor-ключ.
Что бы реально изменить значение которое представляет структура нужно знать 2 вещи:
Адрес ячейки с xorvalue и адрес xor-key
А как ты собираешься это узнать ????Xor-key чистый рандом , отсюда и xorvalue также рандомизируется! Нужно одновременно изменить 3 значения xorvalue xor-key value - до того как вызовется геттер , иначе код узнает о попытке взлома.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
10.08.2017, 11:25
Итак что мы имеем.
1. Предполагается, что хакер будет честно грызть кактус и не будет пользоваться .NET отладчиком))
2. Обьем кода. Это вообще не проблема, если код не обфусцирован.
3. xorvalue, xorkey находятся в одной структуре с value, т.е. адрес узнается элементарно - по смещению.
4. О нативной компиляции не понял. Насколько я знаю она доступна только для Windows Store приложений, и непонятно усложняет она декомпиляцию или нет.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
10.08.2017, 12:19
А если применить нативную компиляцию...То все планы в прах.

Добавлено через 1 минуту
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Насколько я знаю она доступна только для Windows Store приложений, и непонятно усложняет она декомпиляцию или нет.
Ну вообще да , усложняет.

Добавлено через 3 минуты
А хотя да дырки есть и на мой взгляд даже в логике. Если это структура , то она должна быть неизменяемой . Тогда нужно переделать код , перегрузить операторы(а их много , поэтому-то я это изначально не делал).И тогда рандомный xor-key будет изменяться чаще , будет сложнее.

Добавлено через 15 минут
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Обьем кода. Это вообще не проблема, если код не обфусцирован.
Вот про натив.

Добавлено через 8 минут
Инструменты .NET Native компилируются ваши IL-библиотеки с управляемым кодом в нативные библиотеки.
Собственно вот эта строчка. А
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Предполагается, что хакер будет честно грызть кактус и не будет пользоваться .NET отладчиком
Ну и вообще идея была взята из другой темы , где цель была именно защита от прог взлома. И относительно этого калитка заперта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2017, 12:19
Помогаю со студенческими работами здесь

Шифровка текста путем вычитания из кода символа
Как можно через C# зашифровать введенный с клавиатуры текст. Процесс шифровки производится следующим образом: из десятичного кода каждого...

Приход/расход и идентификация товаров путем чтения штрих-кода (ООП)
Добрий день. Задали написать проект, но не могу понять несколько моментов. Может кто разъяснит: 1) идентификацию товаров путем чтения...

Создание .dll и присоеденение .dll к проекту путем непосредственного написания кода
Здравствуйте, дорогие форумчане! Я прекрасно знаю, как создавать и прикреплять к проекту .dll файлы при помощи опций компилятора в Visual...

Шифрация и дешифрация по квадрату Полибия
Реализовать шифрование и дешифрацию по Квадрату Полибия. Для выполнения используем русский алфавит. Как реализовать дешифрацию? Вот код...

Добавить DataGridViewer на форму программным путем
может кто-нибудь сказать как добавить DataGridViewer на Form программным путем и вообще возможно ли это???


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru