Home Homebrew Nihonium: Un nuovo framework C++ per la manipolazione della memoria su PlayStation...

Nihonium: Un nuovo framework C++ per la manipolazione della memoria su PlayStation 5 (solo per sviluppatori)

161
0

Il developer cragson presenta Nihonium, un nuovo framework C++, progettato per manipolare la memoria della console PlayStation 5.

Attualmente in fase di sviluppo,  il framework è stato testato solo sul firmware 2.00, ma dovrebbe funzionare su tutti i firmware supportati dalla suite SDK di John Törnblom, che è un requisito essenziale per il suo utilizzo.

Il framework sfrutta C++23 e offre una serie di strumenti avanzati per interagire con la memoria del kernel e altre funzionalità di sistema.

Configurazione e compilazione

  • Clonare e compilare l’SDK di John Törnblom (basato su GNU/Linux):
    • wget https://github.com/ps5-payload-dev/sdk/releases/latest/download/ps5-payload-sdk.zip
    • sudo unzip -d /opt ps5-payload-sdk.zip
  • Clonare Nihonium:
    • git clone git@github.com:cragson/nihonium
  • (Opzionale) Effettuare il jailbreak della PS5 per inviare il payload direttamente dopo la compilazione.
  • Impostare l’indirizzo IP corretto della PS5 all’interno del file nihonium/debug.sh.
  • Eseguire nihonium/debug.sh per compilare il payload e inviarlo alla PS5.

Caratteristiche del Framework

Di seguito sono elencate tutte le funzionalità disponibili del framework, spiegate e accompagnate da esempi pratici.

KernelMemory

  • Questo modulo fornisce l’accesso a funzioni utili per la manipolazione del Kernel, come la lettura e la scrittura nella memoria del kernel.

ILibKernel – Interfaccia per Libkernel

Attualmente sono supportate le seguenti funzioni:

  • sceKernelSendNotificationRequest
  • sceKernelGetHwModelName
  • sceKernelGetHwSerialNumber
  • sceKernelGetCpuFrequency
  • sceKernelGetCpuTemperature
  • sceKernelGetSocSensorTemperature

Esempi

Di seguito viene riportata una serie di piccoli esempi che illustrano l’utilizzo delle diverse parti di questo framework, consentendo di testarne facilmente le funzionalità.

Come ottenere la base del testo del kernel

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto kernel_txt = KernelMemory::get_kernel_text_base();

    std::println( "[+] kernel text: {:X}", kernel_txt );

    return 0;
}

Come ottenere la base dei dati del kernel

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto kernel_data = KernelMemory::get_kernel_data_base();

    std::println( "[+] kernel data: {:X}", kernel_data );

    return 0;
}

Come leggere la memoria del kernel

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto kernel_txt = KernelMemory::get_kernel_text_base();

    if(!kernel_txt)
        return 0;

    const auto buffer = KernelMemory::read_kernel< uint64_t >( kernel_txt );

    std::println( "[+] First 8 bytes from kernel text: {:X}", buffer );

    return 0;
}

Come scrivere nella memoria del kernel

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto kernel_data = KernelMemory::get_kernel_data_base();

    if(!kernel_data)
        return 0;

    if( KernelMemory::write_kernel< uint64_t >( kernel_data + 0x1337, 0xDEADAFFE ) )
        std::println( "[+] Successfully wrote to memory!" );
    else
        std::println( "[!] Failed to write to memory!" );

    return 0;
}

Come modificare la protezione della memoria di una regione di memoria nel kernel

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto pid = int32_t( 0x1337);
    const auto address = std::uintptr_t( 0xDEADBEEF );
    constexpr auto PROT_READ = 0x01;
    constexpr auto PROT_WRITE = 0x02;
    constexpr auto PROT_EXEC = 0x04;

    if( KernelMemory::change_memory_protection( pid, address, 0x420, PROT_READ | PROT_WRITE | PROT_EXEC ) )
        std::println( "[+] Successfully changed memory protection!" );
    else
        std::println( "[!] Failed change memory protection!" );

    return 0;
}

Come recuperare un processo in base al suo pid

#include "kernel_memory.hpp"
#include <print>

int main()
{
    const auto process = KernelMemory::get_process( 0x1337 );

    std::println( "[+] process: {:X}", process );

    return 0;
}

Download: Source code Nihonium

Fonte: x.com

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.