СПОСОБ ПРЕДОТВРАЩЕНИЯ ОБРАТНОГО ИНЖИНИРИНГА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, НЕАВТОРИЗОВАННОЙ МОДИФИКАЦИИ И ПЕРЕХВАТА ДАННЫХ ВО ВРЕМЯ ВЫПОЛНЕНИЯ

1. Способ предотвращения неавторизованной модификации программного обеспечения или неавторизованной модификации данных во время выполнения, содержащий этапы, на которых:
a. предоставляют преобразователь, допускающий преобразование упомянутого программного обеспечения в обобщенный машинный код, обратный инжиниринг которого нельзя выполнить посредством использования процесса преобразования, который вызывает потерю данных; и
b. предоставляют интерпретатор, в котором знание способа обработки сохраняется ограниченным;
c. интерпретируют посредством упомянутого интерпретатора упомянутый общий машинный код в конкретный машинный код при восстановлении потерянных данных в ходе процесса интерпретации.
2. Способ по п.1, в котором интерпретатор компилируется посредством CLR.
3. Способ по п.1 или 2, в котором программное обеспечение разделяется так, что только часть программного обеспечения преобразуется с помощью преобразователя и интерпретируется интерпретатором.
4. Способ по п.1, в котором программным обеспечением является высокоуровневый язык.
5. Способ по п.4, в котором высокоуровневый язык - это язык на основе интерпретатора.
6. Способ по п.5, в котором высокоуровневым языком может быть один из следующего: Java, Visual J#, J#, C# или http://VB.NET.
7. Способ по п.4, в котором высокоуровневый язык - это язык на основе компилятора.
8. Способ по п.7, в котором высокоуровневым языком может быть один из следующего: C++, VB или Pascal.
9. Способ по п.1, в котором потеря данных в ходе преобразования состоит в удалении метаданных структуры кода.
10. Способ по п.1, в котором потеря данных в ходе преобразования состоит в преобразовании команд в другие команды, которым соответствующий операнд(ы) определен во время выполнения.
11. Способ предотвращения декомпиляции и модификации во время выполнения кода программного обеспечения .NET/CLI с помощью средств, которые базируются на метаданных .NET/CLI, содержащий этапы, на которых:
a. предоставляют преобразователь, допускающий преобразование упомянутого программного обеспечения .NET/CLI в общий машинный код, причем упомянутое преобразование включает в себя потерю данных по метаданным .NET/CLI;
b. предоставляют новый интерпретатор, выполненный с возможностью интерпретации упомянутого общего машинного кода без требования наличия метаданных .NET/CLI, при этом упомянутый новый интерпретатор реализован как программный компонент на основе .NET/CLI для поддержания такого же уровня переносимости, что и упомянутый код программного обеспечения .NET/CLI; и
c. интерпретируют упомянутый общий машинный код в конкретный машинный код упомянутым интерпретатором.
12. Способ по п.11, в котором программное обеспечение разделяется так, что только часть программного обеспечения преобразуется с помощью преобразователя и интерпретируется новым интерпретатором.
13. Способ предотвращения подделки механизма вступления в силу условий лицензионного соглашения в среде .NET/CLI по п.11, в котром средства декомпиляции и модификации, которые основаны на метаданных .NET/CLI, становятся непригодными после применения упомянутого способа.
14. Способ по п.11 для шифрования кода .NET/CLI при преодолении отсутствия поддержки шифрования/расшифровки кода в .NET/CLI посредством выполнения частичной расшифровки исполняемой в данный момент функции, содержащий этапы, на которых:
a. применяют процесс симметричного шифрования к представлению общего машинного кода каждой преобразованной функции; и
b. расшифровывают каждую функцию общего машинного кода до исполнения посредством нового интерпретатора.
15. Способ по п.14, в котором симметричный ключ процесса шифрования доставляется пользователю программного обеспечения отдельно, тем самым делая неавторизованное исполнение программного обеспечения невозможным.
16. Способ по п.11, в котором различные реализации нового интерпретатора предоставляются производителям программного обеспечения, при этом упомянутый новый интерпретатор сформирован посредств выбора полного поднабора команд из избыточного набора команд и посредством динамического формирования преобразователя и .NET/CLI-сборки реализации упомянутого нового интерпретатора с помощью .NET Framework System.CodeDom API, System.Reflection.Emit API или непосредственного формирования исходного кода на языке .NET.
17. Способ по п.11, в котором различные реализации нового интерпретатора предоставляются производителям программного обеспечения посредством применения процесса сбивания с толку с помощью различных схем переименования метаданных в одной базовой реализации .NET/CLI упомянутого нового интерпретатора для предоставления возможности упомянутым метаданным отображаться по-разному в средствах декомпиляции.
18. Способ по пп.16 и 17, в котором новый интерпретатор сформирован посредством выбора полного поднабора команд из избыточного набора команд и посредством динамического формирования преобразователя и .NET/CLI-сборки реализации упомянутого нового интерпретатора с помощью .NET Framework System.CodeDom API, System.Reflection.Emit API или непосредственного формирования исходного кода на языке .NET, а также посредством применения процесса сбивания с толку с помощью различных схем переименования метаданных той же самой базовой реализации .NET/CLI упомянутого нового интерпретатора для предоставления возможности упомянутым метаданным отображаться по-разному в средствах декомпиляции.
19. Способ предотвращения декомпиляции и модификации во время выполнения кода программного обеспечения Java с помощью средств, которые базируются на метаданных класса Java, содержащий этапы, на которых:
a. предоставляют преобразователь, выполненный с возможностью преобразования упомянутого кода программного обеспечения Java в общий машинный код, причем упомянутое преобразование включает в себя потерю данных по метаданным Java;
b. предоставляют новый интерпретатор, выполненный с возможностью интерпретации упомянутого общего машинного кода без требования метаданных класса Java, при этом упомянутый новый интерпретатор реализован как программный компонент на основе Java для поддержания такого же уровня переносимости, что и упомянутый код программного обеспеченич Java; и
c. интерпретируют посредством упомянутого интерпретатора упомянутый общий машинный код в конкретный машинный код.
20. Способ по п.19, в котором программное обеспечение разделяется так, что только часть программного обеспечения преобразуется с помощью преобразователя и интерпретируется новым интерпретатором.
21. Способ предотвращения подделки механизма вступления в силу условий лицензионного соглашения в среде Java по п. 11, в котором средства декомпиляции и модификации, которые основаны на метаданных .NET/CLI, становятся непригодными после применения упомянутого способа.
22. Способ по п.19 для шифрования кода Java при преодолении отсутствия поддержки шифрования/расшифровки кода в Java VM посредством выполнения частичной расшифровки в исполняемую в данный момент функцию, содержащий этапы, на которых:
a. применяют процесс симметричного шифрования к представлению общего машинного кода каждой преобразованной функции; и
b. расшифровывают каждую функцию общего машинного кода до исполнения новым интерпретатором.
23. Способ по п.22, в котором симметричный ключ процесса шифрования доставляется пользователю программного обеспечения отдельно, тем самым делая неавторизованное исполнение программного обеспечения невозможным.
24. Способ по п.19, в котором различные реализации нового интерпретатора предоставляются производителям программного обеспечения, при этом упомянутый новый интерпретатор сформирован посредством выбора полного поднабора команд из избыточного набора команд и посредством динамического формирования преобразователя и реализации упомянутого нового интерпретатора.
25. Способ по п.19, в котором различные реализации нового интерпретатора предоставляются производителям программного обеспечения посредством применения процесса сбивания с толку с помощью различных схем переименования метаданных в одной базовой реализации Java упомянутого нового интерпретатора для предоставления возможности упомянутым метаданным отображаться по-разному в средствах декомпиляции.
26. Способ по пп.24 и 25, в котором новый интерпретатор сформирован посредством выбора полного поднабора команд из избыточного набора команд и посредством динамического формирования преобразователя и реализации упомянутого нового интерпретатора, а также посредством применения процесса сбивания с толку с помощью различных схем переименования метаданных в той же самой базовой реализации упомянутого нового интерпретатора для предоставления возможности упомянутым метаданным отображаться по-разному в средствах декомпиляции.
27. Способ по п.11, в котором использование инструментальных средств, которые базируются на метаданных .NET/CLI, для подделки механизма вступления в силу условий лицензионного соглашения предотвращается посредством использования архитектуры нового интерпретатора для того, чтобы осуществлять вызовы между преобразованными методами.
28. Способ по п.19, в котором использование инструментальных средств, которые базируются на метаданных класса Java, для подделки механизма вступления в силу условий лицензионного соглашения предотвращается посредством использования архитектуры нового интерпретатора для того, чтобы осуществлять вызовы между преобразованными методами.