[M]ister Posted April 26, 2019 Share Posted April 26, 2019 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". 1 Link to comment
Other Languages Moderators Lord Henry Posted April 26, 2019 Other Languages Moderators Share Posted April 26, 2019 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. Link to comment
[M]ister Posted April 26, 2019 Share Posted April 26, 2019 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. Link to comment
Other Languages Moderators Lord Henry Posted April 26, 2019 Other Languages Moderators Share Posted April 26, 2019 1 hour ago, MaligNos said: Declarou o script “malicioso” antes do outro no meta ? Hum... Declarei depois. Na linha seguinte. Link to comment
DNL291 Posted April 26, 2019 Share Posted April 26, 2019 Como então você conseguiu interferir naquela função cancelEvent local @MaligNos ? Foi foi só carregando o script malicioso antes no meta? Link to comment
[M]ister Posted April 26, 2019 Share Posted April 26, 2019 Exato, se não a referência utilizada seria da função cancelEvent original... rodando o malicioso antes, eu garanto isso: https://i.imgur.com/x0FE5Xq.png Link to comment
DNL291 Posted April 27, 2019 Share Posted April 27, 2019 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 . 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. Link to comment
Other Languages Moderators Lord Henry Posted April 29, 2019 Other Languages Moderators Share Posted April 29, 2019 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) Link to comment
brunob22 Posted May 10, 2019 Share Posted May 10, 2019 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 Link to comment
DNL291 Posted May 12, 2019 Share Posted May 12, 2019 (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 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 May 12, 2019 by DNL291 2 Link to comment
LucasMTA Posted May 23, 2019 Author Share Posted May 23, 2019 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 ) Link to comment
DNL291 Posted May 23, 2019 Share Posted May 23, 2019 (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 May 23, 2019 by DNL291 1 Link to comment
LucasMTA Posted May 23, 2019 Author Share Posted May 23, 2019 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 Link to comment
DNL291 Posted May 23, 2019 Share Posted May 23, 2019 (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 May 23, 2019 by DNL291 1 Link to comment
LucasMTA Posted May 23, 2019 Author Share Posted May 23, 2019 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 1 Link to comment
LucasMTA Posted May 26, 2019 Author Share Posted May 26, 2019 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 Link to comment
DNL291 Posted May 26, 2019 Share Posted May 26, 2019 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. Link to comment
Other Languages Moderators Lord Henry Posted May 28, 2019 Other Languages Moderators Share Posted May 28, 2019 (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 May 28, 2019 by Lord Henry Mensagem enviada via dispositivo móvel Link to comment
DNL291 Posted May 28, 2019 Share Posted May 28, 2019 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. Link to comment
Other Languages Moderators Lord Henry Posted May 28, 2019 Other Languages Moderators Share Posted May 28, 2019 Daria pro próprio resource que obtém o IP fazer isso após completar o fetchRemote. Link to comment
SRG013 Posted May 29, 2019 Share Posted May 29, 2019 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 Link to comment
Other Languages Moderators Lord Henry Posted May 29, 2019 Other Languages Moderators Share Posted May 29, 2019 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. Link to comment
SRG013 Posted May 29, 2019 Share Posted May 29, 2019 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 Link to comment
Other Languages Moderators Lord Henry Posted May 29, 2019 Other Languages Moderators Share Posted May 29, 2019 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? Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now