LucasMTA

protecao script

Recommended Posts

6 hours ago, DNL291 said:

Não sei se entendi bem, mas no memento em que eu crio aquela função local, isso vai tornar impossível modifica-lá por outro script sobrescrevendo, ela estará no mesmo escopo, no caso, no próprio script, será como uma função cancelEvent que não tem relação com das outras.

Sim, ele vai chamar o cancelEvent local, mas do que adianta se no corpo da função ele vai mandar ao cancelEvent externo ? Testando seu exemplo, eu consegui entrar no veículo e a função maliciosa foi executada.

6 hours ago, DNL291 said:

Será que ainda dá pra acessar debug pela tabela Lua _G? Aí está algo a se testar...

Testei aqui, ela some do _G também, mas apenas para o resource que efetuou a ação.

6 hours ago, DNL291 said:

Na verdade essa função pode ser utilizada no MTA (isso até onde eu sei).

Verdade, realmente pode ser utilizada! É que o uso do setfenv coincidiu com um trecho de fileRead+loadstring que acabou gerando: "Unsafe function was called".

  • Like 1

Share this post


Link to post

Já perdi a linha de raciocínio, hauhuahaua. To entendendo mais nada.

Mas eu testei ali o esquema do "cancelEvent local" e não consegui mais burlar ele com script externo.

Em relação a obter os nomes das variáveis do script por meio do _G, eu fiz aqui e ele retornou nomes de funções de diversos scripts '-' O que não ajuda em nada pra burlar o sistema, pois não tem como saber quais são deste resource.

Share this post


Link to post

Como ficou a precedência de execução ? Declarou o script “malicioso” antes do outro no meta ?

Cada resource fica em um “ambiente”, sendo assim, se tu usar o _G, ele não vai pegar funções/variáveis criadas por outros resources.

Share this post


Link to post
1 hour ago, MaligNos said:

Declarou o script “malicioso” antes do outro no meta ?

Hum... Declarei depois. Na linha seguinte.

Share this post


Link to post

Como então você conseguiu interferir naquela função cancelEvent local @MaligNos ? Foi foi só carregando o script malicioso antes no meta?

Share this post


Link to post

Não tinha parado pra pensar nisso... então a função cancelEvent dentro do script protegido já vai ser uma função "fake" assim que carregar o código e a variável local _cancelEvent vai armazenar ela.

Não tenho ideia de como, ou se, é possível pra resetar o ambiente de execução Lua ou funções. Isso iria proteger o script de outro malicioso.

Dá pra verificar qual arquivo que chamou a função com debug.getinfo mas aí que tá o problema - essa função também poderia ser reescrita no outro script :hypnodisk:.

A única solução que me vem à cabeça seria usar as funções xml pra ler e meta.xml e permitir apenas que 1 script seja carregado.

Share this post


Link to post

Ou então pegar todo o texto do meta.xml e dentro do script verificar se ele é igual ao que foi programado, se não for, cancela a ativação. (mas ainda teria esse problema de burlar o cancelEvent)

Share this post


Link to post

crie um arquivo php que gera o ip dos computador que acessar o mesmo

e seguida verifique na resource se o ip retornado pelo php eo msm que esta nele.. e pronto 

mais simples que isso e mais seguro impossivel

Share this post


Link to post
Posted (edited)
On 10/05/2019 at 04:25, brunob22 said:

crie um arquivo php que gera o ip dos computador que acessar o mesmo

e seguida verifique na resource se o ip retornado pelo php eo msm que esta nele.. e pronto 

mais simples que isso e mais seguro impossivel

Tentei entender qual a ideia exatamente em gerar os IPs que acessarem mas não sei se entendi, a questão também pode nem ser obter os IP permitidos, aqui no próprio tópico já falamos sobre sobrescrever funções, então nada adianta uma proteção avançada mas vacilar com um simples cancelEvent. No entanto, sobre o php, também é uma forma de criar um sistema de proteção, vale também para outros métodos externos.

Sobre o "mais seguro impossível" preciso que me prove xDxDxD

Voltando ao antigo assunto do tópico, sobre sobrescrever funções por outro arquivo de script, eu fiz aqui uma proteção utilizando a função debug.getinfo, verificando a procedência da função pra determinar se é fake ou não, e, fazendo comparações verificando as linhas que a função está sendo chamada, etc. Não irei postar o código pois iria ajudar mal-intencionados.

Edited by DNL291
  • Like 2

Share this post


Link to post

Ola eu voltei a esse topico porque realmente me interresa, eu andei olhando o codigo de voces e tentei dessa forma mais nao tive sucesso na verdade eu to é perdidao mais tentei algo vendo os codigos que vcs colocaram

 

--SERVER-SIDE

local SERVER_IP = "127.0.0.1"

function getServerIp()
    return SERVER_IP
end

local _cancelEvent = cancelEvent
local function cancelEvent( ... )
	return _cancelEvent( ... )
end

addEventHandler("onResourceStart",resourceRoot,
	function() 
		if (SERVER_IP == "192.168.15.9") then --se o ip "SERVER_IP" for igual ao "192.168.15.9"
		cancelEvent( false )
		outputDebugString("RECURSO LIGADO")
		else
		cancelEvent( true )
		outputDebugString("RECURSO DESLIGADO")
		end
	end
)

 

Share this post


Link to post
Posted (edited)

Lá no começo do tópico já postaram a função getServerIp:

fetchRemote("http://checkip.dyndns.com/",
    function (response)
        if response ~= "ERROR" then
            SERVER_IP = response:match("<body>Current IP Address: (.-)</body>") or "127.0.0.1"
        end
    end
)

Tente assim:


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 "127.0.0.1"
			if ( SERVER_IP ~= "127.0.0.1" ) then -- seu IP vai aqui
				return
			end
			bool = true
		end
	end
)

Esse será o resource de proteção (código server-side). No meta.xml você exporta a função isServerAllowed:

<meta>  
    <script src="server.lua" type="server" />
  
    <export function="isServerAllowed" type="server" /> 
</meta>

Resource a ser protegido:


debug = nil
local _cancelEvent = cancelEvent
local function cancelEvent( ... )
	return _cancelEvent( ... )
end

local _exports = exports
local function exports( ... )
	return _exports( ... )
end

addEventHandler( "onResourceStart", resourceRoot,
	function()
		if exports["nome_do_resource"]:isServerAllowed() ~= true then
			cancelEvent( true )
		end
	end
)

Não é uma proteção tão avançada, mas em relação a leigos burlar o sistema deve funcionar.

Edited by DNL291
  • Like 1

Share this post


Link to post

No caso todo o conteudo então vai no server-side, e se o cara remover a função do meta.xml ele ira para de funcionar

O script so ira funcionar se tiver no ip do servidor

Share this post


Link to post
Posted (edited)

Sim, se remover o script protegido obviamente não vai mais ter a proteção, então o script principal deve ser o mesmo que da proteção do exports e cancelEvent.

Se tirar a função exportada do meta o exports irá falhar pois o resultado do exports será diferente de true ou terá erro no script

Edited by DNL291
  • Like 1

Share this post


Link to post

Entendi, pensei que eu tinha que criar outra pasta, mais como tudo vai no server-side da pra colocar no proprio script todo o codigo, obrigado DNL mais uma vez voce me salvando 

  • Like 1

Share this post


Link to post

nao consegui usar, so uma duvida esses arquivos de protecao tem que fazer em outra pasta ou posso colocar dentro do meu recurso que eu vou proteger, eu nao entendi muito bem DNL responsa mano, tava quebrando a cuca aqui pensando em algo 

Share this post


Link to post

O código do onResourceStart vai no script a ser protegido e a função do fetchRemote + isServerAllowed + meta em outro reesource separado. Obs: o resource de proteção deve ser iniciado antes dos demais resources.

Share this post


Link to post
Posted (edited)

Ele vai ter um certo probleminha com esses resources ao dar start no server, uma vez que o resource que obtém o IP do servidor precisa de alguns segundos até completar o fetchRemote, mas antes de completar, os demais resources já estarão iniciando e solicitando o IP do server para verificar, gerando erro. Para contornar vc precisará armazenar o IP do servidor em uma configuração ou variável para ser usada de cara no onResourceStart do resource bloqueado. Assim que o fetchRemote é concluído, essa variável deve ser atualizada com o IP real do servidor.

Os resources a serem protegidos precisam fazer essa segunda verificação (além da verificação inicial no onResourceStart), para saber se o IP real está permitido ou não. Se não estiver, o resource que possui o fetchRemote deve dar stopResource no resource bloqueado. (Ele precisa ter permissão Admin para fazer tanto o fetchRemote quanto o stopResource)

 

Ou então ele simplesmente não inicia esses resources bloqueados junto com o servidor e vai dando start neles 1 por 1 depois. Já que o fetchRemote já estará concluído. 

Edited by Lord Henry
Mensagem enviada via dispositivo móvel

Share this post


Link to post

Ou também poderia optar por um resource que iria iniciar todos resources do servidor, permitindo que isso acontecesse após o resource de proteção ser iniciado.

Share this post


Link to post

Daria pro próprio resource que obtém o IP fazer isso após completar o fetchRemote.

Share this post


Link to post

Eu tive uma ideia em proteção, e se caso cria-se uma tabela com perguntas, e que elas gera-se quando o recurso for ligado, se cara errar a pergunta entao o resource é desativado , caso ele acerte o resource seria ativo, tambem pensei em uma meneira de ativar o resource, por exemplo agente acostuma a usar start ou da start pelo painel, mais e se a gente colocar um comando pra ativar por um codigo por exemplo /start 22874324 [nomedoresource] - esse codigo é gerado nunca é o mesmo, se o jogador ativar com o codigo errado então... exclui os arquivos, teria como ? como conseguiria fazer isso

Share this post


Link to post
13 minutes ago, SRG013 said:

Eu tive uma ideia em proteção, e se caso cria-se uma tabela com perguntas, e que elas gera-se quando o recurso for ligado, se cara errar a pergunta entao o resource é desativado , caso ele acerte o resource seria ativo

Fácil burlar, só vazar as respostas sempre que acertar, e isso não garante exclusividade no resource.

15 minutes ago, SRG013 said:

um codigo por exemplo /start 22874324 [nomedoresource] - esse codigo é gerado nunca é o mesmo, se o jogador ativar com o codigo errado então... exclui os arquivos, teria como ?

A ideia de um comando gerado é válida. O problema é passar o código certo para a pessoa autorizada. Como saber que está sendo executado por alguém não autorizado? Ou então em um servidor não autorizado? E outra, por ser um comando gerado, como saber o valor certo que foi gerado?

A parte de errar o código e excluir os arquivos não é uma boa ideia. Resources destrutivos em geral não são uma boa ideia.

Share this post


Link to post

então mais se voce é o criador do resource e esta tentando vender pra alguem essa pessoa vai precisa ligar o resource digitando o codigo, entao vamos dizer que tem uma tabela com 5 codigos diferentes para ativação, voce manda o codigo pra pessoa e ela ativa o resource, quando a pessoa usar o codigo ele é eliminado da tabela e nao vai funcionar mais e entao restaria apenas 4 codigos, mais se ele é ativo em um servidor de tal ip ele nao precisa mais ativar por codigo ele podera ativar normal porque o ip do servidor ta salvo e cancela a funcao de executar com codigo

Share this post


Link to post
3 minutes ago, SRG013 said:

entao vamos dizer que tem uma tabela com 5 codigos diferentes para ativação

Onde estaria essa tabela? No resource que está sendo ativado?

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

  • Recently Browsing   0 members

    No registered users viewing this page.