A few days ago xorloser propered the GeoHot PS3 Hack Exploit for all PlayStation 3 Firmware versions, and today he has detailed the required SX28 microcontroller hardware and shared the source code.
To quote: This post will deal with the hardware required to trigger the PS3 hypervisor memory access exploit. The purpose of the hardware is to stop the PS3 from saving a change to a value that we don’t want changed. The PS3 saves this changed value by writing the value to RAM. Therefore in order to stop it from saving the changed value we need to stop this write from occurring.
The PS3 sends the write command to the RAM over some control lines, so we interfere with these control lines when the write command is sent. The result we want is havingthe PS3 think it has successfully written the value to RAM, but the RAM didn’t receive the write command due to our interference and so it did not perform the write operation.
The easiest (and moderately safe) way to interfere with these control lines is to ground them. This is done easily enough by connecting a wire between one of the control lines and ground. The tricky part is timing it just right so that it only interferes with the write we want to stop, and not anything that occurs before or after this write. This might be achievable with costly equipment and a lot of work, however geohotz used the simple method of “luck”. This involves repeatedly preparing the situation to best favour the chance of overwriting the correct write command and then continually grounding a control line until either something crashes that shouldn’t or the mark is hit stopping the write operation from occurring. At this point the exploit has been successfully triggered!
Now that you know how it works it is time to implement it. A connection is required to the control line that will be grounded as well as a connection to ground. These two wires then need to be connected to each other momentarily. If you were to try and do this manually as fast as you could you might connect them for a millisecond or so, however RAM control lines are very fast so 1ms is going to interfere with way too many commands. Instead these lines need to be connected to somehardware that is able to bridge the connection between then for very small periods of time at once. Geohotz suggests a connection period of 40 nanoseconds.
There are many ways that some hardware can be made to perform this short connection. Geohotz used an FPGA he had on hand in order to do it. Others have suggested using a 555 timer, however I have not heard of anyone having any success with this method. I used a small sx28 microcontroller I had on hand due to using it for a project some years ago. It runs at 50MHz with an instruction cycle of 20 nanoseconds, which means it should be fast enough to provide the 40 nanosecond connection required.
The first step is to take apart your PS3 in order to expose the top side of the motherboard. Once you do so look for one of the following areas on it depending on what version PS3 you have.
This first picture is from an old 60GB PS3 which came with the 4 USB ports and the card readers. You can see I have soldered a wire to the side of a resistor. This is the connection to the PS3 RAM control line that you need to solder on. I suggest you route this wire down and then to the left of the two pronged power plug you can see. My wire continues downward in this picture, but I found that doing so caused interference in the wire that would unintentinally trigger RAM corruptions. To avoid this you should route it to the left underneath the power plug so that it then comes out of the left side ofthe PS3 case. You can use a long wire during installation, but try to keep it short when you finalise its routing and final positioning. You can see I used a hot glue gun to ensure any stress placed on the wire will not pull at thesolder joint.
This second picture is from an 80GB PS3 with 2 USB ports and no card readers. This was the model that was out just before the “fat” PS3s were replaced by the “slim” PS3s, so it is a newer motherboard revision where there are two RAM chips on both sides of the motherboard instead of all four on one side. In this picture I have circled the trace you shouldsolder to for your RAM control line connection. In order to solder to this I used a craft knife to carefully scratch the paint off the top of the trace to expose the copper underneath which I then soldered a wire to. Once connected you should route this wire straight down towards the front of the case to best avoid interference in the wire from other parts ofthe PS3. Once again try to keep the final wire nice and short.
Next you need to get a ground connection. This is done the same way for both motherboard versions and is very easy. You can just wrap a wire around any of the metal screws that screw into the metal shielding that covers the top of the motherboard. You don’t even need tosolder it, just wrap it under the screw head and screw it into place This wire should be routed out of the console next to to your othercontrol line wire.
The above two wire connections are common to any implementation of a hardware trigger. The following is specific to how I did my hardware trigger but you may implement your trigger however you want. Note that I initially tried wiring 5 Volts of power out next to these lines but doing so continually resulted in unwanted interference inthe control line causing the PS3 to crash while booting.
For my hardware trigger I used an SX28 microcontroller which I bought years ago as part of this programming kit. To use the SX28 you need the SX28 chip, a way of programming the chip (usually an SX-Key or SX-Blitz) and an oscillator to drive the SX28 chip at 50MHz. All of these are included in the above programming kit. Maybe if enough people buy from them and mention xorloser they’ll send me a USB version of the SX-Key instead of my old serial based one :/
Below is a crappy schematic of my circuit which I drew in windows paint. Please note that I am using the programming kit I mentioned above which utilises the SX-Key programmer in place of an oscillator while the SC-Key is attached. I do not have an external oscillator so I’ll leave the hooking up of that to you. Just take note that you do need either an oscillator or SX-Key attached in order to make the chip run.
This SX28 sourcecode is the last piece of the puzzle. Program this to your SX28 chip using the free SX-Key Editor software from the Parallax. Once this is all hooked up to your PS3 you should be able to send a “pulse” (grounding of the control line) to the PS3 by pressing the switch. You should use a temporary-on push button switch to do so since it will keep sending pulses every 100ms if the switch stays connected. The LED on the right side of the schematic is just there to give the operator some feedback. It will light up when a pulse is sent to let you know that the circuit is working as it should.
I should mention that if you look at my SX28 sourcecode you will see that it appears as if I am sending a 360 nanosecond long pulse. I do not know how long the pulse is that actually gets sent as I do not have anyhardware that I can measure the pulse with (yet). Possibly there are hardware induced delays that occur when changing the direction of the port which means that although I am waiting 360 ns, it still only sends a pulse that is about 4o ns. To arrive at the 360 ns value I tried many values making the pulse as short as I could until it didn’t trigger anymore, then I increased it just a little bit to get the shortest pulse that still works.
Phew, this is finally the end of this post. My next post will tie it all together along with some software I have written to dump your own hypervisor and more. Cya.
Traducción por guitripo escribió:Hace unos días xorloser propered la Geohot PS3 Hack Exploit para todas las versiones del firmware de PlayStation 3, y hoy se ha detallado el hardware requerido microcontrolador SX28 y compartir el código fuente.
Para citar: Este puesto se ocupará con el hardware necesario para activar la PS3 acceso a la memoria hipervisor explotar. El objetivo de los equipos es detener la PS3 de ahorro de un cambio a un valor que no queremos cambiar. La PS3 guardará este valor cambiado por escrito el valor de la RAM. Por lo tanto, a fin de evitar que guardar el valor cambiado tenemos que dejar de escribir esto ocurra.
La PS3 envía el comando de escritura a la memoria RAM sobre algunas líneas de control, por lo que interfieren con las líneas de control cuando el comando de escritura se envía. El resultado que queremos es PS3 havingthe creo que ha escrito correctamente el valor de la memoria RAM, la memoria RAM, pero no recibió el comando de escritura gracias a nuestra intervención y lo que no se pudo efectuar la operación de escritura.
La forma más fácil (y moderadamente segura) forma de interferir con estas líneas de control es de tierra ellos. Esto se hace con bastante facilidad al conectar un cable entre una de las líneas de control y tierra. La parte difícil es el tiempo que apenas a la derecha de modo que sólo interfiere con la escritura queremos parar, y no algo que se produce antes o después de escribir. Esto podría lograrse con equipos costosos y un montón de trabajo, sin embargo geohotz utilizado el método simple de la "suerte". Esto implica la preparación en varias ocasiones la situación de la mejor manera de favorecer la posibilidad de sobrescribir el comando de escritura correcta y continuamente a tierra una línea de control hasta que algo falla que debe o no la marca es golpeado detener la operación de escritura se produzcan. En este punto, la explotación ha sido activado con éxito!
Ahora que sabes cómo funciona es el momento de ponerla en práctica. Se requiere una conexión a la línea de control que se basa, así como una conexión a tierra. Estos dos cables se deben conectar entre sí momentáneamente. Si tuviera que intentar hacerlo manualmente, tan rápido como podría usted puede contactar a una milésima de segundo o así, sin embargo, las líneas de control de memoria RAM muy rápido para 1ms va a interferir con la manera de los comandos de más. En lugar de estas líneas deben estar conectadas a somehardware que es capaz de cerrar la conexión entre la continuación por períodos de tiempo muy pequeño a la vez. Geohotz sugiere un período de conexión de 40 nanosegundos.
Hay muchas maneras de que algunos de hardware se puede hacer para realizar esta conexión de corto plazo. Geohotz utiliza un FPGA que tenía a mano para hacerlo. Otros han sugerido el uso de un temporizador 555, sin embargo no he oído de nadie que tener ningún éxito con este método. Yo utilicé un pequeño SX28 microcontrolador que tenía a mano, debido a su utilización para un proyecto de hace algunos años. Se ejecuta a 50 MHz con un ciclo de instrucción de 20 nanosegundos, lo que significa que debe ser lo suficientemente rápido para proporcionar la conexión de 40 nanosegundos necesario.
El primer paso es evitar la separación de tu PS3 con el fin de exponer la parte superior de la placa base. Una vez que lo hace buscar una de las siguientes áreas en que dependiendo de lo que PS3 la versión que usted tiene.
Esta primera imagen es de una PS3 de edad de 60 GB que viene con los 4 puertos USB y el lector de tarjetas. Usted puede ver que he soldado un cable a un lado de una resistencia. Esta es la conexión a la PS3 de línea de control de memoria RAM que usted necesita para soldar en. Le sugiero que la ruta de este hilo hacia abajo y luego a la izquierda del conector de alimentación de los dos frentes se puede ver. Mi cable continúa a la baja en esta foto, pero he encontrado que al hacerlo causado interferencias en el cable que daría lugar a unintentinally corrupciones de memoria RAM. Para evitar esto debe enrutar a la izquierda debajo de la clavija de alimentación de forma que luego sale de La per-cepción izquierda caso de PS3. Usted puede utilizar un cable largo durante la instalación, pero intenta que sea breve al finalizar su ruta y la posición final. Usted puede ver usé una pistola de pegamento caliente para asegurar que cualquier esfuerzo puesto en el cable no se tire en thesolder conjunta.
Esta segunda foto es de la PS3 80 GB con 2 puertos USB y no lectores de tarjetas. Este fue el modelo que fue justo antes del "gordo" de PS3 se sustituye por el de PS3 "Slim", por lo que es una revisión placa madre nueva, donde hay dos chips de RAM en ambos lados de la placa base en lugar de los cuatro en un lado. En esta foto yo marqué la huella que shouldsolder a para el control de conexión de RAM línea. Con el fin de la soldadura para ello he utilizado un cutter para rascar la pintura con cuidado la parte superior de la huella para exponer el cobre por debajo de la que luego un alambre para soldar. Una vez conectado debe enrutar este cable hacia abajo hacia la parte delantera de la caja de la mejor evitar las interferencias en el cable de otras partes PS3 ofthe. Una vez más, tratar de mantener el hilo de final agradable y corto.
Siguiente que usted necesita para obtener una conexión a tierra. Esto se hace de la misma manera en ambas versiones, la placa base y es muy fácil. Usted sólo puede envolver un alambre alrededor de cualquiera de los tornillos de metal que se atornilla en el blindaje de metal que cubre la parte superior de la placa base. Usted ni siquiera necesita tosolder, sólo envolverlo en la cabeza del tornillo y el tornillo en su lugar Este alambre deben ser colocados fuera de la consola junto a su cable de la línea othercontrol.
Estos dos conexiones de cable son comunes a cualquier aplicación de un disparador de hardware. El siguiente es específico de cómo hice mi disparador de hardware, pero puede implementar su activación como quieras. Tenga en cuenta que inicialmente trató de cableado de 5 voltios de potencia a cabo junto a estas líneas, pero hacerlo continuamente como resultado no deseado enla línea de control que causan interferencias de la PS3 se bloquee al arrancar.
Para mi disparador de hardware que utiliza un microcontrolador SX28 que compré hace años como parte de este kit de programación. Para utilizar el SX28 se necesita el chip SX28, una manera de programar el chip (normalmente un número o SX-SX-Blitz) y un oscilador para conducir el chip SX28 en 50MHz. Todos estos están incluidos en el kit de programación anterior. Tal vez si suficientes personas compran a ellos y hablar de xorloser a mí me mandan una versión USB de la SX-número de serie en lugar de mi viejo uno basado en: /
Continuación se muestra una porquería esquemática de mi circuito que me atrajo en las ventanas de la pintura. Tenga en cuenta que estoy usando el kit de programación que he mencionado anteriormente, que utiliza el programador SX-Key, en lugar de un oscilador, mientras que el SC-se adjunta número. Yo no tengo un oscilador externo, así que dejaré el conectando de que a usted. Simplemente tome nota de que usted no necesita ni un oscilador o SX-Key adjunta con el fin de hacer funcionar el chip.
Este código fuente SX28 es la última pieza del rompecabezas. El programa de este a su chip SX28 con el libre SX-Key Editor de software de la paralaje. Una vez que todo esto es conectado a tu PS3 debería ser capaz de enviar un "pulso" (puesta a tierra de la línea de control) para la PS3 pulsando el interruptor. Usted debe usar un temporal en el interruptor pulsador para hacerlo, ya que seguirá enviando pulsos de cada 100 ms si el interruptor permanece conectado. El LED en la parte derecha del esquema se encuentra allí para dar al operador algunos comentarios. Se iluminará cuando un pulso es enviado para hacerle saber que el circuito está funcionando como debería.
Debo mencionar que si usted mira mi SX28 código fuente, verá que aparece como si estuviera enviando un pulso largo 360 nanosegundos. No sé cuánto tiempo el pulso es que realmente se envían como no tengo anyhardware que puede medir el pulso con el (todavía). Posiblemente hay retrasos provocados por el hardware que se producen al cambiar la dirección del puerto, lo que significa que, aunque estoy esperando 360 ns, todavía sólo envía un pulso que está a punto 4o ns. Para llegar al valor de 360 ns traté muchos valores que toma el pulso lo más corto que pude hasta que no provocó más, entonces aumentó un poco para conseguir el menor pulso que aún funciona.
¡Uf, esto es, finalmente, el final de este post. Mi siguiente entrada será mantenerlo todo junto, junto con algunos software que he escrito para volcar hipervisor propio y mucho más. Cya.
Se aceptan mas traducciones
Imágenes: