Hoje começou o closed-beta do Tree of Savior, o jogo realmente me lembra Ragnarok (relembrando os velhos tempos), de qualquer forma, fiquei com uma vontade de analisar como funciona o jogo(em relação a comunicação), cada vez que eu descobrir algo interessante, vou atualizar isto aqui.
Eu utilizei Wireshark e WPE Pro para fazer está rápida análise, já que o cliente não tem nenhuma proteção, o WPE Pro fica fácil utilizar. O executável é packed, pretendo descobrir qual e remover(se eu tiver sucesso explicarei aqui também). Em relação a comunicação o cliente utiliza HTTP/XML para receber a lista de servidores, essa é a informação enviada e recebida:
Enviado:
GET /toscdn/patch/serverlist.xml HTTP/1.1
User-Agent: MS
Host: d28848zpt823xm.cloudfront.net
Recebida:
HTTP/1.1 200 OK
Content-Type: text/xml
Content-Length: 778
Connection: keep-alive
Date: Tue, 27 Oct 2015 10:15:53 GMT
Last-Modified: Tue, 27 Oct 2015 10:09:01 GMT
ETag: "2640fae87f4f02b48df305dd68e69b21"
Accept-Ranges: bytes
Server: AmazonS3
Age: 29123
X-Cache: Hit from cloudfront
Via: 1.1 eaaf7eb6072f1d7e0d8c7d2388e1bba6.cloudfront.net (CloudFront)
X-Amz-Cf-Id: duCAWCAF0A7KqfwIstEkQc2EFj-HJc42xz5r5-IZfoNi6gjlYVvVIw==
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by MintPC (Mi) -->
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Jung (IMCGames Co., Ltd) -->
<serverlist>
<statistics Ip="192.168.0.202" Port="10001"/>
<server GROUP_ID="100" TRAFFIC="0" ENTER_LIMIT="100" NAME="Laima" Server0_IP="54.88.25.242" Server0_Port="2000" Server1_IP="52.1.232.91" Server1_Port="2001"/>
<server GROUP_ID="101" TRAFFIC="0" ENTER_LIMIT="100" NAME="Zemyna" Server0_IP="52.2.37.158" Server0_Port="2000" Server1_IP="52.2.8.230" Server1_Port="2001"/>
<server GROUP_ID="102" TRAFFIC="0" ENTER_LIMIT="100" NAME="Gabija" Server0_IP="52.20.66.199" Server0_Port="2000" Server1_IP="52.21.141.72" Server1_Port="2001"/>
</serverlist>
Basicamente ele faz uma requisição da lista de servidor e recebe um XML, esse XML fica salvo na pasta como “serverlist_recent.xml”, uma possível forma de modificar isso seria editando o client.xml, já que lá tem o “ServerListURL=”.
Em relação aos pacotes, eu posso está enganado, mas aparentemente não há proteção/criptografia neles (acho que nem verificação de integridade há neles, preciso confirmar), aqui alguns pacotes que analisei(bem rápido):
Os 2 bytes no quadrado vermelho eu acho que provavelmente são os “header” dos pacotes, os de verde não faço ideia, mas sempre estão no início do pacote, no caso dos dois primeiros pacotes(que são envolvendo textos do chat), o primeiro byte após os 4 bytes 0xFF é o tamanho total do pacote, já no último que é o nome que fica ao lado do seu personagem e tudo que você tem, não representa o tamanho do pacote, não faço ideia do que seja por enquanto. No caso das strings, elas não tem um byte anterior indicando tamanho, mas SEMPRE acabam com um 0x0, provavelmente por que o início da string tem lugar fixo.
O jogo tem um Launcher para fazer update e verificar atualizações, o executável não tem nenhuma proteção, utilizando IDA Pro é possível descobrir o comando utilizado para executar o Client_tos.exe, ele utiliza ShallExecuteExA, essa API do Windows utiliza uma struct chamada SHALLEXECUTEINFOA, fazendo engenharia reversa, é possível encontrar que o parâmetro utilizado para executar o cliente (lpParameters da Struct), é o “-SERVICE”, basta criar um .bat da seguinte forma:
Client_tos.exe -SERVICE
E executar o como administrador e o cliente vai inicializar.
~Work in Progress~ Preciso organizar tudo, tá bem feio mesmo
E ai cara, bom dia!
Estou lendo seus posts e estou gostando, vc esta ativo ainda?
se sim manda um email ai.
Abcs.
Sim, só to um pouco sem tempo por causa do final do semestre, mas o que seria ? : p