Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/76: Рейтинг темы: голосов - 76, средняя оценка - 4.62
Землянин
 Аватар для Pjeroo
34 / 34 / 16
Регистрация: 15.01.2013
Сообщений: 312

Защита программы от декомпилятора

01.02.2013, 19:27. Показов 16220. Ответов 99
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли это, если возможно, то как?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2013, 19:27
Ответы с готовыми решениями:

Выбор декомпилятора для .NET
Подскажите декомпилятор C#. Скачал JetBrains но как им пользоватся я не знаю:-|

Защита программы от НСД. Защита путем шифрования части программы на флеш-диске или флешке
Написать программу на любом известном Вам языке программирования. Программа должна выполнять функцию защиты программы от НСД. Защита...

Использование flash-декомпилятора
Мне декомпилятор Flash Decompiler Trillix после разборки swf-файла выдает несколько папок: - Buttons - Fonts - Frames - Images -...

99
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 12:10
Студворк — интернет-сервис помощи студентам
Sleepy_Master, не помню, больше полугода прошло ) Я пришел к выводу, что если программа будет достаточно полезная, то она будет достаточно сложной, чтобы в ней было слишком трудно разобраться без документации для создания сколько-нибудь стоящей копии.
0
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
04.02.2013, 12:28
Мне казалось что если программа достаточно полезная, да ещё и качественно написанная. То в ней разобраться труда не составит. Ведь каждый опытный программист стремится к тому что бы упростить свой код и максимально сократить. Но т.к. я не опытный программист, то могу ошибаться.
90% обфускаторов ломаются обычным de4dot, потому я тут даже спорить не буду. Но Code Veil он не осилил (где то пол года назад точно), а значит и другие фришные и крякнутые деобфускаторы тоже не могли ничего сделать .
Для качественного продукта, в любом случае, придется рано или поздно задуматься о его защите. Потому, нужно хотя бы постараться оттянуть срок за который взломщик сможет вскрыть код, а пока он потратит на это уйму времени, денег, уже программа обновиться и по новой придется все ломать, тратить деньги и время.
Любой банк можно взломать, ограбить, это не секрет, но это же не значит что нужно забить на защиту вовсе.
Нужно сократить круг людей, которые смогут этот банк ограбить до минимума. И когда грабитель поймет что защита очень крутая у банка, он, скорее подумает лучше взяться за что то по-проще чем тратить время. Хотя опять же я банки не грабил, могу ошибаться ))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 12:32
Sleepy_Master, программа может и хорошо написана, но есть такое понятие, как документация. Без нее даже с открытым кодом хрен чего поймешь. К тому же все константы записываются непосредственно. А как вы знаете, код с "волшебными числами" хрен разберешь. )) Даже примитивное переименование переменных очень запутает код. Когда по всему коду разбросаны
C#
1
i1 = i2*i3+(int)i4/Math.Atan(d7+d9);
то хрень поймешь, че имелось ввиду). Особых защит-то и не надо в таком случае. Компьютеру все равно, Как именуются переменные, а человек без документации в таком коде сдохнет)
0
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
04.02.2013, 12:39
С такими сложными кодами я, видимо, не сталкивался. Если пишу код, то пишу как для себя, что бы и через пол года было все прозрачно и мог быстро раздуплиться что я там накалякал.
Может я ещё не разочаровался в обфускаторах, может со временем я изменю свои взгляды на любые защиты и забью на них вовсе, но пока убежден что хороший код защищать можно и нужно ))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 13:07
Sleepy_Master, да при чем тут сложный код? Вот например код из одной моей программы: конечно, далеко не идеал, но и не самый плохой код. Я его немного "пообфусцировал" вручную (через поиск-замену), вот каким стал код:
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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
 
namespace ns1
{
    public class class2
    {
        public readonly Point? nullablep1, nullablep2, nullablep3, nullablep4;
 
        public class2(Point? nullablep1, Point? nullablep3, Point? nullablep4, Point? nullablep2)
        {
            this.nullablep1 = nullablep1;
            this.nullablep3 = nullablep3;
            this.nullablep4 = nullablep4;
            this.nullablep2 = nullablep2;
        }
    }
 
    public partial class class1
    {
        private readonly int i1;
        private Point p1;
        private readonly HashSet<Point> hashset1;
        private readonly Size size1;
        private readonly Queue<class3> queue1;
        private class3 class31;
        public int int2 { get; private set; }
 
        public class1(int param1, int i1, Size mapSize1, HashSet<Point> hashset1)
        {
            this.i1 = i1;
            queue1 = new Queue<class3>();
            size1 = mapSize1;
            this.hashset1 = hashset1;
            var p = new Point((size1.Width - param1) >> 1, size1.Height / 2);
            for (int i = 0; i < param1; i++, p.X++)
                queue1.Enqueue(new class3(p));
            p.X--;
            class31 = p;
            Meth5();
        }
 
        public Point P1Coords { get { return p1; } }
 
        public IEnumerable<Point> GetIEnumerablePoint()
        {
            return queue1.Cast<Point>();
        }
 
 
        public Tuple<class2, bool> Meth1(Point param1)
        {
            Point? nullablep1 = queue1.Peek();
            Point point = class31;
            Point? nullablep2 = null;
            class3 class3 = class31 + param1;
            if (Meth3(class3)) return new Tuple<class2, bool>(null, true);
            Meth2(class3);
            Point nullablep4 = class31;
            if (Meth4())
            {
                int2 += i1;
                Meth5();
                nullablep1 = null;
                nullablep2 = P1Coords;
            }
            else
                Meth6();
            return new Tuple<class2, bool>(new class2(nullablep1, point, nullablep4, nullablep2), false);
        }
 
 
        private bool Meth4()
        {
            return class31 == p1;
        }
 
 
        private void Meth6()
        {
            queue1.Dequeue();
        }
 
 
        private void Meth2(class3 s)
        {
            if (s.X < 0)
                class31.X = size1.Width - 1;
            else if (s.X > size1.Width - 1)
                class31.X = 0;
            else if (s.Y < 0)
                class31.Y = size1.Height - 1;
            else if (s.Y > size1.Height - 1)
                class31.Y = 0;
            else
                class31 = s;
            queue1.Enqueue(class31);
        }
 
        private bool Meth3(class3 s)
        {
            return queue1.Contains(s) && (Point)s != queue1.Peek() || meth7(s);
        }
 
        private bool meth7(class3 s)
        {
            return hashset1.Contains(s);
        }
 
        private void Meth5()
        {
            var r = new Random();
            var p = new Point();
            do
            {
                p.X = r.Next(size1.Width);
                p.Y = r.Next(size1.Height);
            } while (queue1.Contains(p) || hashset1.Contains(p));
            p1 = p;
        }
    }
}
Сильно понятно?
А вот тот же код, с нормальными именами:
Кликните здесь для просмотра всего текста
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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
 
namespace Snake
{
    public class SnakeTurnInfo
    {
        public readonly Point? TailToClean, NewFood, OldHeadToClean, NewHead ;
 
        public SnakeTurnInfo(Point? tailToClean, Point? oldHeadToClean, Point? newHead, Point? newfood)
        {
            TailToClean = tailToClean;
            OldHeadToClean = oldHeadToClean;
            NewHead = newHead;
            NewFood = newfood;
        }
    }
 
    public partial class Snake
    {
        private readonly int scoreForFood; //Очки за подобранную еду
        private Point food; //Координаты клетки с едой
        private readonly HashSet<Point> barriers;
        private readonly Size size; //Размеры карты
        private readonly Queue<Segment> snake; //Сама змейка
        private Segment head; //Голова
        public int Score { get; private set; }
 
        public Snake(int segmentCount,int scoreForFood, Size mapSize, HashSet<Point> barriers)
            //Конструктор, определяет размеры карты и начальное количество сегментов змеи
        {
            this.scoreForFood = scoreForFood;
            snake = new Queue<Segment>();
            size = mapSize;
            this.barriers = barriers;
            var p = new Point((size.Width - segmentCount) >> 1, size.Height/2); //Ставим змейку на середину карты
            for (int i = 0; i < segmentCount; i++, p.X++)
                snake.Enqueue(new Segment(p));
            p.X--;
            head = p;
            PlaceNewFood();
        }
 
        public Point FoodCoords { get { return food; } }
 
        public IEnumerable<Point> GetCoords()
        {
            return snake.Cast<Point>(); //Возвращаем список координат змеи
        }
 
 
        public Tuple<SnakeTurnInfo,bool> Move(Point relativityDirection)
            //Передвигаем змею. Если она себя кусает, возвращаем true
        {
            Point? tail = snake.Peek();
            Point oldhead = head;
            Point? newfood = null;
            Segment newHeadPos = head + relativityDirection;
            if (Collision(newHeadPos)) return new Tuple<SnakeTurnInfo, bool>(null,true);
            MoveHead(newHeadPos);
            Point newhead = head;
            if (FoundFood()) //Если змея попала на клетку с едой, мы рандомную клетку заполняем едой
            {
                Score += scoreForFood;
                PlaceNewFood();
                tail = null;
                newfood = FoodCoords;
            }
            else
                MoveTail(); //Иначе, чтобы змея не увеличилась, убираем последний сегмент
            return new Tuple<SnakeTurnInfo, bool>(new SnakeTurnInfo(tail, oldhead, newhead, newfood),false);
        }
 
        
        private bool FoundFood()
        {
            return head == food;
        }
 
 
        private void MoveTail()
        {
            snake.Dequeue();
        }
 
 
        private void MoveHead(Segment s) //Передвигаем голову с учетом телепортов через край
        {
            if (s.X < 0)
                head.X = size.Width - 1;
            else if (s.X > size.Width - 1)
                head.X = 0;
            else if (s.Y < 0)
                head.Y = size.Height - 1;
            else if (s.Y > size.Height - 1)
                head.Y = 0;
            else
                head = s;
            snake.Enqueue(head);
        }
 
        private bool Collision(Segment s)
        {
            return snake.Contains(s) && (Point) s != snake.Peek() || CheckBorders(s);
        }
 
        private bool CheckBorders(Segment s)
        {
            return barriers.Contains(s);
        }
 
        private void PlaceNewFood()
        {
            var r = new Random();
            var p = new Point();
            do
            {
                p.X = r.Next(size.Width);
                p.Y = r.Next(size.Height);
            } while (snake.Contains(p) || barriers.Contains(p));
            food = p;
        }
    }
}
0
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
04.02.2013, 13:20
Для такого кода придется сутки посидеть что бы разобраться в нем, но если очень нужно расшифруют что куда. А если ещё и деобфусцировать нужно сутки, а ещё + к этому нужно заплатить за хороший деобфускатор, а ещё если сам не умеешь, то заплатить спецу за работу. Уже получается время+деньги+ знания, а не только время.
Тот же de4dot, если я не ошибаюсь т.к. давно не использовал, деобфусцирует с реальными названиями классов и переменных.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 13:24
Sleepy_Master, это код на 100 строк. Для сравнения: в касперском антивирусе их 2 миллиона. Их ты не разберешь и за вечность, если он будет так записан. сутки * 2000000/100=54 года.
0
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
04.02.2013, 13:29
Вот хороший пример с касперским. Вот скажите, разве можно взять и посмотреть исходный код касперского без труда? Хотя бы в таком виде как 2-ой пример Вашего кода?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 13:57
Sleepy_Master, не пробовал. Но даже если можно, это пустая трата времени.
0
 Аватар для GOLD
124 / 37 / 6
Регистрация: 14.01.2012
Сообщений: 264
04.02.2013, 14:08
Цитата Сообщение от Psilon Посмотреть сообщение
Sleepy_Master, не пробовал. Но даже если можно, это пустая трата времени.
Я к тому что в лаборатории касперского не глупые люди сидят. Если код зашифрован, значит не с проста, даже не смотря на то что там 100500 команд и переменных.
Ведь над касперским работает не 1 человек, а штат программистов и 1 человек не в состоянии написать 2 миллиона строк за короткое время и на написание такого продукта с 0 ,тоже уйдет не меньше чем на расшифровку.
Так вот, что бы расшифровать деобфусцированный код, этим тоже должна заниматься команда людей и уверен занялась бы и получила бы с этого прибыль, если бы хорошей защиты от вскрытия кода не стояло. Но т.к., видимо, защита не плохая, ни кто и не берется.

Добавлено через 2 минуты
Прошу прощения, но в поддержание темы ссылка - {ссылка удалена}
«и его исходники она старается защитить сильнее, чем свою финансовую документацию».
Чем, собственно, данная строка и доказывает мое мнение что хороший код защищать можно и нужно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 14:09
Sleepy_Master, у касперского стоимость/кол-во строк достаточно высокая, чтобы этим озаботиться. А вот всякие paint.Net не такие уж дорогие. К тому же опенсорс. Многие и С++ - который хрен декомпилируешь - выкладывают с исходниками. Так что все в порядке) Я ж не говорю, что обфускация от лукавого. Хотя я бы не стал, хотя бы потому, что обфусцированный код часто тормозит.
Кликните здесь для просмотра всего текста
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
04.02.2013, 16:11
взяли и касперского сюда приплели . он на .net чтоли написан? на плюсах же вроде. дайте мне декомпилятор, который восстанавливает исходники из нативных файлов если асм не знаешь, то тут будет трудно. ладно, знаем асм, декомпильнули нативный файл, что дальше? дальше мы видим кучу кода на асм, который даже близко не похож на исходный. понять, как работает, логику - да, это возможно. а как достать исходник? наверное заново написать , ведь логику мы поняли? но для понимания логики нужны знания асм, а ведь не каждый, кто пишет на с++ , делфи знает асм да?
Если код зашифрован, значит не с проста, даже не смотря на то что там 100500 команд и переменных.
Так вот, что бы расшифровать деобфусцированный код, этим тоже должна заниматься команда людей и уверен занялась бы и получила бы с этого прибыль, если бы хорошей защиты от вскрытия кода не стояло. Но т.к., видимо, защита не плохая, ни кто и не берется.
советую вам ознакомиться с статьей - тык, и еще - дайте чтоли обфускатор для с++ или делфи мне. если вы такой встречали который шифрует код не от глаз самого разработчика, а от глаз других но только деобфускатор, а не криптор. мы ведь затронули тему обфускаторов.
Да что б моей чашке с кофе под землю провалиться, была такая программа и прекрасно скрывала код от таких деобфускаторов как de4dot и т.п. Идеальной защиты не бывает, но от школьника и рядового программиста такая прога защитит.
мой пост смотрели? - Защита программы от декомпилятора скрывает, как надо .
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 16:14
Winhttp, C\C++\C#\Perl - на чем написаны компоненты каспера. Можете не сомневаться, я там был лично
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
04.02.2013, 16:34
Цитата Сообщение от Psilon Посмотреть сообщение
Winhttp, C\C++\C#\Perl - на чем написаны компоненты каспера. Можете не сомневаться, я там был лично
на c# или perl явно не написано ядро программы. кстати, инет говорит, что написан он на делфи и с++ , источник - http://news.softpedia.com/news... 1297.shtml .
кстати, тс говорил о вскрытии исходников касперского, якобы от этого можно получить прибыль. возможно он еще не знает, что любую программу, написаную вами, можно и даже нужно зарегистрировать ( на скрине ), если программа коммерческая, и копия такой же программы будет уже не законна, со всеми вытекающими из этого последствиями.
скрин
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
04.02.2013, 20:26
Цитата Сообщение от Winhttp Посмотреть сообщение
если программа коммерческая, и копия такой же программы будет уже не законна,
копия может быть
а если я её вскрыл и написал вариант на тему, как ты докажешь плагиат?
тем более если ты пользуешься стандартными алгоритмами?
по законодательству РФ ( надеюсь в Белоруссии так же) декомпиляция кода не является нарушением авторских прав
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
04.02.2013, 20:47
ValeryS, ну это наверное уже зависит от того, как в лицензии будет указано, можно ли декомпилировать, или нет. насколько я знаю - декомпиляция не законна. но если у тебя есть источники, утверждающее обратное, то предоставь их, интересно об этом почитать.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
04.02.2013, 20:51
Цитата Сообщение от Winhttp Посмотреть сообщение
насколько я знаю - декомпиляция не законна.
ссылку на закон
лицензии не в счет

Цитата Сообщение от Winhttp Посмотреть сообщение
но если у тебя есть источники, утверждающее обратное,
ГК РФ, УК ЗФ
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
04.02.2013, 20:57
Цитата Сообщение от ValeryS Посмотреть сообщение
ГК РФ, УК ЗФ
конкретнее?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
04.02.2013, 21:12
компьютерные преступления в УК
Преступлениями в сфере компьютерной информации являются:
1. Неправомерный доступ к компьютерной информации (ст.272 УК РФ);
2. Создание, использование и распространение вредоносных программ для ЭВМ (ст.273 УК РФ);
3. Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети (ст.274 УК РФ);
второй пункт сразу исключаем, мы вирусы не пишем
третий тоже не попадает под декомпиляцию
остается первый неправомерный
я купил программу (объект, копию)
2. Неправомерный доступ к компьютерной информации ( ст. 272 УК)

Непосредственным объектом преступления является право владельца компьютерной системы на неприкосновенность содержащейся в ней информации
Объективная сторона данного преступления состоит в неправомерном доступе к охраняемой законом компьютерной информации, т.е. к информации на машинном носителе , в ЭВМ, системе ЭВМ или их сети, если это деяние повлекло уничтожение. Блокирование, модификацию, либо копирование информации, нарушение работы ЭВМ, системы ЭВМ или их сети.
Под информацией в данном случае понимаются сведения о лицах, предметах, фактах, событиях, явлениях и процессах, содержащиеся в информационных системах. Эта информация должна быть чужой для осуществляющего неправомерный доступ лица и защищенной от произвольного копирования.
"Доступ" к охраняемой законом компьютерной информации - это приобретение и использование лицом возможности получать информацию, вводить ее либо влиять на процесс обработки информации.
"Неправомерным" следует считать такой доступ, когда лицо действует без разрешения владельца этой системы или сети или другого законного полномочия.
Обязательным признаком объективной стороны этого преступления является наступление вредных последствий для собственника или хранителя информации в виде уничтожения, блокирования, модификации либо копирования информации, нарушения работы ЭВМ, системы ЭВМ или их сети. Это означает, что сам по себе просмотр информации, хранящейся в оперативной памяти компьютера или на машинном носителе (дискете, CD-R диске), состава преступления не образует.
Под уничтожением информации понимается не простое удаление файлов, а только такое, которое приведет к невозможности их восстановления.
Модификация информации - существенное ее видоизменение, совершенное без согласия собственника информации и затрудняющее законное пользование ею.
Блокирование информации - это создание препятствий к свободному ее использованию при сохранности самой информации.
Нарушение работы ЭВМ, системы ЭВМ или их сети имеет место в случае, если компьютерная система не выполняет своих функций, выполняет их не должным образом или в случае заметного уменьшения производительности системы. Между действиями и последствиями обязательно должна быть установлена причинная связь.
Вопрос о том, когда окончено данное деяние, должен решаться так - моментом его окончания является момент отсылки пользователем последней интерфейсовой команды вызова хранящейся информации, независимо от наступления дальнейших последствий. Однако преступлением это деяние станет лишь при наличии последнего условия. При ненаступлении указанных последствий, все совершенные до этого действия будут подпадать под признаки неоконченного преступления.
Субъективная сторона преступления характеризуется виной в форме умысла: лицо сознает, что осуществляет неправомерный (несанкционированный) доступ к охраняемой законом компьютерной информации, предвидит, что в результате производимых им действий могут наступить или неизбежно наступят указанные в законе вредные последствия, и желает (прямой умысел) или сознательно допускает (косвенный умысел) их наступления либо относится к ним безразлично.
Мотивы и цели этого преступления могут быть разными: корыстный мотив, желание получить какую-либо информацию либо желание причинить вред. Мотив и цель не являются признаками состава данного преступления и не влияют на квалификацию.
Субъект - лицо, достигшее 16-летнего возраста.
Квалифицирущие признаки:
1. совершение данного преступления группой лиц по предварительному сговору;
2. совершение данного преступления организованной группой;
3. совершение данного преступления лицом с использованием своего служебного положения, а равно имеющим доступ к ЭВМ, системе ЭВМ или их сети.
Если описание первых двух признаков дано в ст. 35 УК, то специальный субъект двух последних можно трактовать как отдельных должностных лиц, программистов, операторов ЭВМ, наладчиков оборудования, специалистов-пользователей специализированных рабочих мест и т.д.
Лицом, "имеющим доступ к ЭВМ, системе ЭВМ или их сети" является как лицо, которому в силу разрешения владельца системы или служебного полномочия разрешено получать информацию в компьютерной системе, вводить ее или производить с ней операции, так и лицо, осуществляющее техническое обслуживание компьютерного оборудования и на иных законных основаниях имеющее допуск к компьютерной системе. Лицо, имеющее допуск к компьютерной системе может совершить это преступление лишь в случае доступа к информации, допуска к которой оно не имеет. В случае, когда существенный вред причиняется действиями лица имеющего правомерный доступ имеющее допуск к компьютерной информации, ответственность наступает по ст. 274 УК.
итак копирование незаконно, но об этом никто и не спорил
вот ключевые слова
Это означает, что сам по себе просмотр информации, хранящейся в оперативной памяти компьютера или на машинном носителе (дискете, CD-R диске), состава преступления не образует.
ну и где сказано что декомпиляция незаконна

Добавлено через 6 минут
в гражданский кодекс пойдем?

если ты написал в лицензии "Никто не смеет смотреть что я там написал" это никакой юридической силы не имеет
если я купил холодильник то фирма производитель не возмущается если я разберу его по винтику.
А программисты услышав где то про "авторские права" начинают гнуть пальцы.
причем половина из них не знают чем отличаются "авторские" от "смежных" прав
а если ты в свою прогу вирус загнал? я имею право удостоверится или на слово верить?

Добавлено через 2 минуты
в догонку
Цитата Сообщение от ValeryS Посмотреть сообщение
Под информацией в данном случае понимаются сведения о лицах, предметах, фактах, событиях, явлениях и процессах, содержащиеся в информационных системах. Эта информация должна быть чужой для осуществляющего неправомерный доступ лица и защищенной от произвольного копирования.
как видишь про алгоритмы ни слова
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2013, 22:17
Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.

В настоящее время под словами «reverse engineering» чаще всего понимается т. н. clean room reverse engineering, то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2013, 22:17

Простейшая защита программы: где хранить число срабатываний программы?
День добрый! Написал одну небольшую программу, которая может быть интересна специализированной тусовке. Хочу распространять ее бесплатно,...

Защита программы
Здравствуйте! Как можно защитить свою программу от взлома? Я пытался использовать обфускатор NET Reactor но все равно мою программу смогли...

Защита программы
Вот такой вопрос: Написал программу, хочу передать её в безвозмездное пользование приятелю. Условие только одно - чтобы ей пользовался...

Защита программы
Есть программа на С++. Как поставить на нее защиту на 10 дней? Есть ли у кого пример готового кода.

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru