|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / [Videotutoriales] Creación de servidores MMORPG
|
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_0OZ4kRtY mi canal, donde también veréis las novedades: Canal: https://youtube.es/c/BlipiPara 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
- 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
- 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
- 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
- 5. NosTale - Arreglando bugs varios | Creando un servidor MMORPG
- 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
- 7. NosTale - Creación de personajes (II) | Creando un servidor MMORPG
Y eso es todo por ahora! Iré añadiendo vídeos conforme vaya haciendo los directos!
|
|
|
2
|
Programación / Ingeniería Inversa / [Librería C++] Detours, Codecaves, Return Adress Spoofing y mucho más
|
en: 5 Febrero 2014, 03:04 am
|
xHacking Buenas a todos! Hoy os traigo mi nueva creación, llamada xHacking. Se trata de una librería programada en C++11 especialmente diseñada para la ingeniería reversa. Incluye todo tipo de funciones, entre las que destacan la creación de Detours, Codecaves, memory breakpoints (con PAGE_GUARD a modo de codecave) y llamadas a APIs con spoofing de la dirección de retorno. Os dejo el link a github: https://github.com/blipi/xHackingAtención: Requiere compatibilidad con C++11. Funciona con Visual Studio 2013, y *quizás* con 2012. Inferior seguro que no. Aún no he podido dar soporte a otros compiladores, pero está en la lista. Cualquier error por favor usad el sistema de issues de allí mismo. Y si queréis nuevas funcionalidades u os animáis a programar, os invito a usar los push requests o postearlo aquí mismo! Os pongo algunos ejemplos de como se usaría la librería: API: Vamos a spoofer el "GetAsyncKeyState". Suponemos que estamos ya en el módulo principal. Encontrará automáticamente un punto en el código (un RET) en el que modificar el punto de retorno de nuestro call. API<SHORT, int>* api = new API<SHORT, int>(); api->AutoLoad("user32.dll", "GetAsyncKeyState")->AutoFakeWithinModule(GetModuleHandle(NULL)); // Llamada (*api)(VK_DOWN);
DETOURS: De momento no desensambla el código de destino, por lo que debemos asegurarnos antes de que tenemos los 5/6 bytes disponibles y que no son JMP/CALL/etc. No es el caso con recv. // Declaramos Detour<int, int, char*, int, int>* recvDetour = NULL; // Funcion int WINAPI d_recv(SOCKET s, char *buf, int len, int flags) { return (*recvDetour)(s, buf, len, flags); } // Creacion recvDetour = new Detour<int, int, char*, int, int>(); recvDetour->Load("WSOCK32.dll", "recv", (BYTE*)d_recv);
Y aún hay más funciones que os dejo experimentar a vosotros mismos!
|
|
|
3
|
Programación / Ingeniería Inversa / [Videotutoriales] Hacking de juegos (Online/Local, Cheat Engine, OllyDbg...)
|
en: 7 Enero 2014, 02:15 am
|
Videotutoriales de Hacking* Buenas a todos y ante todo gracias por pasar por este post. Encontraréis links a mis videotutoriales de hacking de juegos (aunque en el canal, hay otras cosas, como programación en general). Para aquellos impacientes que no desean leer o ir buscando uno a uno, os dejo una lista de reproducción donde añado los capítulos según los voy grabando: Lista de reproducción: https://www.youtube.com/playlist?list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0Y mi canal, donde también veréis las novedades: Canal: http://youtube.es/user/bl1piPara 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. Si habéis leído hasta aquí, me gustaría puntualizar el término hacking. Aunque voy a nombrarlo así porque es "como se conoce", lo que realmente estamos haciendo es cracking, o, como en la sección que estamos, ingeniería inversa. Capítulos:- 1. Introducción y Cheat Engine | Hacking de juegos
- En este primer vídeo aprenderemos a usar y a entender como funciona Cheat Engine. Es un programa que nos permite escanear la memoria de otros programas. Dicho de otra forma, Cheat Engine es un programa que dado unos valores (por ejemplo, 100 de vida) que cambian en el tiempo (nos disparan, ahora tenemos 90), nos permite encontrar en que punto (address, dirección de memoria en castellano) se encuentra este valor en el programa/juego.
Dada la address (a partir de ahora diré address, no dirección) podemos leer el valor actual o bien cambiarlo para nuestra conveniencia (nuestro real objetivo).
Todo sea dicho, hay ciertas limitaciones, pues "no todas las cosas son hackeables". Para que se entienda, tu puedes hackear/cambiar todo aquello que se encuentra en tu ordenador. Si por ejemplo en el juego que quieres hackear la vida la gestiona el servidor, y no se encuentra en tu juego (cliente), eso no podremos modificarlo. De hacerlo, lo único que cambiariamos sería lo que nosotros vemos, pero en ningún caso el valor real, puesto que no está en tu PC (piensa que es como si tu PC fuera solo una pantalla que muestra valores). En tal caso, hablaremos de "variables" serversided (es decir, en el lado del servidor). Veremos más adelante que estrategias podemos tomar para solucionar esto (solucionar no implica "poderlo hackear", pues, de ninguna forma podremos).
- https://www.youtube.com/watch?v=VJx7MzlTr28&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 2. Punteros en CE | Hacking de juegos
- En el capítulo anterior trabajamos con variables que, aunque cerremos el juego, al abrirlo de nuevo seguirán en el mismo sitio (address). En este vídeo veremos que no siempre es así, y que hay veces (prácticamente siempre en juegos reales) en que tendremos que trabajar con los llamados "punteros".
Que es un puntero? Si bien decimos que una variable es algo que contiene un valor (por ejemplo, la "vida" es una variable, de 0 a 100), un puntero será un tipo específico de variable cuyo valor nos lleve a la address de otra variable. Por ejemplo, nos podemos encontrar con que "vida" es dinámica (cada vez cambia de sitio). Deberemos encontrar una variable estática (verde, no cambia, de las del primer vídeo) cuyo valor nos lleve a esta variable "vida". Es decir, en realidad lo que hacemos es encontrar un puntero a vida: [ESTÁTICO]: Vida (estático) -> 100 [DINÁMICO]: Puntero (estático) a vida -> Vida (dinámico) -> 100
Si os parece muy difícil, mirad el vídeo y seguro que lo entendéis. Sino, postead!
- https://www.youtube.com/watch?v=nDPxJlOZ-Bc&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 3. Estructuras en CE | Hacking de juegos
- Veremos en este vídeo que son las estructuras y como identificarlas. Es importante que para entender este vídeo hayamos comprendido a la perfección el anterior capítulo, puesto que las estructuras no son más que un caso particular de los punteros!
Lo que distingue a las estructuras es que con un solo puntero tenemos acceso a más de una variable, mediante la modificación del offset. Este vídeo es muy fácil si se entiende bien el anterior, de no ser así, preguntad tanto como queráis, puesto que es obligatorio comprender este tutorial si queréis aplicarlo a juegos reales. La mayoría de programadores utilizan estructuras para organizar las variables en el código, así que con esto podremos identificarlas.
- http://youtu.be/XbZRHbd0qEo&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 4. Creando un Hack DLL en C++ | Hacking de juegos
- Después de aprender a utilizar el Cheat Engine para encontrar las direcciones cuyos valores queremos modificar, en este vídeo aprenderemos a crear una DLL donde poner los hacks.
Programaremos en C++ y aunque está hecho y pensado para gente que nunca ha programado, yo recomiendo tener unas nociones mínimas de C/C++, ya que ayudaran a entender y agilizar mucho más el progreso.
Usaremos el Visual Studio para programar la DLL, pero se puede hacer con cualquier compilador.
Se trata de un vídeo largo (aprox. 40 mínutos), pero esto es debido al enorme grado de explicación y detalle con que se hace. El objetivo que se persigue es aprender a hacer hacks "universales", para cualquier juego, y no a copiar el código como robots sin saber lo que realmente se hace.
- https://www.youtube.com/watch?v=Kjw7lHLF8t8&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 5. Desactivar AntiHack y OllyDbg | Hacking de juegos
- Ya con la DLL creada y unos conocimientos afianzados de CE, y buena parte de la teoría (addresses y punteros) aprendida, vamos a lanzarnos al mundo de la depuración, de mano de una de los mejores y más útiles programas, OllyDbg 1.10.
De nuevo se trata de un tutorial orientado a gente que no sepa nada de OllyDbg, pero aún así, si se tienen conocimientos de depuración y/o assembler, harán que el vídeo sea mucho más ameno y mucho más fácil.
La depuración exige dedicación, tiempo y ganas de aprender y no rendirse, porque, realmente, es bastante más complicado de lo que parece. Haré algún tutorial más, adentrándonos más en este exigente mundo, junto con CE, para ver hasta donde se puede llegar.
- https://www.youtube.com/watch?v=Ro7xhZb6K8I&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 6. Mejorando el hack DLL | Hacking de juegos
- Una vez ya sabemos hacer un bypass para el antihack mediante OllyDbg, el siguiente paso es distribuirlo junto a nuestros hacks.
Para ello aprenderemos a programarlos en la DLL, veremos como se modifica el código en memoria, pues requiere un poco más de código que la modificación de simples variables/valores. Partiremos de la DLL que ya desarrollamos en anteriores vídeos, aunque los conceptos son perfectamente aplicables a cualquier código empezado de 0 o de otro proyecto vuestro propio.
- https://www.youtube.com/watch?v=YmaPXY-gmOE&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
- 7. Punto de entrada dinámico | Hacking de juegos
- En anteriores vídeos se cometieron algunos errores, dado que durante la creación del programa "HackMe" olvidé cambiar una pequeña configuración.
No supone un gran problema ni dificulta en grandes medidas el aprendizaje, e incluso en algunos casos es conveniente para aprender más aún.
El problema está en que el llamado "Entry Point", o punto de entrada del programa, es decir la dirección donde empieza el código, es dinámica. ¿Que implica esto? Implica que cabe la posibilidad de que las direcciones cambien ligeramente cada vez que abras el programa de nuevo, y, sobretodo, si entre medio se cierra el pc.
Veremos como identificar estos Random Entry Points y como solucionarlos fácilmente.
- https://www.youtube.com/watch?v=AjEa9Jwd9zc&index=1&list=PL6RJR1V-uAbyRMzbOYFcTRTVZM4C1pOj0
Hacking de Juegos Online- 1. WPE Pro, Paquetes y C-S | Hacking de juegos Online
- Este tutorial da inicio a todo el mundo de los juegos ONLINE. Consideramos los anteriores vídeos como preliminares totalmente necesarios, ya que nos explican unos conceptos y nos aportan una soltura a la hora de programa que no se adquiere de otra forma.
Es gracias a ellos que ahora podemos coger un juego online y realizar hacks para este.
¿Que haremos en concreto? En este primer vídeo aprenderemos conceptos como Cliente, Servidor y Paquete. A partir de ellos veremos como funciona la transmisión de información entre nuestro juego (cliente) y el servidor, y la interceptaremos con un programa llamado "WPE Pro".
Más adelante aprenderemos a entender estos paquetes y a crear a partir de ellos un programa (bot) que nos cure automáticamente si nuestra vida baja del 50%.
- https://www.youtube.com/watch?v=qqAxLXV-HY4&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 2. WPE Pro, Interpretando los Paquetes | Hacking de juegos Online
- Ahora que ya hemos visto como obtener los paquetes, el siguiente paso es interpretarlos, es decir, ¿qué hace que?
Intentaremos encontrar la relación entre lo que el servidor nos envía (y lo que nosotros le enviamos) con las acciones que realizamos en el juego.
Por ejemplo, ¿qué ocurre cuando utilizo una poción? O más simple aún, ¿qué recibe el servidor cuando me conecto? Y en respuesta a esto, como me contesta el servidor si es correcto o incorrecto mi login? Es un sinfín de posibilidades, cualquier acción hecha en el juego tiene un equivalente en paquete, y es nuestro trabajo encontrarlos y entenderlos.
Esto servirá de preparación y de último paso para hacer el autopot.
- http://www.youtube.com/watch?v=0VBZ2SX_y4Y&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 3. Creando un AutoPot DLL en C++ | Hacking de juegos Online
- En el vídeo anterior pusimos al descubierto toda la comunicación entre el servidor y nosotros (o al menos la parte que nos interesaba). Es decir, hemos "comprometido" los protocolos entre ambos.
Ahora es simple cuestión de modificar, insertar o eliminar paquetes para conseguir lo que queremos. ¿Y qué queremos? En este vídeo veremos como se hace un AutoPot, es decir, un programa que nos cura solos cuando la vida baja de un % que nosotros marcamos. ¿Qué diferencia un autopot de un programa que pulse automáticamente teclas? El autopot es una DLL que además funciona enviando paquetes e interceptando, es decir, no requiere que tengamos el juego abierto ni en primer plano, mientras que lo otro, sí lo requiere.
Hacer un hack basado en paquetes tiene muchas ventajas respecto a uno basado en, por ejemplo, pulsaciones automáticas de botones.
- http://www.youtube.com/watch?v=8BwAOAXYcWw&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 4. OllyDbg, cifrado de paquetes, Nostale | Hacking de juegos Online
- De nuevo a la carga! En este vídeo empezamos con la ingeniería reversa en un nuevo juego online llamado NosTale. ¿Porqué este? Los paquetes son cifrados, sin demasiada dificultad, y a la vez no utiliza un anti-cheat, lo que lo hace perfecto para introducir el parseo de paquetes cifrados.
Para poder ver los paquetes y parsearlos, así como replicarlos, inyectarlos y utilizarlos, usaremos OllyDbg para encontrar la función de cifrado.
En este vídeo de 1 hora llegaremos a entender, a groso modo, como cifra el login, y en los siguientes haremos una implementación general para C++.
- https://www.youtube.com/watch?v=BOF_gnfIZbQ&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 5. Login NosTale al descubierto! 100% descifrado (OllyDbg y C++11) | Hacking de juegos Online
- Y ha caído! El login de NosTale está expuesto al 100%, lo que nos va a permitir crear un bot, un bot sin cliente e incluso un servidor.
En este vídeo veremos un poco de OllyDbg, para acabar de encontrar las partes del paquete de login que nos faltan, y sobretodo C++11, cuando pasemos lo que hemos encontrado en Olly a nuestro bot.
De paso, veremos como descifrar las respuestas al login (recv).
- https://www.youtube.com/watch?v=4pvkQ_u7tRc&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 6. NosTale hackeado - descifrado InGame, OllyDbg, Packets | Hacking de juegos Online
- Ahora que ya tenemos parte de la criptografía del juego desvelada, vamos a ser capaces de cifrar y descrifar cualquier paquete, sea del cliente o del servidor, nos lanzamos a la piscina con el parseo de paquetes.
En este vídeo no dejaremos rincón de NosTale sin descifrar y completaremos nuestro Bot (en cuanto a packet logging se refiere), además de extender la funcionalidad de nuestro bot Headless.
- https://www.youtube.com/watch?v=uHu9vXBFJbU&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
- 7. OllyDbg, teoría de inyección de paquetes | Hacking de juegos Online
- 8. Revisión del cifrado/crypting | Hacking de juegos Online
- 9. Bot auto-ataque, inyección de paquetes (I) | Hacking de juegos Online
- Por fin, tras largos días de trabajo sin grandes frutos, en este vídeo conseguiremos hacer funcionar al 100% la inyección de paquetes. Esto nos servirá, por ejemplo, para hacer una primera aproximación al auto-ataque.
Si bien el bot aún no atacará solo, nosotros tenemos que decirle el objetivo, vemos que ya podemos simular el ataque des del bot con simplemente el ID del monstruo al que queremos atacar. Será relativamente fácil, en los siguientes vídeos, hacer que el bot realmente ataque solo!
- https://www.youtube.com/watch?v=vVhdDUYKMi0&index=9&list=PL6RJR1V-uAby8xdNMKJbBebeJpxdnQy7r
Streamings - Hacking de Juegos Online
|
|
|
4
|
Programación / Scripting / [Videotutoriales] Programando en Python
|
en: 4 Enero 2014, 01:42 am
|
Videotutoriales de Python Hola a todos! He decidido empezar una serie de vídeos dedicados a aprender a programar en Python. Pasaros por mi canal de youtube para verlos todos! Os dejo la lista de reproducción: https://www.youtube.com/playlist?list=PL6RJR1V-uAbzZ_dY7IWHR4fkMnW3iKbYGY mi canal de Youtube: https://youtube.es/user/bl1piCada pocos días subo uno de nuevo, os dejo los links aquí mismo para que los podáis ver: - 1. Programando en Python - Variables y sintaxis
- En este videotutorial veremos los aspectos más básicos de Python.
¿Que es una variable? ¿Para que sirve? ¿Como se declara e inicializa? ¿Cómo puedo mostrar? ¿Que operaciones existen entre ellas? Veremos todo esto y más!
- http://youtu.be/g06QsbYcKMk
- 1.5. Programando en Python - Variables [Extra]
- En este repasaremos todos los conceptos del anterior y veremos algunos detalles más de las variables que quedaron en el aire. Es recomendable verlo aunque no obligatorio.
Es un paso medio entre el siguiente vídeo y el anterior. Se plantea un reto para principiantes, A ver si alguien lo resuelve!
- https://www.youtube.com/watch?v=FQycICAKxmw
- 2. Programando en Python - Funciones
- Las funciones son un gran paso adelante en Python, puesto que nos permiten organizar, modularizar y agrupar código.
Son un medio para evitar repetir inecesariamente el código.
Es importante aprender bien que es una función, para qué se utilizan, como se utilizan, etc. Ya que será un recurso al que siempre acudiremos en futuros vídeos. También son muy importantes los conceptos de variable local y de parámetros o argumentos de una función, puesto que sin tener claras estas dos cosas no seremos capaces de entender completamente las funciones.
- http://www.youtube.com/watch?v=M940eMvKSag
- 3. Programando en Python - Bucles y Condiciones
- Otra vez este es un capítulo crucial en la curva de aprendizaje de Python.
Veremos los bucles, es decir, repeticiones de código según unas condiciones que nosotros mismo establecimos. En concreto veremos el `for` y el `while`, ambos para casos básicos y un poco más complicados.
Además introduciremos los `if`, condiciones, que nos permitirán ejecutar código sí y solo sí una condición impuesta por nosotros mismo se cumpla.
Para rematar el capítulo, veremos dos nuevas funciones, `input` y `raw_input`, que nos permiten "coger" texto del usuario, es decir, pedir algo y leerlo.
- http://www.youtube.com/watch?v=Bs9esF0PJ2c
Espero que os guste! Preguntad lo que haga falta, tanto por Youtube como por aquí. Like y suscribiros!
|
|
|
|
|
|
|