Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: blipi en 17 Abril 2016, 16:21 pm



Título: [Videotutoriales] Creación de servidores MMORPG
Publicado por: blipi en 17 Abril 2016, 16:21 pm
Videotutoriales, Creación de servidores MMORPG

Buenas a todos y ante todo gracias por pasar por este post. Destacar que en estos vídeos se ve el proceso de creación de un servidor MMORPG, lo que incluye:

  • Conexión con BDs MongoDB
  • Multithreading - Async processing
  • Socket selector
  • C+11
  • CMake
  • Reverse Engineering

El último punto, Reverse Engineering, se incluye porque el servidor se hace para un juego ya existente, NosTale. Si bien en esta serie de vídeos no se hace hincapié en este aspecto, será inevitable en algún momento u otro tener que realizar alguna inspección del juego. Dicho esto, si os interesa el tema o queréis saber más del hacking de NosTale, os animo a pasaros por mi otro post de ingeniería inversa: http://foro.elhacker.net/ingenieria_inversa/videotutoriales_hacking_de_juegos_onlinelocal_cheat_engine_ollydbg-t406249.0.html

Bien, al lío, os dejo los enlaces y, más abajo, la descripción de cada capítulo:

Lista de reproducción: https://www.youtube.com/playlist?list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

Y mi canal, donde también veréis las novedades:
Canal: https://youtube.es/c/Blipi

Para los demás, os dejo a continuación una lista de los capítulos con una debida explicación/resumen.
Los links se encuentran debajo de la descripción de cada vídeo.

Destacar que realmente estos vídeos son directos donde interacciono con el público, si los queréis ver son cada:
  • Lunes: 23.55pm a 02.00am
  • Martes: 23.55pm a 02.00am

Capítulos:
  • 1. Servidor básico + Parseando Paquetes | Creando un Servidor MMORPG (https://www.youtube.com/watch?v=9dSTZnsp_Kg&index=1&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Para hacer un servidor para NosTale el primero paso será hacer una división entre el servidor de Login y los servidores de Game. Si bien parece trivial, para ello ara falta un primer parseo de todos los paquetes.
      Parsear los paquetes implica entrar en el juego y ver, entender y razonar sobre lo que el cliente envía y recibe del servidor, es decir, interpretar los bytes que recibimos y enviamos, darles un sentido.

      En concreto, en este vídeo sentaremos las bases en común para el servidor de Game y de Login, para en los siguientes vídeos empezar a atacar ya el problema.
    • https://www.youtube.com/watch?v=9dSTZnsp_Kg&index=1&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 2. Servidor de login básico en C++11 | Creando un Servidor MMORPG (https://www.youtube.com/watch?v=UbH5Dd8w1rw&index=2&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Vamos a plantear el servidor más simple posible:
      • Solo acepta una conexión entrante
      • Gestiona la conexión, para bien o para mal, y se cierra sin poder aceptar ninguna más

      El objetivo es simple empezar a plantear el problema: Empezamos reduciéndolo al absurdo, implementado la funcionalidad mínima y una vez comprobado que funcione, en posteriores vídeos ya lo haremos con su funcionalidad completa.
    • https://www.youtube.com/watch?v=UbH5Dd8w1rw&index=2&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 3. Selectors, threading y MongoDB | Creando un Servidor MMORPG (https://www.youtube.com/watch?v=gTF38FcpWFE&index=3&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Las cosas se ponen interesantes, ahora que ya tenemos el servidor más básico posible, vamos a implementar las funcionalidades propias de un servidor:
      • Selectors: Connexiones basadas en eventos, no bloqueantes, para la gestión de multiples ususarios concurrentes
      • Threads: El servidor gestionará cada mapa y cada proceso independientemente, es decir, tendrá un thread para cada tarea
      • MongoDB: Bases de datos NoSQL, usaremos bases de datos no relacionales

    • https://www.youtube.com/watch?v=gTF38FcpWFE&index=3&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 4. GameServer, selección de personaje | Creando un Servidor MMORPG (https://www.youtube.com/watch?v=wlYQMf2Jbk8&index=4&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Ahora que ya tenemos el servidor de Login completamente hecho, vamos a empezar con el servidor de Game. Inicialmente plantearemos solamente la selección de personajes, esto es, el proceso de selección del jugador, basados en unos resultados obtenidos de la base de datos.

    • https://www.youtube.com/watch?v=wlYQMf2Jbk8&index=4&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 5. NosTale - Arreglando bugs varios | Creando un servidor MMORPG (https://www.youtube.com/watch?v=Jrw5A4OH838&index=5&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Recientemente cambié el sistema de paquete, ya no se usa std::string sinó fmt::writer, ya que el tiempo de formateo y conversión de string a int, y viceversa, es mucho mayor para el primer caso. Si bien el cambio se hizo rápido, el resultado fue que la criptografía que tanto había costado de crear, dejó de funcionar.

      En este vídeo repasaremos el procedo de cifrado y descifrado con el objetivo de encontrar los bugs y arreglarlos. Finalmente, al acabar el vídeo, volveremos a tenerlo todo funcional.
    • https://www.youtube.com/watch?v=Jrw5A4OH838&index=5&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 6. NosTale - Creación de personajes | Creando un servidor MMORPG (https://www.youtube.com/watch?v=fG3HrRVHpAk&index=6&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Hoy sí que sí que dejaremos la selección de 1 solo personaje funcionando bien. No quiero decir mucho, que sinó haré spoilers de todo el vídeo =P
    • https://www.youtube.com/watch?v=fG3HrRVHpAk&index=6&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt

  • 7. NosTale - Creación de personajes (II) | Creando un servidor MMORPG (https://www.youtube.com/watch?v=ovBao2iXTbQ&index=7&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt)
    • Tras arreglar un persistente problema con el cifrado, en este vídeo haremos lo siguiente:
      • Selección de múltiples personajes des de la pantalla de selección
      • Creación de nuevos personajes y algo de validación
      • Borrado de personajes

    • https://www.youtube.com/watch?v=ovBao2iXTbQ&index=7&list=PL6RJR1V-uAbz21DoGax4BTRcs_0OZ4kRt


Y eso es todo por ahora! Iré añadiendo vídeos conforme vaya haciendo los directos!