PADRÕES DE AUTO HOT-KEY(AHK) EM JOGOS ONLINE Leonard Colusso Oliveira (IC) e Luciano Silva (Orientador) Apoio: PIBITI Mackenzie Resumo Entre as diversas formas de realizarem um processo ilícito em jogos on-line, a que foi estudada é Auto-Hot-Key(AHK), trata-se de um script (e um software) utilizado para automatização de sistemas operacionais na Microsoft. Este projeto se propôs a construir um catálogo de padrões de identificação de ações em jogos online que, potencialmente, possam ser implementados. O que após uma serie de testes em um servidor privado, descobrimos como o AHK trabalha sobre o servidor, no qual era algo completamente diferente do que esperávamos, e tivemos que revisar todo o trabalho para com isto obtiver uma progressão. Por fim, a idéia de compreender metodologias de segurança e desenvolvimento de jogos on-line, para estudarmos o melhor caminho de impedir futuras ações ilícitas de adquirir poder, nos levou a um resultado inesperado, podemos identificar a forma que ele é executado e não como é controlado, o que surgiu a nós disponibilizar uma lógica inédita em relação a este problema de detectar usuários de AHK. Palavras-chave: segurança, jogos, Auto Hot-Key Abstract Among the various forms of performing an illegal process in online gaming there is the Auto Hot-Key (AHK). It is a script (and software) used for automation in Microsoft operating systems. This project is proposed to build a catalog of patterns for identification of actions in online games that potentially could be implemented. What after a series of tests on a private server, we discovered how AHK works on the server, which was something completely different than we expected and we had to revise all the work that we get to a progression. Finally the idea of methodologies to understand security and development of online gaming, to study the best way to prevent future illegal actions to gain power, led to an unexpected result, we can identify the way it runs and is not as controlled, which came us provide arationale for this unprecedented problem of detecting AHK users. Keywords: security, games, Auto Hot Key 1
I Mostra de Iniciação em Tecnologia e Inovação - 2011 1. Introdução Existemmuitas formas de realizarem um processo ilícito em jogos on-line (Alexander, 2005; Hoglung, 2007). Uma das formas é a utilização de Auto Hot-Key(AHK) (Autohotkey, 2009): trata-se de um script (e um software) utilizado para automatização de sistemas operacionais, mas que se tornou comum devido ao fácil acesso do script e das formas de utilização. Quando foi divulgada a sua descoberta, a sua presença em jogos tornou-se um assunto polêmico para tomada de decisões na administração de segurança de servidores de jogos on-line.embora os mecanismos de AHK em jogos sejam bem conhecidos, padrões de segurança para sua detecção ainda são muito primitivos. A segurança em jogos online é uma área de pouco avanço tecnológico e interesse de desenvolvimento, é preciso combater os métodos variados e muito avançados dos crackers (Alexander, 2009). AHK foi uma das formas encontradas para automatizar um jogador, e que virou um software muito utilizado para bastantes jogadores, mas um problema para o desenvolvimento da economia em games (Hoglung, 2007). Empresas como nprotect (www.nprotect.com) e Game Fort (www.gamefort.com.br) são especializadas em desenvolver sistemas de segurança para jogos on-line, mas ainda não é suficiente para a demanda. Neste contexto, é de grande interesse computacional e comercial o estabelecimento de padrões que permitam identificar ações em jogos on-line que se configurem como ataques AHK dentro do jogo. Este projeto se propôs a construir um catálogo de padrões de identificação de ações em jogos on-line que, potencialmente, possam se configurar como uso não-autorizado de AHK dentro do ambiente do jogo. A partir da simulação de uso de AHK dentro de jogos online bem conhecidos, buscar-se-ão índices que permitam caracterizar ações oriundas de AHK. A partir destes índices, será construído um catálogo dos padrões de ações que possam evidenciar a presença de AHK em um jogo. Ainda não existe, na literatura técnica de segurança ou jogos digitais, um catálogo de caracterização de ações AHK. Assim, este trabalho torna-se pioneiro na área de jogos digitais on-line e permitirá estabelecer as bases padrão estudo de mecanismos de contraataque ao AHK. Este artigo está organizado da seguinte forma: A Seção 2 apresenta o referencial teórico; A Seção 3 trata da metodologia do projeto; A Seção 4apresenta resultados e discussões; 2
Finalmente, a Seção 5 traz a conclusão. 2. Referencial Teórico Existem dois referenciais teóricos importantes para este projeto: o mecanismo de AHK genérico e a sua ação dentrode um jogo genérico. 2.1 Auto Hot-Key Genérico AHK(Autohotkey, 2009)é um software open source, mais conhecido como macro. Realiza a função de automatização de software utilitário, que permite aos usuários automatizar tarefas repetitivas. Qualquer aplicativo do usuário pode ser modificado pelo AHK. O software possui características e ações de um costume scripting (linhas de comandos), que se destina especificamente a proporcionar atalhos de teclado ou teclas de atalho. Uma característica da programação de um AHK é a linguagem C (Damas,2007)e, na maioria das vezes, os programas são compilados com Visual Studio Express, sendo possível assim, quando compilados, executarem em qualquer máquina sem necessidade de instalação. No contexto legal, o AHK genérico é bastante utilizado para: Atalhos para preencher nomes freqüentemente usados ou outras frases Controlar o cursor do mouse com um teclado ou joystick Abrir programas, documentos e sites com teclas simples Abrir automaticamente sem necessidade de alguma tecla após a execução Como um sistema de acompanhamento e fechar automaticamente programas indesejados Agendamento automático de lembrete, dentre outras funções como Backup. Para exemplificar alguns destes usos, a seguir são apresentados dois exemplos: Buscas automáticas: O script a seguir permitirá que um usuário para pesquisar uma determinada palavra ou frase usando o Google. 3
I Mostra de Iniciação em Tecnologia e Inovação - 2011 Script: g #:; Win + g Run http://www.google.com/search?q=%clipboard% Return Depois de copiar o texto a partir de qualquer aplicativo para a área de transferência, pressionando a tecla de atalho configuráveis Win + g abrirá o navegador da Web e realizará a pesquisa. Auto-char: Quando uma URL é copiada para a Área de Transferência, o atalho Alt + x vai verificar a URL de qualquer / todos os parênteses e substituí-las com caracteres alternados antes de colar a URL da área de transferência: Script:! X:; + Alt x URLReplace() Send ^v ;Ctrl+v Return URLReplace() StringReplace, Clipboard, Clipboard, (, `%28, All StringReplace, Clipboard, Clipboard, ), `%29, All) Porém, é importante destacar que AHK também é usado para atos ilícitos como, por exemplo: Automatizar um sistema de controle de dados, que informaria todos os dados para o endereço configurado fora ou não da rede, Desconfigurar todo o OBDC do sistema, atalhos e teclados, ou seja, aparenta ações respectivas de vírus, porem dificilmente perceptível por um antivírus, mas facilmente detectável e eliminado por um usuário de conhecimento básico em Software. 4
Resumidamente, o AHK é um software de grande capacidade para automatizar sistemas, e funções rapidamente, tanto para fins honestos quanto desonestos, depende então do objetivo e conhecimento do programador. 2.2 Auto-Hot-Key em Jogos Online O AHK é normalmente utilizado para poupar esforço e para executar certas ações que não seriam possíveis pelos eventuais compromissos do usuário Além de que, ele tem liberdade de usar mais de um AHK, possibilitando assim varias ações que seria impossível de um humano fazer ao mesmo tempo com tanta velocidade em relação ao tempo (Alexander, 2005). Estas são as características principais do AHK para chamar atenção de jogadores extremamente competitivos e comércios ilegais (Hoglung, 2007). Alguns jogos de MMORPG como Risin Force e Cabal online já disponibilizam a instalação do Client-Path certo tipos de macros, que não afetaria no desenvolvimento do game, como por exemplo, o macro de chat.outros como jogos de FPS proíbem a utilização de macros, como The Duel e CombatArms. Tanto MMORPG quanto FPS, o AHK pode ser executado, e não existe um sistema de segurança atual que identifique e/ou impeça tal processo (Hoglung, 2007).Não existe uma fonte oficial para informações deste método, as informações foram obtidas pelas análises de ataques detectados em servidores privados.para todos os meios, o AHK possui a finalidade de desenvolver uma automatização das ações do jogador em relação ao servidor, por exemplo: Auto-creator:utilizado para criar pot s e outros itens consumíveis. Este macro é capaz de utilizar os atalhos de habilidades do jogo, no caso o Enter como descrito no script, além da capacidade de utilizar um ciclo infinito de ações até que o usuário aperte a tecla que pare o processo. 5
I Mostra de Iniciação em Tecnologia e Inovação - 2011 Script: (F5):: Loop,100000000000 SendF1 sleep,80 SendEnter sleep,55 sendenter sleep,55 F6::Pause return Auto-poter: possibilidade de se utilizar o mesmo atalho (F7) sem delay, apertando CRTL esquerdo.este macro pode ser usado para qualquer jogo, com pequenos ajustes ele pode com uma tecla, executar mais de uma ação, rapidamente, sendo necessário somente o usuário apertar o botão programado, quantas e quais vezes forem desejadas a realizar.este script desenvolve uma desvantagem ao adversário, afinal velocidade e precisão in-game é o objetivo de grande massa dos jogos MMORPG: Script: (LCTRL) loop GetKeyState,state,(CTRL) if state = D Send, F7 Sniper-Booter: realização de um ciclo de farmin, ou seja, o personagem realiza um processo que se resume em: Matar monstros por determinado tempo, voltar para um 6
local de segurança, armazenar os itens adquiridos, e começar tudo de novo. Estes scripts são de alto nível para pessoas que não conhecem a biblioteca dos comandos de AHK, logo muita atenção nas instruções.para funcionar é preciso alterar o arquivo Data.grf no qual tem quase todas as configurações principais do jogo, A única que será modificada é os sprites (Imagem/Cor/movimentos) dos monstros, é preciso transformá-los em perfeitos quadrados azuis, facilitando o comando de detecção da sentença HexColor. Para mudar os sprites é preciso um arquivo chamado GrfTools, de fácil utilização: Script: F5:: SetKeyDelay, 100 SetMouseDelay, 10 SetWinDelay, 500 WinGet, active_id, ID, A WinGetTitle, ro_title CoordMode, Pixel, Relative CoordMode, Mouse, Relative ; Tamanho da resolução da sua tela Res_X:=1024 Res_Y:=768 heal_x:= res_x/2 heal_y:= res_y/2 ; É Necessário tele portar pelo mapa? ; 1 = Sim, 0 = Não warp:=1 ; FalconEyes é necessário? ; 1 = Sim, 0 = Não eyes:=1 ; ================== Cores =================== ; -----------------------Monstros----------------------- ; Azul do quadrado azul HexColor:= 0xFF0000 adicional:= 5 ; =========================================== ; Fator Lag, se o server estiver lagado, tire o comment da linha abaixo ; LagFactor:= 800 7
I Mostra de Iniciação em Tecnologia e Inovação - 2011 ; Numero de DSsFullbuffado pra matar N_DS:= 1 ds_count_1:=11 ds_count_2:=31 ds_count_3:=51 ds_count_4:=0 Loop ;Sniper se buffa if( ds_count_1 > 5 && eyes == 1 ) ds_count_1:=0 send F4 sleep 500 if( ds_count_2 > 30 ) ds_count_2:=0 send F3 sleep 500 ; Recuperar SP if( ds_count_3 > 40 ) ds_count_3:= 0 send!3 sleep 2000 sleep LagFactor MouseClick, left, 323, 257 sleep 100 MouseClick, left, 323, 257 sleep 100 ds_count_4++ if( ds_count_4 > 13 ) ; Awakening Potion ds_count_4:=0 send F1 8
; Usar mais Flechas -Via Quiver send F8 sleep 800 send F9 ; Equipa a flecha denovo sleep 2000 Send!2 if( warp == 1 ) Send!2 sleep 1500 sleep %LagFactor% counter:= 0 Loop PixelSearch, click_x, click_y, 9, 95, 633, 421, %HexColor%, %adicional%, Fast if ( ErrorLevel counter > 5 ) break else Loop, %N_DS% Send F2 sleep 100 Click, %click_x%, %click_y% Click sleep 500 ds_count_1++ ds_count_2++ ds_count_3++ sleep 1000 counter++ 9
I Mostra de Iniciação em Tecnologia e Inovação - 2011 F6:: Pause F7:: Reload ^F8:: ExitApp 3. Metodologia do Projeto O projeto teve como proposta desenvolver um sistema de detecção de AHK e outros futuros processos similares a macros, tendo como processo a observação pelos pacotes de dados recebidos e enviadosao servidor. Mas antes de desenvolvermos, segundo Greg Hoglund em seu livro Explointing Online Games: Cheating Massively Distributed Systems, precisamos levantar informações de comportamento, como por exemplo: Todo jogador que utiliza Auto hot-key, tem por finalidade produzir poder (dinheiro) no jogo, e a forma de adquirir dinheiro é matando os monstros, logo o players utiliza isto para melhorar sua produção de poder(greg Hoglund, 2007) Este projeto estabeleceu uma base para o desenvolvimento dos métodos de proteção de jogos online, sendo possível assim uma competitividade mais justa para todos os clientes. Durante o inicioda pesquisa Alguns desafios computacionais foram detectados: Como adicionar o sistema Anti-AHK de forma que não haja Lag no servidor ou alguma outra danificação na qualidade do serviço para os jogadores? Segundo os estudos desenvolvidos no Eathena(Eathena, 2008), na grande maioria, as tecnologias desenvolvidas no jogo são divididas em 3 extremos: via desenvolvimento de aplicativo no Client-Path(alexander, 2005), pode-se também ser adicionado um plugin que execute de forma paralela ao servidor, ou, desenvolver no próprio código fonte do servidor, um método de identificação via linguagem C(Damas, 1999) Qual é a forma mais simples de implementação e manutenção? A forma mais simples de implementação e manutenção é via Script(Eathena, 2008), ou seja um arquivo de texto, com uma linguagem de programação especifica do jogo, que serve como um plugin.(alexander, 2005) Como detectar um usuário de AHK, independente da configuração de delay configurado? Isto é um grande problema, pois qualquer jogador interessado em usar umscript de AHK tem ciência de que é facilmente editado, tendo a matriz como base para funcionar com as características de um usuário comum, aplicando uma velocidade menor de repetição. Mas 10
isto pode ser resolvido aplicando um método que identifica o padrão que ocorre a ação ilícita(greg Hoglund, 2007), e executa uma verificação periódica. Após uma série de testes para implementação do servidor, e de tentativas de desenvolvimento docódigo identificador, percebemos que o método mais cabível para esta pesquisa é desenvolvendo o plugin e ligando com o servidor(eathena, 2008), assim facilitaria o processo de manutenção, implementação, compatibilidade, portabilidade(alexander, 2005). O script desenvolvido, determina que após certa quantidade de monstros mortos, ele é ativado, e solicita o jogador a responder o que esta escrita na mensagem enviada. Script: - script BotCheck -1, OnPCLoginEvent: if(getgmlevel() > 99) end; set fakenamechoice,rand(1,10); atcommand "@option 2 0 0"; atcommand "@mute 1440 "+strcharinfo(0); atcommand "@monsterignore"; mes "Sorry to disturb you, but I need to check if you're a bot."; mes "Please don't get alarmed, I had changed your name temporarily"; mes "Just look at your name by pointing at your character"; mes "Then type EXACTLY what it says(case sensitive), or else you will be kicked."; switch(fakenamechoice) case 1: atcommand "@fakename BotCheck1"; if(botname$!= "BotCheck1") atcommand "@kick "+strcharinfo(0); case 2: atcommand "@fakename Bot2Check"; if(botname$!= "Bot2Check") atcommand "@kick "+strcharinfo(0); case 3: atcommand "@fakenameiamnotabot"; if(botname$!= "iamnotabot") atcommand "@kick "+strcharinfo(0); 11
I Mostra de Iniciação em Tecnologia e Inovação - 2011 case 4: atcommand "@fakenamepiderman"; if(botname$!= "piderman") atcommand "@kick "+strcharinfo(0); case 5: atcommand "@fakenamebaman"; if(botname$!= "baman") atcommand "@kick "+strcharinfo(0); case 6: atcommand "@fakenamebotsux"; if(botname$!= "botsux") atcommand "@kick "+strcharinfo(0); case 7: atcommand "@fakenamewhoaimaplayer"; if(botname$!= "whoaimaplayer") atcommand "@kick "+strcharinfo(0); case 8: atcommand "@fakenamethankyouarigato"; if(botname$!= "thankyouarigato") atcommand "@kick "+strcharinfo(0); case 9: atcommand "@fakenameihatebots"; if(botname$!= "ihatebots") atcommand "@kick "+strcharinfo(0); default: atcommand "@fakenamebotlastcheck"; if(botname$!= "BotLastCheck") atcommand "@kick "+strcharinfo(0); mes "Thank you for your patience, you can now move on."; 12
atcommand "@unmute "+strcharinfo(0); atcommand "@monsterignore"; atcommand "@fakename"; atcommand "@option 0 0 0"; close; end; 4 Resultados e Discussão O trabalho foi dividido por etapas, descritas a seguir: Estudo das técnicas de AHK: logono inicio do projeto, era necessário conhecer profundamente a capacidade que o AHK temde produzir ações no Sistema Operacional Windows, foi descoberto que este software é capaz de produzir em alta velocidade, um loop de comandos básicos como clicks e digitações, no qual pode ser usado para realizar operações complexas, e simultaneamente de acordo com cada janela. A partir desta idéia, pode-se começar os estudos do uso deste software em jogos. Estudo das técnicas de AHK para jogos: quandocomeçamos este período do projeto, criamos os scripts com as funções usadas para serem aplicados os ataques no jogo. Porem para realizarmos estes testes, precisou criar nosso servidor de testes, no qual utilizamos o servidor do Eathena com conexão local para teste em rede fechada, o procedimento foi realizado com sucesso, os scripts funcionaram perfeitamente, e descobrimos que o servidor não produzia nem um log que facilitaria a identificação, ou seja, o AHK trabalha, de acordo com o servidor, livremente como se fosse um jogador padrão, no qual nos levaria ao próximo passo, desenvolver uma forma de identificação. Identificação de ataques padrões de AHK para jogos: objetivo principal do projeto é identificar um AHK, por meio de conclusões científicas, e aplicando assim ações especificas para cada eventualidade do usuário. A identificação destes ataques foi desenvolvida inicialmente com a idéia de identificar o tempo de transmissão de dados no servidor via desenvolvimento direto ao código fonte, o que posteriormente descobrimos que o AHK possui variáveis randômicas que dificultaria esta identificação. Logo com isto descartamos a idéia de desenvolver um software probabilístico pela teoria das Cadeias de Markov. Foi um processo estritamente analítico e cauteloso, no qual re-estudamos todos os processos passados, com a finalidade de encontrar uma nova estratégia, e aplicarmosem umaseries de testes e níveis de ataques de AHK. Finalmente encontramos uma solução, no qual adotamos que, o importante é identificar em quais momentos o 13
I Mostra de Iniciação em Tecnologia e Inovação - 2011 AHK é usado, e não quando ele é executado, ou seja, surgiu a necessidade de aplicarmos um sistema de prevenção e não de detecção. Formalização do padrão AHK: devido aos estudos realizados, podemos aplicar uma formalização da função de AHK em jogos on-line, ele é usado internamente ou externamente, isto é: Desenvolvido para executar ações do jogo sem que estejamaparente o uso (macros in-game) para o cliente, ou quando o AHK(aplicativo) é aberto durante a execução do game. A diferença é que o uso externo desta técnica prejudica a qualidade e a economia do jogo, devido suas funções em loop. 5. Conclusões Foi estudado que o AHK é extremamente útil para automatização de operações em plataforma Windows, sendo importante para execuções pré planejadas constantes, sem necessidade de esforço e tempo, uma de suas funções, a que estudaremos profundamente é a em jogos on-line. Pode-se concluir que a idéia de compreender metodologias de segurança e desenvolvimento de jogos on-line, para estudarmos o melhor caminho de impedir futuras ações ilícitas de adquirir poder, obteve sucesso. Devido aos testes realizados no servidor, podemos identificar a forma que ele é executado e não como é controlada, esta tecnologia é poderosa, capaz de realizar operações semi-perfeitas de um jogador comum, o que surgiu a nós disponibilizar uma lógica inédita em relação a este problema, no qual levou ao desenvolvimento do script que é capaz de detectar usuários de AHK, alem de ser relativamente fácil em questão de customizações e manutenções, e executar em qual quer plataforma que execute qual quer tipo de servidor de Ragnarok. Referências Alexander, T. (2005). Massively Multiplayer Game Development 1 edition. California: HardCover. Autohotkey. (2009). Linguagem de Autohotkey. Retrieved 04 25, 2010, from http://www.autohotkey.com/docs/tutorial-portuguese.html Damas, l. (1999). Linguagem C - 10 Edição. Rio de Janeiro: LTC. Eathena. (2008, 02 15). Eathena. Retrieved 06 15, 2011, from Eathena: http://www.eathena.ws/board/index.php?s=de2079db66f084ce201e22ee3775d9c5& 14
Greg Hoglund, G. M. (2007). Explointing Online Games: Cheating Massively Distributed Systems. United States: Addison Wesley Professional. Contato: leonardcolusso@hotmail.com e luciano.silva@mackenzie.br 15