Aprenda a escribir un cargador binario [Tutorial POr Wololo]

Editado: El límite del ancho de las imagenes es de 500 pixeles, sobrepasar este límite puede descolocar la web e incumple las Normas de la comunidad, antes de volver a postear por favor revíselas.| -Viciuz-

 

:::::Traducción al español del tutorial de Wololo :::::

 

Después de estudiar tanto la hazaña del Gripshift y MOHH , ahora yo me siento capaz de poder escribir una pequeña guía para crear un cargador de binario.

El primer paso para ejecutar homebrew en una PSP es encontrar un de explotar algo en el modo usuario --xploit modo user--, que se realiza tomando el control de la Ram a través de técnicas tales como un desbordamiento de búfer en un juego imágenes a mano.

Imagine que usted ha encontrado una vulnerabilidad, y tener control absoluto de nuestra variable amada $ ra. El siguiente paso para usted es crear una prueba de concepto. La idea básica es crear un cargador de binarios, es decir, un fragmento de código capaz de cargar otra pieza de código desde un archivo en el dispositivo de memoria, a continuación, ejecutarlo. Escribir un cargador de binarios es muy sencilla, una vez que sabes cómo hacerlo, pero depende de muchos conocimientos tribales, ya que no hay lugar central que reúne a ese tipo de información.

 

Así que ahí está :)
Descargo de responsabilidad: acabo de aprender cómo hacerlo yo mismo hace muy poco. Algunas de las técnicas que describo aquí, podría no ser óptima. También me **** en grande en MIPS. Ah, y tiendo a escribir un guión de rubí para las cosas que probablemente podría ir en un Makefile.Como de costumbre, tener todo lo que lee en Internet y con un grano de sal.

En esta guía te estoy asumiendo que ya tiene el control de la variable $ ra y puede cambiarlo a cualquier valor que quiera. Estoy tomando el ejemplo de una partida guardada. Algunos pasos son bastante diferente si has encontrado una vulnerabilidad en el XMB, pero en general los principios son los mismos. Estoy asumiendo que usted sabe cómo usar psplink, y tienen un buen conocimiento sobre cómo usar un HexEditor, lenguajes de script, un poquito de C y / o MIPS, Makefiles básicos ... o menos, el tipo de cosas a aprender la escritura homebrews.

 

Contenido.

Escribir un cargador de binarios de un savegame explotar requiere los siguientes pasos:

  1. Encuentre un lugar para ir a
  2. Encuentra las importaciones función
  3. Compilar un cargador de binarios
  4. Inyectar el gestor de binarios en savegame
  5. Escriba un SDK adaptarse a su juego
  6. Crear una pequeña "prueba de concepto" archivo binario (también conocido como "Hello World")
  7. Reencrypt su savegame

ENCUENTRE UN LUGAR PARA IR A

psplink Ejecutar y bloquear el juego como el que "normalmente" hacen. Tenga eso en funcionamiento, lo necesitará para este paso.


 

Usted tiene el control de $ ra, y la necesidad de tener que ir a donde quiera que se inyecte el código del cargador de binarios. Básicamente, el código se inyectará en el savegame, por lo que necesita saber dónde en Ram ese pedazo de la savegame termina. Para ello, es necesario comparar visualmente su Ram y el savegame. Para hacer un volcado de la memoria RAM justo después de un accidente que pueda encontrar, el tipo 0 × 08800000 savemem 20000000 memdump.bin en psplink. Esto creará un archivo memdump.bin en su disco, el cual debe ser aproximadamente 20 MB.
Ahora busca un patrón muy reconocibles en sus partidas guardadas. Una serie de cartas o bytes que se puede buscar fácilmente. Y mira por estos valores en su Ramdump así (con una HexEditor, obviamente). En la imagen de abajo, mi ramdump está a la izquierda, y el savegame está a la derecha.


 

Una vez que hayas encontrado en usted son ramdump, usted ya sabe donde quiere ir, y donde se inyecta el código en su savegame. En este ejemplo, mi patrón es en la posición 0 × 43F0 en el savegame, y en la posición 0 × 32C3E0en el ramdump. Esto último es en realidad 0 × 8800000 + 0 × 32C3E0 (0 × 08B2C3E0) en la memoria RAM ya que nuestro fichero objeto de dumping a partir de las 0 × 08800000. Puede comprobar si su psplink sigue abierta: usted debe encontrar su patrón si escribe:  0 × memdump 08B2C3E0 20(sustituir la dirección con lo que usted eligió, por supuesto).
Usted quiere asegurarse de que el lugar al que ir al es exactamente equivalente a la pauta que eligió en su savegame, más de unos cientos de bytes. Si hay diferencias en este ámbito entre el savegame y el carnero, que significa este bloque savegame no es totalmente cargada en esta posición, y hará que la inyección de código más difícil (que quiere que su código sea en un solo bloque, no salpicó a todos más de la Ram :P )
Así que tienes un paso: hemos encontrado un buen lugar para ir a (0 × 08B2C3E0), y donde en el SDDATA.BIN vamos a inyectar nuestro cargador de binarios (0 × 43F0).

 

 

ENCUENTRA LAS IMPORTACIONES FUNCIÓN

OK, esto suena muy difícil, pues si se requiere mucho conocimiento excepcional: ese no es el caso. O, mejor dicho, disponemos de herramientas que hacen el trabajo por nosotros.
Cuando se escribe un homebrew, se llama a las funciones de la pspsdk. La posición de estas funciones en la RAM no se conoce de antemano en el caso de un juego de explotar, así que tenemos que encontrarlos y "redirigir" correctamente.
En el caso de un juego, usted desea extraer el EBOOT.BIN "de su juego y descifrarlos. El EBOOT.BIN está dentro de la iso de su juego, así que para conseguirlo se necesita una iso de su juego. Si el juego es un UMD, es muy fácil de hacer en cualquier firmware personalizado con el "USB Drive" opción que usted puede encontrar en cualquier custom firmware. (Si el juego es un juego de PSN, tendrás que NPDecryptor para crear el ISO).

Lo más probable es este "EBOOT.BIN" se cifra, por lo que, además, necesario para descifrarlo con prxdecrypter.

 

 

Una vez que haya descifrado su EBOOT.BIN mano, utilice prxtool para recuperar información de él, con la siguiente sintaxis:

 

prxtool-f EBOOT.BIN

 

Esto le dará las direcciones reales de cada función que las importaciones de juegos y aplicaciones. Estas son las funciones que podrás utilizar en tu homebrews o en el cargador de binarios.

 

 

Se dará cuenta de que en lugar de nombres de funciones, se obtiene un nombre de biblioteca seguido de valores hexa. Desde allí se puede hacer manualmente las asociaciones, o (mejor) recibe un archivo XML con los DNI / nombres de las funciones asociaciones. Estos archivos xml se pueden encontrar en el sitio web de silverspring (http://silverspring.lan.st/).
Una vez que haya uno de estos archivos xml días nacionales de inmunización, sólo escriba

 

prxtool-f-n yourfile.xml EBOOT.BIN

 

que le dará una salida mucho más legible :)

 

 

Mantenga este producto en alguna parte!
Si prxtool se queja de su archivo que no sea un prx ... probablemente jodido el proceso de descifrado en algún momento, o si utiliza el mal EBOOT.BIN (hay varios de estos en la norma ISO, la mayoría de ellos son ficticias)

COMPILAR UN CARGADOR DE BINARIOS

Para este paso le sugiero que descargar el sparta_sdk de MaTiAz y Freeplay ya que es un buen ejemplo.
El cargador de binarios en sí es bastante simple para escribir directamente en el montaje. Usted puede escribir en C basado en el SDK va a crear (que describo más abajo), pero aquí mi inspiración es la sparta_sdk que tiene su cargador de binarios escritos en ensamblador del MIPS. Asamblea es un poco más dura que C / C + +, pero en este caso, estamos simplemente va a adaptar el trabajo MaTiAz para acomodarlo a nuestro juego, así que es sólo un reemplazo de aquí y allá.
Abra el archivo "loader.S" del SDK de Esparta.

 

 

Básicamente lo que queremos para reemplazar la función que aquí son direcciones usadas por el binLoader Esparta. MaTiAz utiliza las direcciones que tenía sentido para Gripshift, pero no para su juego. Así que para las 4 funciones que se trate (sceIoOpen, sceIORead, sceIOClose, sceKernelDcacheInvalidateRange), usted tendrá la lista de importaciones generaron antes, y sustituir el "grisphift" valor con el valor de su juego. En mi ejemplo, voy a sustituir a 0 × 08A69854 con 0 × 08C88590 para sceIoClose, y así sucesivamente.
Además, es necesario actualizar la dirección donde se almacena el nombre de archivo. El nombre del archivo es el nombre de su binario, y es tradicionalmente ms0: / h.bin. Usted necesita agregar esta cadena en su savefile alguna parte alrededor de su lugar de salto, e inyectar esta dirección en el código ensamblador. En mi ejemplo a continuación, puse el nombre de archivo "0xF0"bytes después de mi punto de salto, así que voy a cambiar el0xC0 de Esparta en F0. No te olvides de poner un "0 × 00" al final de la cadena! Tenga en cuenta que esto también significa que la longitud de mi cargador de binarios compilados tiene que ser inferior a F0 bytes, de lo contrario cuando lo voy a inyectar sobrescribir mi nombre al archivo: '(

 

 

Eso es casi lo único que tienen que cambiar. Ahora haremos compilar este archivo y lo inyecta en la SDDATA.BIN.
Compilación de montaje no es especialmente difícil, ya que todas las herramientas para que se proporcionan en el pspsdk. Una vez más, inspirándose en el spartaSDK, aquí están los comandos de compilación necesarios:

psp-como loader.s
a.bin binarios a.out psp-objcopy-O

El primer paso compila el código, y el segundo paso crea una versión binaria de la misma.

INYECTAR EL CARGADOR DE BINARIOS EN SU SAVEGAME

Una vez que tenga una versión compilada del binLoader, entonces es fácil de inyectar en el archivo de salvar, ya sea manualmente con un copiar y pegar, o mediante el lenguaje de scripting de su elección. La única cosa a recordar es que usted desea para colocarlo en la ubicación precisa se pongan en venta $ ra, que ha encontrado anteriormente en este artículo.

Para la inyección, tengo un script pequeño rubí que tiene un archivo válido SDDATA.BIN y carga el exploit + el cargador de binarios compilados en él directamente. Sólo tengo que proporciona una imagen del código, ya que tendría que cambiar de forma masiva para que funcione en explotar tu, así que te sugiero que vayas con el método que prefiera para inyectar su código.

 

 

 

Tenga en cuenta que en este paso, ya tiene una forma de crear tu hola mundo (en asm) y lo inyecta en lugar del cargador de binarios. En realidad no es necesariamente una mala idea para tratar de código mucho más fácil (como llamar a sceKernelExitGame) antes de fin de un cargador de binarios, para asegurarse de que trabaja bien.

ESCRIBA UN SDK

Esto suena difícil. No lo es. Una vez que usted tiene su función importa, escribiendo el SDK es un pedazo de la torta. Lo que hay que hacer aquí es tomar la lista de importaciones función que recuperar a través de prxtool, y actualizar el sdk.h muestra en sparta_sdk. Es bastante sencillo. En mi ejemplo, yo sustituiría 0 × 08A69854 con 0 × 08C88590 y así sucesivamente, tal como lo hice con la S..

 

 

Pero el archivo sdk.h sparta_sdk no es realmente el mejor ejemplo de ello.Más bien, debería echar un vistazo a sdk.S de la MOHH explotar. Este es el montaje, pero está muerto sencillo, ya que ni siquiera hay que buscar cuáles son las funciones realmente hacen.

 

 

 

En mi caso me escribió un guión simple que analiza rubí mi prxtool "importaciones" funciones de archivo en una función sdk.S, pero probablemente hay algunas opciones en prxtool para ayudarle con esa tarea.
A continuación, obtener el sdk.h de la MOHH explotar, y eso es todo. Un archivo. S y uno. H, y ya está!

ESCRIBE UN MUNDO HOLA

Una vez que tenga su sdk, escribir un Hola Mundo es extremadamente simple.En realidad, incluso se puede engañar y la reutilización de las muestras proporcionadas en el SDK de Esparta. Asegúrese de iniciar con la más pequeña de archivo posible, sólo para asegurarse de que su código funciona realmente. Una simple prueba de concepto es sólo un código en C que llama a "sceKernelExitGame ()". Eso es suficiente para que usted pueda confirmar que el SDK es más o menos correcta y que el cargador de binarios (cifrados anteriormente) hace su trabajo.

 

 

 

 

Sólo recuerde para reemplazar todas las apariciones de "sparta_sdk" con su propia sdk. Si ha utilizado la técnica MOHH sdk.S lugar, su makefile puede ser que necesite algunos cambios (se inspiran en el Makefile de MOHH más que el de Esparta en ese caso)
La salida de la compilación debe ser una h.bin archivo. Si su cargador carga binaria ms0: / h.bin, a continuación, sólo hay que poner h.bin que en la raíz de tu memory stick, pon tu binaryLoader SDDATA.bin en la subcarpeta correcta del directorio SAVEPLAIN, y iniciar el juego (con SGDeemer y psplink activado por supuesto), gatillo de la hazaña ... y tu hola mundo debe aparecer :)

SOLUCIÓN DE PROBLEMAS

Puede haber varias razones para su explotación a fallar en ese punto. Aunque la programación de computadoras IS ciencia exacta, es muy fácil de hacer errores estúpidos si su entorno de trabajo no es "bueno" lo suficiente. En ese momento, psplink es la clave para su éxito. Si usted recibe un accidente, trate de investigar la Ram. ¿En realidad salta a la ubicación correcta? Es el gestor de binarios en realidad en ese lugar? ¿Es del todo o no lo entendí truncado por alguna extraña razón? Añadir puntos de interrupción para el gestor de binario a ver si realmente funciona. Cuando esté seguro del cargador de binarios se ejecuta, asegúrese de que realmente carga tu hola mundo en el que esperamos que sea cargado en Ram. Si es así, añadir puntos de ruptura a su hola mundo. O simplificarlo.
Todos estos pasos pueden ser extremadamente dolorosos si no automatizar parte de su trabajo. Les recomiendo tomarse el tiempo para escribir unos cuantos scripts que automatizan el trabajo por usted (compilar el binLoader y lo inyecta, etc ...). Elija lo que el lenguaje de scripting que esté seguro de con :)

REENCRIPTA SU SAVEGAME

Ese es el último paso si desea asegurarse de que su explotación de las obras sobre el firmware oficial. Una herramienta llamada SED le permite reencrypt su savegame explotados. Para ello sin embargo, necesita la clave de partidas guardadas. Esa clave se puede encontrar en los datos SAVEPLAIN dada por SGDeemer. Es en la parte inferior de XXXX.bin donde XXX es el código de su juego. En la parte inferior de ese archivo, en los últimos 20 bytes deben ser ceros solamente. desea que el 16bytes antes de eso. Esa es la clave :)
Para el uso de la SED ... bueno, en google, me siento perezoso. Si lo hizo tan lejos, SED no debería ser un problema para usted :)

Fuente: Wololo.net PD: E arreglado muchas cosas ya que el traductor de google no lo traduce a la perfeccion ^^

 

 

 

 

 

 




Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

xD

haver que pasa si la gente se pone a esto

Imagen de quetvil

Interesante

Q bueno q hayas subido este tutorial asi podremos aprender mas sobre esto y puede q encontremos cosas mas rapido.

salu2!!

Imagen de xenneco

Buen

Buen tuto , gracias , que con el ingles uno no entendia ni papa , y con el traductor de google casi que menos jeje.

Muy bueno viejo ya hera ora

Muy bueno viejo ya hera ora de que alguien lo suba aqui asi lo leeran los usuarios y podran ponerse manos a la obra OK 

sipi claro

esto es un buen aporte

Xd haber cuantos lo leen

Xd haber cuantos lo leen hojala lo lean barios usuarios así puede que salgan nuevos hackers XD

Imagen de Cristian Funky

ponexisaac incluelo en tu

ponexisaac incluelo en tu post de scenebeta si puedes y  en demas sitios para que lo puedan ver y aprendan de esto 

ojala

^^

Todo depende de el animo que

Todo depende de el animo que le pongan al leerlo

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.