[Include] SpooflessDialogs - Anti-spoof de Diбlogos (Espйcie de Anti-Cheat)
#1

SpooflessDialogs


Aqui estб um include que inicialmente tinha feito para uso pessoal, e posso dizer tambйm que й o meu primeiro include. A funзгo dele й evitar que cheaters faзam spoof de dialogs.

O que й dialog spoofing?
Dialog spoofing й o nome dado ao ato de responder a diбlogos que o servidor nгo enviou.

Exemplo de um caso de dialog spoofing
Imagine que vocк tem um diбlogo (ID 30) com a mensagem "Pressione OK para receber $100 gratuitamente", e vocк sу mostra esse diбlogo uma vez ao player (por exemplo, durante o registo), e nunca mais o mostra. Um cheater poderia responder a esse diбlogo quantas vezes ele desejasse, vejamos aqui um "mapa" do que aconteceria:
  1. Cheater recebe diбlogo ID 30 (durante o registo)
  2. Cheater responde ao diбlogo ID 30 (durante o registo)
  3. Cheater responde ao diбlogo ID 30
  4. Cheater responde ao diбlogo ID 30
  5. Cheater responde ao diбlogo ID 30
Consequкncia? No final o cheater teria $400 gratuitamente, graзas ao "dialog spoofing".

Nгo й normal alguйm praticar dialog spoofing, pois sгo raras as vezes que alguйm consegue tomar vantagem disso, depende muito do seu script. No entanto, й bem possнvel isso acontecer.

Esta include funciona ao fazer hook da callback OnDialogResponse e da funзгo ShowPlayerDialog. Ele armazena numa variбvel o ID que vocк coloca em ShowPlayerDialog, e depois compara-o em OnDialogResponse.

Callbacks opcionais (para colocar no seu GameMode)
Код:
public OnDialogSpoof(playerid, dialogid, SpooflessDialogs_dialogid)
{
    // O que vocк quer fazer com o cheater? Banir? Kickar?
    return 0; // Para evitar que o spoofing tenha sucesso.
}
Eu primeiramente ia lanзar isto na бrea inglesa, mas decidi primeiro lanзar aqui para obter algum feedback antes de avanзar para o resto do mundo.

Vocк precisa de ter os includes y_hooks (pode extraнr tudo para a pasta dos includes) e nhooks para este include funcionar!

No seu GameMode:
Код:
#include <YSI\y_hooks>
#include <nhooks>
#include <SpooflessDialogs> // Meter esta linha antes de qualquer include que faзa uso de diбlogos
Em todos os FilterScripts que faзam uso de diбlogos:
Код:
#define FILTERSCRIPT
#include <YSI\y_hooks>
#include <nhooks>
#include <SpooflessDialogs> // Meter esta linha antes de qualquer include que faзa uso de diбlogos
Gostaram? Alguma sugestгo?
Reply
#2

Qual й o nome do hack que explora isso? Nunca li nada em fуrum russo e americano de hack pra samp que falasse algo sobre isso.
Reply
#3

Jб vi cheating com opзгo assim. Muito bom, merece +rep pela iniciativa.
Reply
#4

Quote:
Originally Posted by Breno Da Silva Pereira
Посмотреть сообщение
Qual й o nome do hack que explora isso? Nunca li nada em fуrum russo e americano de hack pra samp que falasse algo sobre isso.
Jб vi um cheat para esconder diбlogos (vocк recebe, clica numa tecla e o diбlogo й escondido) , e mais tarde clica nessa tecla e o diбlogo й mostrado novamente. Isto pode ser ъtil para o cheater nesta situaзгo:

/dardinheiro100 - O comando faz a verificaзгo se o player tem $100 na mгo, e depois mostra um dialog a perguntar se temos a certeza que queremos dar $100 a um player (no meu exemplo, vou usar o ID 2).

Vocк tem $100 na mгo, e o diбlogo pergunta "Quer dar $100 para o ID 2?". Vocк esconde esse diбlogo, e executa o comando novamente, assim fica com 2 diбlogos "Quer dar $100 para o ID 2?" abertos (um deles vocк escondeu). Vocк clica "Sim" e dб $100 para o ID 2, e a seguir vocк recupera o diбlogo que tinha escondido anteriormente e clica "Sim". Resultado, ID 2 ganha $200, e vocк fica com -$100. O problema aqui й que vocк pode fazer a verificaзгo no comando /dardinheiro100 (verificar se o player tem dinheiro para dar), mas nгo faz a verificaзгo em OnDialogResponse. Com este include vocк estб salvo contra essas tйcnicas maliciosas

Quote:
Originally Posted by NicK_
Посмотреть сообщение
Jб vi cheating com opзгo assim. Muito bom, merece +rep pela iniciativa.
Valeu
Reply
#5

Bem organizado, na verdade eu jб tinha visto este tal mйtodo hack porйm nгo imaginava que daria para fazer grandes coisas como a citada na postagem ..

rep+4
Reply
#6

Include muito ъtil, mбs acredito que muitos nгo vгo usar, pois precisa das includes y_hooks, nhooks. Como o code й pequeno e simples, vocк poderia usar o mйtodo hook padrгo.

+3 Rep
Reply
#7

Quote:
Originally Posted by ForT
Посмотреть сообщение
Include muito ъtil, mбs acredito que muitos nгo vгo usar, pois precisa das includes y_hooks, nhooks. Como o code й pequeno e simples, vocк poderia usar o mйtodo hook padrгo.

+3 Rep
Exatamente, usar um hook padrгo seria o ideal, parabйns todavia
Reply
#8

Obrigado a todos

Em relaзгo ao hook, eu inicialmente ia usar o hook padrгo, mas depois nгo me entendi com aquilo e usei y_hooks/nhooks. Acho que sei como fazer hook ao OnDialogResponse, mas nгo sei como se faz no ShowPlayerDialog. Faзo da mesma maneira exata?

E soube agora que o dialog spoofing foi corrigido numa versгo do SA-MP*, tornando este include desnecessбrio... Bem, o que conta й a intenзгo :/

* 0.3e RC6. Ainda nгo tenho a certeza se previne spoofing ou apenas manda um warning na consola.

Edit: Afinal o servidor SA-MP ainda se encontra vulnerбvel, apenas manda um warning para a consola.
Reply
#9

Quote:
Originally Posted by Nixtren
Посмотреть сообщение
Jб vi um cheat para esconder diбlogos (vocк recebe, clica numa tecla e o diбlogo й escondido) , e mais tarde clica nessa tecla e o diбlogo й mostrado novamente. Isto pode ser ъtil para o cheater nesta situaзгo:

/dardinheiro100 - O comando faz a verificaзгo se o player tem $100 na mгo, e depois mostra um dialog a perguntar se temos a certeza que queremos dar $100 a um player (no meu exemplo, vou usar o ID 2).

Vocк tem $100 na mгo, e o diбlogo pergunta "Quer dar $100 para o ID 2?". Vocк esconde esse diбlogo, e executa o comando novamente, assim fica com 2 diбlogos "Quer dar $100 para o ID 2?" abertos (um deles vocк escondeu). Vocк clica "Sim" e dб $100 para o ID 2, e a seguir vocк recupera o diбlogo que tinha escondido anteriormente e clica "Sim". Resultado, ID 2 ganha $200, e vocк fica com -$100. O problema aqui й que vocк pode fazer a verificaзгo no comando /dardinheiro100 (verificar se o player tem dinheiro para dar), mas nгo faz a verificaзгo em OnDialogResponse. Com este include vocк estб salvo contra essas tйcnicas maliciosas

Valeu
Verificaзгo no DialogResponse n resolveria ? nesse caso citado por tu ?
Reply
#10

Quote:
Originally Posted by Holl
Посмотреть сообщение
Verificaзгo no DialogResponse n resolveria ? nesse caso citado por tu ?
Resolveria, mas muitos scripters nгo fazem essa verificaзгo, pois nгo tкm em conta que o diбlogo pode ser spoofed. Este include faz a defesa sem os scripters terem de se preocupar com essas verificaзхes
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)