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

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

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

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

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

Было например значение "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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2017, 04:49
Ответы с готовыми решениями:

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

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

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

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

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

Объясните что конкретно вы хотите?
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
22.06.2017, 18:16 3
Лучший ответ Сообщение было отмечено 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  [ТС] 4
RaevskiAnatoly, Спасибо вам!
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
23.06.2017, 13:31 5
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
как массив бит и каждый бит инвертируется ( 00101010 - 11010101 ).
не то)
Там поразрядное сравнение - совпало 0 , нет - 1.
2
nicolas2008
26.06.2017, 21:00
  #6

Не по теме:

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

0
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
26.06.2017, 22:48 7
От средства "вырви значение отладчик" вышеупомянутые структуры не защитят, так как они все равно хранят готовое значение, попробуй двинутся в направлении похожем на то что ниже:
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
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
09.08.2017, 23:18 8
Цитата Сообщение от iDReeM Посмотреть сообщение
вышеупомянутые структуры не защитят, так как они все равно хранят готовое значение,
Да что-ты...Мне кажется ты невнимательно код читал , исходное значение играет роль исключительно наживки для программ отладки или CHeatEngine и пр.То есть хранится как маркер , лишь что бы узнать о попытках его изменить.

Добавлено через 2 минуты
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Защита похожа на незапертые ворота, а сбоку дырявый забор
Аргументы? Или это мираж который тебе явился на фоне погодных аномалий?
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
10.08.2017, 01:17 9
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Аргументы? Или это мираж который тебе явился на фоне погодных аномалий?
Погодных аномалий последним временем не наблюдалось в моем местности))
По делу:
1. Можно декомпилировать сборку, и посмотреть что где когда. Дальше либо в .NET отладчике менять значения используя сеттеры свойств, либо в ArtMoney менять значения ячеек памяти используя подсмотренный алгоритм.
2. Даже без .NET отладчика в каком нибудь ArtMoney можно в diff-e двух снимков памяти до события/после события посмотреть, что несколько соседних ячеек памяти поменялись вместе и сделать логический вывод, что они вместе влияют на результат. Как минимум даже без анализа алгоритма "шифрования" во многих случаях бывает достаточно просто установить известное "хорошее" значение.
3. Если у тебя с приложением все хорошо и его никто не взломал, то я бы задумался о его пользе. Обычно бесполезные программы даже не пытаются взломать.
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
10.08.2017, 11:01 10
Цитата Сообщение от 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
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
10.08.2017, 11:25 11
Итак что мы имеем.
1. Предполагается, что хакер будет честно грызть кактус и не будет пользоваться .NET отладчиком))
2. Обьем кода. Это вообще не проблема, если код не обфусцирован.
3. xorvalue, xorkey находятся в одной структуре с value, т.е. адрес узнается элементарно - по смещению.
4. О нативной компиляции не понял. Насколько я знаю она доступна только для Windows Store приложений, и непонятно усложняет она декомпиляцию или нет.
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
10.08.2017, 12:19 12
А если применить нативную компиляцию...То все планы в прах.

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

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

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

Добавлено через 8 минут
Инструменты .NET Native компилируются ваши IL-библиотеки с управляемым кодом в нативные библиотеки.
Собственно вот эта строчка. А
Цитата Сообщение от nicolas2008 Посмотреть сообщение
Предполагается, что хакер будет честно грызть кактус и не будет пользоваться .NET отладчиком
Ну и вообще идея была взята из другой темы , где цель была именно защита от прог взлома. И относительно этого калитка заперта.
0
10.08.2017, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2017, 12:19
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru