Skip to content

Этот репозиторий содержит инструмент для обфускации кода на языке 1С:Предприятие (BSL)

License

Notifications You must be signed in to change notification settings

LazarenkoA/Obfuscator-1C

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Обфускатор языка 1С (bsl)

Этот репозиторий содержит инструмент для обфускации кода на языке 1С:Предприятие (BSL). Обфускация позволяет усложнить анализ кода и повысить уровень защиты интеллектуальной собственности в ваших проектах на платформе 1С. Проект работает на 1c-language-parser

Пример использования

package main

import (
	"context"
	"fmt"

	"github.com/LazarenkoA/Obfuscator-1C/obfuscator"
)

func main() {

	code := `...`

	obf := obfuscator.NewObfuscatory(context.Background(), obfuscator.Config{RepExpByTernary: true,
		RepLoopByGoto:    true,
		RepExpByEval:     true,
		HideString:       true,
		ChangeConditions: true,
		AppendGarbage:    true,
	})

	obCode, err := obf.Obfuscate(code)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(obCode)
}

этот пример на play.golang.com

Примеры обфускации

Исходный код

&НаСервереБезКонтекста
Процедура Команда1НаСервере()     
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Оборудование.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Оборудование КАК Оборудование";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
	КонецЦикла;
	

КонецПроцедуры


на выходе

&НаСервереБезКонтекста
Процедура Команда1НаСервере() Запрос = Вычислить(raeyrчфлинzpeолюучzт("0LzQn9CT0arQmAHQttCR0J7RodCf0aAJCA==", ?(81 + 94 - 12 / 20 + 70 / 68 < 80 - 21 + 54 - 30, 674, ?(76 / 98 * 9 + 13 + 99 / 57 > 56 * 30 + 81, 727, ?(71 + 97 - 51 > 71 * 63 / 26 * 56 / 93, 33, 666)))));Запрос.Текст = raeyrчфлинzpeолюучzт("0ZLRq9GR0aDRkNGi0axKSUlgSdGe0bHRvtCA0IPRtNG+0bLRsNG90bjRtW7RodCB0IvRu9G60bBg0ZrRkNGaYNGh0IHQi9G70brRsEpJSWDRmNGXSklJYEnRodG/0IDRsNGy0b7Qh9G90bjRum7RntGx0b7QgNCD0bTRvtGy0bDRvdG40bVg0ZrRkNGaYNGe0bHRvtCA0IPRtNG+0bLRsNG90bjRtQ==", ?(8 - 69 / 38 > 85 + 94 * 38, 102, ?(25 + 1 + 69 + 33 + 96 < 80 + 87 * 2 - 78, 892, ?(100 / 8 + 37 + 88 + 10 > 80 + 26 - 16, 64, 696))));РезультатЗапроса = Вычислить(raeyrчфлинzpeолюучzт("0LfQkNCf0aDQntGhDtCy0avQn9Ce0JvQndCY0aLRrAgJ", ?(28 + 44 > 91 - 18 + 55 + 29 + 18, 803, ?(91 - 45 * 18 * 95 + 55 - 80 < 62 * 98 * 39 + 16 / 15 / 3, 32, ?(80 + 95 + 69 * 19 < 6 * 39 / 63, 37, 736)))));ВыборкаДетальныеЗаписи = Вычислить(raeyrчфлинzpeолюучzт("0bDRpdGn0JPRq9Cc0JLRoNCS0YfRoNGv0JDRrtCR0aB+0YLQm9Gh0JDRoNCS0Jx4eQ==", ?(43 - 38 + 95 * 86 + 13 / 60 < 7 + 71, 732, ?(41 - 1 - 34 + 3 / 66 > 81 - 7 + 60 + 90 / 79 / 70, 347, ?(42 * 50 / 84 - 48 / 46 < 73 + 88, 80, ?(60 / 48 + 90 - 61 / 69 * 86 < 97 + 67 - 52 * 36, 786, 96))))));~аqс:Если Не ВыборкаДетальныеЗаписи.Следующий() Тогда Перейти ~sъjm;КонецЕсли;Сообщить(ВыборкаДетальныеЗаписи.Ссылка);Перейти ~аqс;~sъjm:iзylшйбилnowм = ?(88 + 44 > 76 - 93 / 47 + 11, "islmл", ?(59 / 58 < 42 / 71, "roтrзwlv", ?(44 + 68 / 29 * 90 * 4 > 76 + 94 * 32 - 69, "ыyфвбя", ?(59 + 53 - 21 / 9 / 87 * 13 > 94 * 27 - 74 / 75, "еgdpгсx", "vгаzэop"))));Если 71 + 70 < 57 / 3 / 28 / 77 * 32 Тогда Перейти ~жhфqpгj;~жhфqpгj:Иначе Перейти ~qщлjgру;~qщлjgру:КонецЕсли;КонецПроцедуры
&НаСервереБезКонтекста
Функция raeyrчфлинzpeолюучzт(зmжzdcч, ккeнок) зmжzdcч = ПолучитьСтрокуИзДвоичныхДанных(?(24 - 7 > 5 * 91 * 32 - 83 * 99 * 5, Base64Значение(зmжzdcч), ?(58 + 88 - 97 < 13 + 34 - 40 + 24 / 94, Base64Значение(зmжzdcч), ?(85 / 99 > 8 - 75 * 93 / 11 / 64 + 100, Base64Значение(зmжzdcч), ?(17 * 17 < 76 - 6 / 64 - 81 - 83, Base64Значение(зmжzdcч), Base64Значение(зmжzdcч))))));нпgmpcа = ?(80 - 5 > 14 - 22 / 81, "", ?(36 - 68 / 72 > 87 + 22, "prоъьп", ?(85 + 39 - 6 + 63 < 28 + 43 - 65 / 76, "ддagчъ", ?(97 / 54 / 31 - 13 * 31 > 81 * 19 / 10 / 70 - 3, "bфщиspq", "эnмemчo"))));_ = 1;~rуvr:Если _ > СтрДлина(зmжzdcч) Тогда Перейти ~гpfq;КонецЕсли;код = ?(26 * 58 + 61 < 7 * 60 / 52 - 76 + 23 * 75, КодСимвола(зmжzdcч, _), ?(50 + 82 < 3 / 7 - 95 / 57, КодСимвола(зmжzdcч, _), ?(88 / 27 < 86 - 8 * 53 + 66, КодСимвола(зmжzdcч, _), КодСимвола(зmжzdcч, _))));нпgmpcа = ?(58 + 40 - 54 - 31 / 10 + 42 < 97 + 16 / 15 - 85 + 58, 15 / 19 * 40 - 61 + 4 / 100 > 90 - 67, ?(61 + 22 > 31 * 66 - 95 + 55 - 22, 3 * 55 < 49 - 61 * 34 + 50 / 51, ?(6 + 19 > 56 + 68 + 96 - 24, 53 - 8 + 98 * 82 + 78 < 71 / 54, ?(31 + 78 / 19 - 27 * 79 / 100 > 99 / 20 + 53, 95 * 75 * 34 / 33 / 43 < 47 + 42 / 95 - 68, ?(69 / 71 * 76 < 95 - 76 / 50 * 35 / 73, нпgmpcа + Символ(?(4 + 99 + 9 < 4 - 70, ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))), ?(86 + 8 * 71 < 24 + 68 - 64, ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))), ?(94 + 30 * 9 - 70 > 7 / 73 - 31, ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))), ?(32 - 44 / 2 - 69 - 37 > 17 / 94 / 52, ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))), ?(68 - 56 / 33 - 7 + 61 < 46 - 96 - 51, ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))), ПобитовоеИли(?(31 - 81 > 92 + 55 - 39, ПобитовоеИНе(код, ккeнок), ?(10 / 62 + 63 > 81 - 78 * 44, ПобитовоеИНе(код, ккeнок), ?(50 / 73 < 12 - 71 - 14 * 72 - 96 * 85, ПобитовоеИНе(код, ккeнок), ?(38 * 24 * 48 / 57 < 92 - 43, ПобитовоеИНе(код, ккeнок), ПобитовоеИНе(код, ккeнок))))), ?(11 / 12 / 82 - 76 - 47 > 83 * 38, ПобитовоеИНе(ккeнок, код), ?(96 * 39 / 7 + 30 + 65 < 62 * 37 / 37 / 18, ПобитовоеИНе(ккeнок, код), ?(41 / 78 - 81 < 16 * 21 * 20 * 68 * 96, ПобитовоеИНе(ккeнок, код), ПобитовоеИНе(ккeнок, код))))))))))), ?(73 * 78 - 88 / 83 * 94 + 15 > 91 * 19 / 5 * 61, 62 * 3 + 27 > 96 * 88, 73 + 4 / 84 - 16 < 43 / 8 / 31))))));хvmоnеk = ?(42 - 49 / 98 > 68 - 61 / 37 + 29, 597, ?(55 / 34 * 43 + 85 - 88 < 67 + 99 / 38 - 26 + 54, -41, ?(70 + 72 + 72 > 99 / 13 * 69 * 48 / 12, 917, ?(35 * 54 * 59 < 82 * 66 - 93, 272, 214))));Если 70 / 31 - 63 + 85 > 100 * 73 - 55 Тогда Перейти ~dlтчeckp;~dlтчeckp:ИначеЕсли 40 / 9 + 32 - 10 / 40 / 42 < 36 / 33 Тогда ИначеЕсли 71 * 9 < 25 + 18 + 68 / 25 * 10 / 81 Тогда ИначеЕсли 62 / 97 - 44 / 71 > 16 + 35 + 2 Тогда ИначеЕсли 65 + 51 * 54 * 27 / 90 < 27 * 30 / 80 Тогда Иначе Перейти ~yщфoмrг;~yщфoмrг:КонецЕсли;Пока 70 - 80 > 71 + 79 / 31 Цикл Перейти ~qдгyье;~qдгyье:Пока 33 / 55 + 30 - 3 - 33 > 32 + 39 / 58 / 53 - 72 / 15 Цикл Перейти ~tgюndхп;~tgюndхп:пnakйzсhюцыuз = ?(10 + 44 * 36 / 34 < 92 / 86, "шiмнбj", ?(35 * 65 - 34 * 29 * 20 + 4 < 28 * 68, "иоэ", ?(75 + 20 * 82 - 39 + 34 < 22 / 80 * 71 - 81, "шйfаvц", ?(68 * 5 - 48 < 3 * 26 / 38 / 46, "ppqpаjсr", "фтttpзя"))));Перейти ~yхеецт;~yхеецт:Пока 32 / 62 - 100 / 80 > 99 / 72 + 43 * 19 Цикл Перейти ~pфзcеzф;~pфзcеzф:КонецЦикла;Перейти ~tvxyаgиu;~tvxyаgиu:КонецЦикла;Перейти ~чыibcэх;~чыibcэх:КонецЦикла;_ = _ + 1;Перейти ~rуvr;~гpfq:Возврат нпgmpcа;bpnnшuмvbнsfшяu = ?(61 * 1 / 96 / 25 / 94 > 23 + 90 - 83 - 20 / 89 * 45, "irясcпc", ?(28 + 20 * 47 * 75 / 26 > 31 - 66 * 77 + 21 - 61 * 36, "ьwщ", ?(70 + 72 * 100 - 37 - 17 - 90 < 91 / 87 + 8 / 96 / 69, "умилр", ?(4 * 85 - 49 < 70 - 63 - 1 * 9, "гщmqыvу", "яфrбюю"))));kcahhwоо = ?(41 - 4 * 59 < 39 / 46 + 22, 34, ?(5 - 66 - 77 > 45 + 28 - 84 / 5 / 30 - 28, 731, ?(91 / 28 > 19 + 99 / 96, 226, 639)));Если 40 * 53 + 80 * 76 < 32 - 50 - 7 * 20 Тогда Перейти ~wtkmsоъa;~wtkmsоъa:ИначеЕсли 28 - 44 > 30 + 86 / 3 + 14 * 8 Тогда ИначеЕсли 23 - 41 - 89 / 92 < 71 / 72 - 43 + 20 Тогда ИначеЕсли 32 + 79 / 96 * 97 * 38 / 29 < 46 - 50 / 44 Тогда Иначе Перейти ~рpkорп;~рpkорп:КонецЕсли;КонецФункции

Кода на порядок больше, однако тот код что был добавлен, он мусорный, он никогда не будет выполнен, а значит значительного эффекта на производительность не даст.

данный пример был выполнен 10 раз с замером производительности, вот результаты

до обфускации

после (максимальные настройки)

About

Этот репозиторий содержит инструмент для обфускации кода на языке 1С:Предприятие (BSL)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages