Обсуждение. Обфускация кода?

Рылся по старым папкам и нашел некий скрипт для обфускации и появился вопрос на сколько он пригодный в наше время и есть ли что-то лучше?

concommand.Add("Obfuscator", function() 
	local frame = vgui.Create( "DFrame" ) 
	frame:SetSize( 733, 273 ) 
	frame:SetTitle("Obfuscator script") 
	frame:Center() 
	frame:MakePopup() 

	local edit = vgui.Create( "DTextEntry", frame ) 
	edit:SetPos( 3,50 ) edit:SetSize( 360,220 ) 
	edit:SetText("print('hello')") 
	edit:SetMultiline( true ) 
	edit:SetEditable( true ) 
	edit:SetAllowNonAsciiCharacters( true ) 
	edit:SetEnterAllowed( true ) 

	local edit1 = vgui.Create( "DTextEntry", frame ) 
	edit1:SetPos( 370,50 ) 
	edit1:SetSize( 360,220 ) 
	edit1:SetText("") 
	edit1:SetMultiline( true ) 
	edit1:SetEditable( true ) 
	edit1:SetAllowNonAsciiCharacters( false ) 
	edit1:SetEnterAllowed( false ) 

	local DermaButton = vgui.Create( "DButton", frame ) 
	DermaButton:SetText( "esly" )	
	DermaButton:SetPos( 3, 27 )	
	DermaButton:SetSize( 122, 22 ) 
	DermaButton.DoClick = function()	

	local Script = edit:GetValue() 
	local buff = "" for v=1,string.len(Script) do buff=buff..'\\'..string.byte(Script,v) end edit1:SetText("RunString('"..buff.."')") end 
	local DermaButton = vgui.Create( "DButton", frame ) 
	DermaButton:SetText( "classic" ) 
	DermaButton:SetPos( 130, 27 )	
	DermaButton:SetSize( 122, 22 ) 
	DermaButton.DoClick = function()	math.randomseed(1/(os.clock()*1e3))function recursiveObf(_,a)

	if a<=0 then return _ end 
	local b=math.floor(math.random()*10000000)math.randomseed(b)
	local c=string.gsub(_,".",function(_)return string.format("%02x",bit.bxor(string.byte(_),math.random(0,255)))end) return recursiveObf("math.randomseed("..b..");RunString((\""..c.."\"):gsub('%x%x',function(c)return string.char(bit.bxor(tonumber(c,16),math.random(0,255)))end))",a-1)end 
	local d=recursiveObf(edit:GetValue(),5) edit1:SetText(d) end 
	
	local DermaButton = vgui.Create( "DButton", frame )  
	DermaButton:SetText( "pro" ) 
	DermaButton:SetPos( 257, 27 )	
	DermaButton:SetSize( 122, 22 ) 
	DermaButton.DoClick = function()	
	
	local function _(_)return _:gsub(".",function(_)return"\\"..string.byte(_)end)end 
	local function a(a)local b=""for a=a,math.random(a*1,a*3)do b=b.." "..("_"):rep(a).."=_[\"".._(table.Random{"RunStringEx","DOF_Kill","ColorToHSV","DOFModeLHack","AddOriginTpPVS","AccessorFuncNW","ErrorNoHalt","GetTaskID","LerpVector","NewMesh","PlayerDataUpdate","STNDRD"}).."\"]"end return b end 
	local function c(c)return"_=_G"..a(5).."__=_[\"".._"string".."\"][\"".._"reverse".."\"]"..a(8).."_[\"".._"RunString".."\"](__\"".._(c:reverse()).."\")"..a(5)end 
	local _= edit:GetValue() edit1:SetText("local function _(_) end "..c(_)) end 
	
	local DermaButton = vgui.Create( "DButton", frame )  
	DermaButton:SetText( "Creator" ) 
	DermaButton:SetPos( 608, 27 ) 
	DermaButton:SetSize( 122, 22 ) 
	DermaButton.DoClick = function() gui.OpenURL("") end end)

Обфускация кода это “защита от дурака”. Увеличивает его размер, усложняет работу с ним, но не защищает в полной мере. Обфусцируя код, нужно иметь его оригиналы, чтобы в будущем не испытывать проблем с самостоятельным редактированием, что на обычном хостинге (не VDS) затруднительно

Следующая проблема заключается в том, что если в таком коде вылезет ошибка, то понять где именно она случилась будет намного труднее, поскольку он, вероятнее всего, весь будет в одной строке и точное место можно будет определить реально трудно

В IGS когда-то некоторые файлы тоже были зашифрованы через xFuscator, но это не дало ровно ничего, кроме лишних вопросов и сложностей

Если у тебя VDS, то могу порекомендовать вместо обфускации через VGUI, которую ты скинул выше перед отправкой файлов с DEV на PRODUCTION сервер просто делать минификацию кода через, например glua-minify и совмещением всех аддонов в одну папку. Это усложнит жизнь тем, кто сливает клиентсайд (все переменные переименуются, комментарии в коде уберутся) и значительно (у меня в 2 раза, до 15 сек) ускорит загрузку сервера

Если пост наберет 2 лайка, то опубликую статью-руководство о том, как это сделать

8 симпатий

Ждем
image

1 симпатия