Sign in to follow this  
juaosilv

Protegendo script

Recommended Posts

Olá, queria saber qual é a melhor forma de proteger meus scripts. Percebi que alguns estão sendo baixados na pasta principal de resources do MTA aquela que baixa todos os mods dos servidroes que você entra.

Minhas duvidas são:

Se eu por em .luac os arquivos ainda vão ser baixados? (Se sim, imagino que as pessoas possam usar, claro q compilado mas ainda sim ainda poderam usar?)

Qual a melhor forma de eu proteger os scripts pra caso mesmo em luac seja possivel usar, no caso o que eu faria pra mesmo assim não ser possivel.

 

Share this post


Link to post
Posted (edited)

Apenas arquivos client-side's são baixados e executados no PC do cara, ou seja, se o script tiver 2 lados, server e client o script não vai funcionar, agora se for apenas client se o cara for esperto ele apenas adicionar no meta, sim é capaz de funcionar tranquilamente.

--

Para resolver isso, é bem simples, você pode simplesmente declarar cache=false no meta e claro compilar o arquivo quanto + segurança melhor, exemplo:

<meta>
	<info author="Jonas^" version="1.0" name="Staff Mode" type="script"/>
	<script src="server.luac" type="server"/>
	<script src="client.luac" type="client" cache="false"/>
</meta>

Pode ver que na linha do client tem o atributo cashe=false ou seja, ele não vai ser colocado na pasta no pc do cara, basicamente isso explicando a grosso modo.

E tem a forma complexa, que é por proteção por IP, ou seja, os arquivos só vão startar naquele devido IP.

Edited by Jonas^

Share this post


Link to post
1 hour ago, Jonas^ said:

Apenas arquivos client-side's são baixados e executados no PC do cara, ou seja, se o script tiver 2 lados, server e client o script não vai funcionar, agora se for apenas client se o cara for esperto ele apenas adicionar no meta, sim é capaz de funcionar tranquilamente.

--

Para resolver isso, é bem simples, você pode simplesmente declarar cache=false no meta e claro compilar o arquivo quanto + segurança melhor, exemplo:


<meta>
	<info author="Jonas^" version="1.0" name="Staff Mode" type="script"/>
	<script src="server.luac" type="server"/>
	<script src="client.luac" type="client" cache="false"/>
</meta>

Pode ver que na linha do client tem o atributo cashe=false ou seja, ele não vai ser colocado na pasta no pc do cara, basicamente isso explicando a grosso modo.

E tem a forma complexa, que é por proteção por IP, ou seja, os arquivos só vão startar naquele devido IP.

Interessante, mais uma duvida. Caso eu bote esse cache ele vai baixar o arquivo novamente sempre que entrar no servidor? É tipo aquela proteção que alguns usam que quando o script é baixado ele é excluido da pasta. Pq eu quero evitar que a pessoa sempre que entre tenha que baixar novamente algum script.

Share this post


Link to post

Não, ele vai baixar apenas uma vez.

Share this post


Link to post

Na realidade tem que baixar de novo sim, pois é salvado na RAM... só não sei se é apagado quando desconecta do servidor ou na falta de energia.

Share this post


Link to post

Eu compilo e faço proteção por IP. Se ocorrer vazamentos da host (ou se um cliente que comprou meu script tentar vazar ele na internet), ainda sim o resource estará protegido.

Share this post


Link to post

Estranho, eu testei aqui, desloguei do server e loguei novamente e não necessitou baixar, talvez seja porque não desliguei o computador.

Share this post


Link to post
Posted (edited)
1 minute ago, Jonas^ said:

Estranho, eu testei aqui, desloguei do server e loguei novamente e não necessitou baixar, talvez seja porque não desliguei o computador.

Teste com arquivos client-side maiores. Algumas imagens de alta resolução, áudios, texturas. As vezes o download até ocorreu, mas foi rápido demais e nem deu pra perceber.

E sim, desligue a máquina antes de testar de novo.

Edited by Lord Henry

Share this post


Link to post
14 hours ago, Lord Henry said:

Teste com arquivos client-side maiores. Algumas imagens de alta resolução, áudios, texturas. As vezes o download até ocorreu, mas foi rápido demais e nem deu pra perceber.

E sim, desligue a máquina antes de testar de novo.

Existe algum tópico explicando um pouco mais sobre essa proteção por IP? Já que usando cache tem que baixar novamente sempre que entra no servidor vou utilizar proteção por ip.

Share this post


Link to post

Aqui @juaosilv

Com relação ao cache=false, contanto que você não utilize isso em muitos scripts não tem problema, são poucos KBs e muitas vezes é imperceptível o download, mas sugiro você fazer isso só para os scripts que você acha de muita importância.

Share this post


Link to post
On 19/06/2019 at 15:05, DNL291 said:

Aqui @juaosilv

Com relação ao cache=false, contanto que você não utilize isso em muitos scripts não tem problema, são poucos KBs e muitas vezes é imperceptível o download, mas sugiro você fazer isso só para os scripts que você acha de muita importância.

Desculpa por reviver o tópico, mas eu fiz tudo como está nesse outro tópico mas ele da esse erro quando inicia:



[13:55:58] ERROR: [EXTRA]/info/server.Lua:19: attempt to index upvalue 'expor
ts' (a function value)
 

Linha 19:

addEventHandler( "onResourceStart", resourceRoot,
	function()
		if exports["seguranca"]:isServerAllowed() ~= true then - ESSA E A 19
			cancelEvent( true )
		end
	end
)

O script seguranca:

local bool = false
local function isServerAllowed()
    return bool
end

fetchRemote( "http://checkip.dyndns.com/",
	function( response )
		if ( response ~= "ERROR" ) then
			SERVER_IP = response:match( "<body>Current IP Address: (.-)</body>" ) or "MEUIP"
			if ( SERVER_IP ~= "MEUIP" ) then -- seu IP vai aqui
				return
			end
			bool = true
		end
	end
)
<meta>
    <script src="server.Lua" type="server" cache="false" />
    <export function="isServerAllowed" type="server" /> 
</meta>

 

Ele falou algo sobre o feath demorar p pegar o ip, acho que o erro pode ser isso mas não consegui resolver.

Share this post


Link to post
Posted (edited)

Seu script de segurança está todo errado.

Edited by Lord Henry

Share this post


Link to post
Posted (edited)

Resource de Segurança:

Spoiler

server.luac (deve estar compilado em luac)


SERVER_IP = "false"

function startIPChecking ()
	if (hasObjectPermissionTo (getThisResource(), "function.fetchRemote", false)) then -- Se o resource de segurança tem permissão de fetchRemote, então:
		fetchRemote ("http://checkip.dyndns.com/", myCallback, "", false) -- Obtém o IP do servidor através deste link.
	else
		outputDebugString ("The resource '"..getResourceName (getThisResource()).."' needs the following permission: function.fetchRemote", 1)
		SERVER_IP = "false"  -- O resource de segurança precisa da seguinte permissão: function.fetchRemote para poder obter o IP do servidor.
	end
end
addEventHandler ("onResourceStart", resourceRoot, startIPChecking)

function myCallback (responseData, errors)
	if (errors == 0) then -- Se não houve erros durante o callBack, então:
		SERVER_IP = responseData:match("<body>Current IP Address: (.-)</body>") -- SERVER_IP recebe uma string com o IP do servidor.
	else
		SERVER_IP = "error"
	end
end

function getServerIP() -- Função exportada
	return SERVER_IP
end

<meta>
	<script src="server.luac" type="server" /> <!-- O resource precisa estar obrigatóriamente compilado -->
	<export function="getServerIP" type="server" /> <!-- Função exportada, que apenas vai mandar o valor da variável Server_IP pros outros resources lerem. -->
	<min_mta_version server="1.5.2-9.07903" client="1.5.2-9.07903" /> <!-- luac exige esta verificação de versão -->
	<download_priority_group>2</download_priority_group> <!-- Faz este resource ser baixado e executado antes dos outros -->
</meta>

Resource protegido:

Spoiler

server.luac (ele deverá estar compilado também)


function authorizeResource ()
	authorizedIP = "000.000.000.000" -- Coloque o IP do server autorizado aqui.
	local ip = exports["serverIP"]:getServerIP () -- ip recebe o valor que está na variável Server_IP do resource de segurança.
	if (ip ~= authorizedIP) then -- Se o IP que recebeu do resource de segurança for diferente do IP configurado neste resource, então:
		cancelEvent(true, "This resource was not purchased by this IP.") -- Cancela a ativação deste resource. (não precisa de permissão Admin)
		print ("Incorrect Server IP from: "..getResourceName(getThisResource()).." (REASON: "..getCancelReason ()..")") -- Eu particularmente prefiro dar outputs técnicos em inglês pois o Server Console não aceita acentos.
	end
end
addEventHandler ("onResourceStart", resourceRoot, authorizeResource)

<meta>
	<script src="server.luac" type="server" /> <!-- Tudo compilado -->
	<script src="client.luac" type="client" />
	<include resource="serverIP" /> <!-- Isso faz com que este resource inicie o resource serverIP (resource de segurança) junto com ele, caso esteja desativado. -->
	<min_mta_version server="1.5.2-9.07903" client="1.5.2-9.07903"></min_mta_version> <!-- Isso faz com que o luac funcione -->
</meta>

 

Obviamente o meu sistema de segurança é mais avançado do que este. Mas já resolve seus problemas.
Edited by Lord Henry
  • Like 1
  • Thanks 1

Share this post


Link to post
24 minutes ago, Lord Henry said:

Resource de Segurança:

  Hide contents

server.luac (deve estar compilado em luac)



 
SERVER_IP = "false"

function startIPChecking ()
	if (hasObjectPermissionTo (getThisResource(), "function.fetchRemote", false)) then -- Se o resource de segurança tem permissão de fetchRemote, então:
		fetchRemote ("http://checkip.dyndns.com/", myCallback, "", false) -- Obtém o IP do servidor através deste link.
	else
		outputDebugString ("The resource '"..getResourceName (getThisResource()).."' needs the following permission: function.fetchRemote", 1)
		SERVER_IP = "false"  -- O resource de segurança precisa da seguinte permissão: function.fetchRemote para poder obter o IP do servidor.
	end
end
addEventHandler ("onResourceStart", resourceRoot, startIPChecking)

function myCallback (responseData, errors)
	if (errors == 0) then -- Se não houve erros durante o callBack, então:
		SERVER_IP = responseData:match("<body>Current IP Address: (.-)</body>") -- SERVER_IP recebe uma string com o IP do servidor.
	else
		SERVER_IP = "error"
	end
end

function getServerIP() -- Função exportada
	return SERVER_IP
end


 
<meta>
	<script src="server.luac" type="server" /> <!-- O resource precisa estar obrigatóriamente compilado -->
	<export function="getServerIP" type="server" /> <!-- Função exportada, que apenas vai mandar o valor da variável Server_IP pros outros resources lerem. -->
	<min_mta_version server="1.5.2-9.07903" client="1.5.2-9.07903" /> <!-- luac exige esta verificação de versão -->
	<download_priority_group>2</download_priority_group> <!-- Faz este resource ser baixado e executado antes dos outros -->
</meta>

Resource protegido:

  Hide contents

server.luac (ele deverá estar compilado também)



 
function authorizeResource ()
	authorizedIP = "000.000.000.000" -- Coloque o IP do server autorizado aqui.
	local ip = exports["serverIP"]:getServerIP () -- ip recebe o valor que está na variável Server_IP do resource de segurança.
	if (ip ~= authorizedIP) then -- Se o IP que recebeu do resource de segurança for diferente do IP configurado neste resource, então:
		cancelEvent(true, "This resource was not purchased by this IP.") -- Cancela a ativação deste resource. (não precisa de permissão Admin)
		print ("Incorrect Server IP from: "..getResourceName(getThisResource()).." (REASON: "..getCancelReason ()..")") -- Eu particularmente prefiro dar outputs técnicos em inglês pois o Server Console não aceita acentos.
	end
end
addEventHandler ("onResourceStart", resourceRoot, authorizeResource)


 
<meta>
	<script src="server.luac" type="server" /> <!-- Tudo compilado -->
	<script src="client.luac" type="client" />
	<include resource="serverIP" /> <!-- Isso faz com que este resource inicie o resource serverIP (resource de segurança) junto com ele, caso esteja desativado. -->
	<min_mta_version server="1.5.2-9.07903" client="1.5.2-9.07903"></min_mta_version> <!-- Isso faz com que o luac funcione -->
</meta>

 

Obviamente o meu sistema de segurança é mais avançado do que este. Mas já resolve seus problemas.

Opa, agora está dando isso:

start was requested (Failed to link to serverIP)
 

Share this post


Link to post

Vc deve mudar no export pro nome do seu resource. ServerIP é o nome do meu resource de segurança.

Eu já esperava que vc fosse dar Ctrl+C e Ctrl+V sem nem ler direito.

  • Thanks 1
  • Haha 1

Share this post


Link to post
Just now, Lord Henry said:

Vc deve mudar no export pro nome do seu resource. ServerIP é o nome do meu resource de segurança.

Eu já esperava que vc fosse dar Ctrl+C e Ctrl+V sem nem ler direito.

kkkkkkkkkkk valeu, funcionou.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.