[PS4]Rilasciato PS4 Remote Play InterceptorTempo di lettura : 4 min

Lo sviluppatore komefai ha rilasciato una piccola libreria per l’applicazione della riproduzione remota PS4 su PC dal titolo PS4 Remote Play Interceptor.Con PS4 Remote Play Interceptor è possibile intercettare e iniettare dei controlli personalizzati su PS4 Remote Play per Windows e automatizzarli sottoforma di bot grazie all’utilizzo della libreria EasyHook. La riproduzione remota della PS4 non accetta gli ingressi di terze parti, tranne che per il loro controller DualShock 4 e alcune chiavi per emulare il D-Pad dalla tastiera e questo tool è un modo efficace per automatizzare compiti noiosi come nel gioco  GTA Online senza scrivere un sacco di codice o hardware aggiuntivo. Tuttavia, un piccolo svantaggio di questo metodo è che il controller deve essere sempre collegato via USB. Abbiamo tradotto l’intero tutorial in italiano(qualche piccolo errore è presente),richiede una piccola esperienza sull’utilizzo di Visual Studio e qualche modifica al codice.

TEST

GUIDA

In questo tutorial, creeremo un bot della PlayStation 4 in C # utilizzando EasyHook. Alla fine di questo tutorial, sarai in grado di automatizzare i controlli in qualsiasi gioco PS4 tramite PS4 Remote Play .

Il motivo per cui ho creato questo tutorial è perché non ho trovato alcuna libreria o tutorial su questo argomento. La riproduzione remota PS4 non accetta gli ingressi di terze parti, tranne che per il loro controller DualShock 4 e alcune chiavi per emulare il D-Pad dalla tastiera. Per quanto ne so la PS4 non è ancora facilmente agganciata in questo momento, quindi è probabilmente un modo efficace per automatizzare compiti noiosi come nel gioco  GTA Online senza scrivere un sacco di codice o hardware hacking. Tuttavia, un piccolo svantaggio di questo metodo è che il controller deve essere sempre collegato via USB.

Perché EasyHook?

EasyHook è una libreria molto utile che ci permette di collegare API di Windows all’interno di C # con poche righe di codice. Anche se la riproduzione remota PS4 è stata creata su .NET WinForms, ma la maggior parte delle funzionalità principali sono legate a RpCtrlWrapper.dll che è una DLL nativa. Tuttavia, il controller è stato trattato come un qualsiasi altro dispositivo HID USB che utilizza Windows kernel32.dll. Quindi, invece di cercare di passare attraverso il codice ofuscato o l’assembly nativo decompilato, possiamo invece attaccare da un’API a basso livello. Questo è dove EasyHook diventa la parte più importante di questo progetto.

Inoltre viene fornito un tutorial del progetto denominato RemoteFileMonitor che registra tutte le funzioni di CreateFileW, ReadFile e WriteFile. Queste funzioni li useremo per intercettare e manipolare tutti i dati inviati dal controller DualShock. Utilizzeremo per questo tutorial solo la funzione ReadFile. Questo diagramma mostra come intercettare la riproduzione remota.

Cominciamo

Scaricare o clonare i progetti del tutorial di EasyHook da questo repository e aprire EasyHook-Tutorials-master/Unmanged/RemoteFileMonitor.slnin Visual Studio.

È possibile compilare ed eseguire il progetto dopo aver ripristinato i pacchetti NuGet. Il programma chiede il PID per i processi in esecuzione, e in questo caso PS4 Remote Play che  è il nostro obiettivo.

Per trovare il task PID aperto e individuare il processo di riproduzione remota PS4 fare clic con il pulsante destro del mouse sul processo e selezionare Go to details. Saranno visualizzati i dettagli del processo che mostrano il PID.

La console verrà inondata, per lo più con le funzioni di ReadFile e di CreateFile. Notate che i dati sono a 64 byte e hanno un nome del file vuoto, questo sarà importante in seguito.

 

Data format

A questo punto abbiamo i dati nelle nostre mani, ma non sappiamo cosa significhi ancora. Fortunatamente, c’è questa pagina wiki di PSDevWiki che ha la maggior parte delle informazioni sul protocollo USB dei controller DualShock 4 da altre fonti. È possibile trovare un esempio dei dati nella sezione Struttura report della pagina wiki.

Come potete vedere ,la dimensione del report è 64 byte come abbiamo intercettato in precedenza. Sarà inoltre l’intestazione del report 0x01l’ID del report.

Possiamo utilizzare qualsiasi combinazione di controlli con queste informazioni, ma per questo tutorial, utilizzeremo  l’obiettivo più semplice e far progredire il bot. Quindi, secondo il Data Format, dobbiamo impostare l’indice di byte [2] a 0 per permettere allo stick analogico di spostarsi verso l’alto.

Modifica del FileMonitor

Ci sono due file che dobbiamo tenere d’occhio. Questi sono ServerInterface.csInjectionEntryPoint.csnel progetto FileMonitorHook.

 

ServerInterface.cs

Dobbiamo rimuovere i log della console da questa classe perché possono competere con l’iniezione in quanto entrambi vengono chiamati rapidamente. Le eccezioni sono IsIntalledReportExceptionperché sono raramente chiamati, e sono utili per noi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void IsInstalled(int clientPID)
{
Console.WriteLine(“FileMonitor has injected FileMonitorHook into process {0}.\r\n”, clientPID);
}
/// <summary>
/// Output the message to the console.
/// </summary>
/// <param name=”fileNames”></param>
public void ReportMessages(string[] messages)
{
}
public void ReportMessage(string message)
{
}
/// <summary>
/// Report exception
/// </summary>
/// <param name=”e”></param>
public void ReportException(Exception e)
{
Console.WriteLine(“The target process has reported an error:\r\n” + e.ToString());
}
/// <summary>
/// Called to confirm that the IPC channel is still open / host application has not closed
/// </summary>
public void Ping()
{
}

InjectionEntryPoint.cs

Ignoriamo altre implementazioni di hook eccetto ReadFile, quindi scorri verso il basso fino a trovare la stringa ReadFile Hook. Modificheremo solo il ReadFile_Hook()metodo per manipolare i dati anziché le registrazione delle informazioni su di esso. Tutto questo blocco di codice permette di verificare se i dati che abbiamo intercettato sono i dati “probabili” che stiamo cercando, quindi continuiamo a modificare i dati. Tuttavia, per modificare i dati dobbiamo utilizzare codice non sicuro, che ci permetterà di convertire lpBufferin byte*. Da lì,la variabile byte*può essere raggiunta dall’ indice  byte[].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// <summary>
/// The ReadFile hook function. This will be called instead of the original ReadFile once hooked.
/// </summary>
/// <param name=”hFile”></param>
/// <param name=”lpBuffer”></param>
/// <param name=”nNumberOfBytesToRead”></param>
/// <param name=”lpNumberOfBytesRead”></param>
/// <param name=”lpOverlapped”></param>
/// <returns></returns>
bool ReadFile_Hook(
IntPtr hFile,
IntPtr lpBuffer,
uint nNumberOfBytesToRead,
out uint lpNumberOfBytesRead,
IntPtr lpOverlapped)
{
bool result = false;
lpNumberOfBytesRead = 0;
// Call original first so we have a value for lpNumberOfBytesRead
result = ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, out lpNumberOfBytesRead, lpOverlapped);
try
{
// Retrieve filename from the file handle
StringBuilder filename = new StringBuilder(255);
GetFinalPathNameByHandle(hFile, filename, 255, 0);
// Check if the data is from the controller
if (string.IsNullOrWhiteSpace(filename.ToString()) && lpNumberOfBytesRead == 64)
{
unsafe
{
// This can be accessed like an array
byte* ptr = (byte*)lpBuffer.ToPointer();
// Check if the header is correct
if (ptr[0] == 0x1)
{
// Move forward
// ptr[2] = 0x0;
// Move backward
ptr[2] = 0xFF;
}
}
}
}
catch
{
// swallow exceptions so that any issues caused by this code do not crash target process
}
return result;
}

Per eliminare l’avviso per l’utilizzo di codice non sicuro, aprire le proprietà del progetto (Alt + Enter). Nella scheda Build, selezionare la casella Allow unsafe code sia per le versioni Debug e quella Release.

Eseguire il programma

Compila la build e prova nuovamente il programma per vedere se il bot entra in azione. Per interrompere l’iniezione, interrompere il programma.

Fonte tutorial

Komefai

hitech CODICE SCONTO G4M3SC0NS0L3S

Ti è piaciuta la notizia? Supporta theheroGAC su Patreon!

theheroGAC

Nato negli anni 80 con la passione dei videogiochi e delle console.Il mio primo home computer è l'Amiga 600 regalato a 10 anni.Amo aiutare le persone in difficoltà e scrivere notizie sulle console.Studio all'università e il sito Games And Consoles è la mia passione.Per gli amici mi potete chiamare Ciccio

Ti potrebbe anche interessare

Rispondi