Pyhton Script in PHP portieren

Das mit dem Seed hast du irgendwie alles durcheinander geworfen.
1.
Zuerst sendest du mit _send_hello_request.
Dann wartest du viel zu kurz auf den Seed. Der wird in einer ms nicht da sein.
Das musst du anders lösen, z.b. zuerst den Buffer Seed leeren und nach _send_hello_request warten bis er nicht mehr leer ist.
2.
Im ReceiveData wird der Seed mit 16 Byte rausgeschnitten, aber nie in den Buffer geschrieben. Das soll bei Default: passieren. Und nur wenn es nicht 16 Byte sind ihn mit Nullbytes auffüllen.
3.
Im _send_handshake_request übergibst du direkt den Seed aus dem Buffer. Also ist das str_pad hinfällig. Ebenso wird der Seed aus dem Buffer falsch / leer sein oder von einem vorherigen Versuch sein, da du nie auf den richtigen Seed gewartet hast.

Michael

Hallo Michael,

aber genau pcco kommt auch zurück.

TXT: 08.02.2018 18:13:49.00 |       TX MSG Length: | 28
HEX: 08.02.2018 18:13:49.00 |       TX MSG Length: | 32 38 
TXT: 08.02.2018 18:13:49.00 |              TX MSG: | <FS><NUL><NUL><NUL>pcco<NUL><NUL><STX><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL>
HEX: 08.02.2018 18:13:49.00 |              TX MSG: | 1C 00 00 00 70 63 63 6F 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
TXT: 08.02.2018 18:13:49.00 | TX MSG crypted Length: | 28
HEX: 08.02.2018 18:13:49.00 | TX MSG crypted Length: | 32 38 
TXT: 08.02.2018 18:13:49.00 |      TX MSG crypted: | <FS><NUL><NUL><NUL>pcco<NUL><NUL><STX><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL>
HEX: 08.02.2018 18:13:49.00 |      TX MSG crypted: | 1C 00 00 00 70 63 63 6F 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
TXT: 08.02.2018 18:13:49.00 |   Receive JSONString | {"DataID":"{018EF6B5-AB94-40C6-AA53-46943E824ACF}","Buffer":"$\u0000\u0000\u0000pcco\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000[√?RQ√?¬ù\u001C\u000E√µ:\r\u00100√™¬?¬®"}
HEX: 08.02.2018 18:13:49.00 |   Receive JSONString | 7B 22 44 61 74 61 49 44 22 3A 22 7B 30 31 38 45 46 36 42 35 2D 41 42 39 34 2D 34 30 43 36 2D 41 41 35 33 2D 34 36 39 34 33 45 38 32 34 41 43 46 7D 22 2C 22 42 75 66 66 65 72 22 3A 22 24 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 30 70 63 63 6F 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 32 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 31 5C 75 30 30 30 30 5C 75 30 30 30 30 5C 75 30 30 30 30 5B C3 91 52 51 C3 88 C2 9D 5C 75 30 30 31 43 5C 75 30 30 30 45 C3 B5 3A 5C 72 5C 75 30 30 31 30 30 C3 AA C2 96 C2 A8 22 7D 
TXT: 08.02.2018 18:13:49.00 | Hello Request Answer | pcco
HEX: 08.02.2018 18:13:49.00 | Hello Request Answer | 70 63 63 6F 
TXT: 08.02.2018 18:13:49.00 |                 Seed | [—RQ»ù<FS><SO>ı:<CR><DLE>0Í?®
HEX: 08.02.2018 18:13:49.00 |                 Seed | 5B D1 52 51 C8 9D 1C 0E F5 3A 0D 10 30 EA 96 A8 
TXT: 08.02.2018 18:13:50.00 |         Connect Seed | False
HEX: 08.02.2018 18:13:50.00 |         Connect Seed | 46 61 6C 73 65 
TXT: 08.02.2018 18:13:50.00 |       TX MSG Length: | 269
HEX: 08.02.2018 18:13:50.00 |       TX MSG Length: | 32 36 39 
TXT: 08.02.2018 18:13:50.00 |              TX MSG: | <CAN><SOH><NUL><NUL> <NUL><NUL><NUL>z<STX>ÔŸU.◊<DLE>*`?&lt;FS&gt;Yk§‰&lt;ESC&gt;C&lt;SOH&gt;≥r«S@÷[?Ì7Jt???√?&lt;o˙{∂&lt;CAN&gt;;&lt;SUB&gt;®[À&lt;BS&gt;&lt;VT&gt;ߧfi&lt;SOH&gt;µ›Ÿø&lt;SO&gt;¨9&lt;ACK&gt;vR™∏ϺO&lt;ETX&gt;4kÍ&lt;ESC&gt;‹∆&lt;FS&gt;êwxJ?ÆY©®Å†&lt;VT&gt;'&lt;VT&gt;&lt;SO&gt;?œ[SwD?0Ëm?0?ÁO(_ç∫&lt;FF&gt;W?&lt;DC3&gt;NJ&lt;DEL&gt;Ôê]†&lt;DC2&gt;&lt;SUB&gt;{º&lt;DEL&gt;ˆ:&lt;BEL&gt;π^txÁ&lt;CR&gt;????Ì-&lt;RS&gt;øF%π?xlÛ&lt;DC3&gt;Zdçfi"}Li,§?N?&lt;l∞∞&lt;CR&gt;*&lt;DC1&gt;«&lt;DLE&gt;&lt;STX&gt;êu&lt;Y&lt;FS&gt;Ω?«ˆÔr&lt;BS&gt; KÅ}≤DTÔ˛¡[Ò*´\G?“z∆u¨&lt;US&gt;W€†?&lt;GS&gt;£;&lt;DC3&gt;2VøÓS4&lt;US&gt;€Ufi∂&lt;SOH&gt;&lt;US&gt;&lt;HT&gt;???Y&gt;Á7∆U&lt;ESC&gt;F?W?j¨6~7Õ.[&gt;£False
HEX: 08.02.2018 18:13:50.00 |              TX MSG: | 18 01 00 00 20 00 00 00 7A 02 EF D9 55 2E D7 10 2A 60 9B 1C 59 6B A4 E4 1B 43 01 B3 72 C7 53 40 D6 5B 9E ED 37 4A 74 9F 80 96 C3 9A 3C F0 6F FA 7B B6 18 3B 1A A8 5B CB 08 0B A7 A4 DE 01 B5 DD D9 BF 0E AC 39 06 76 52 AA B8 EC BC 4F 03 34 6B EA 1B DC C6 1C 90 77 78 4A 87 AE 59 A9 A8 81 A0 0B 27 0B 0E 85 CF 5B 53 77 44 8E 30 E8 6D 9C 30 85 E7 4F 28 5F 8D BA 0C 57 96 13 4E 4A 7F EF 90 5D A0 12 1A 7B BC 7F F6 3A 07 B9 5E 74 78 E7 0D 86 87 8C 84 ED 2D 1E BF 46 25 B9 88 78 6C F3 13 5A 64 8D DE 22 7D 4C 69 2C A4 8C 4E 87 3C 6C B0 B0 0D 2A 11 C7 10 02 90 75 3C 59 1C BD 82 C7 F6 EF 72 08 CA 4B 81 7D B2 44 54 EF FE C1 5B F1 2A AB 5C 47 94 D2 7A C6 75 AC 1F 57 DB A0 8A 1D A3 3B 13 32 56 BF EE 53 34 1F DB 55 DE B6 01 1F 09 8E 9B 89 59 3E E7 37 C6 55 1B 46 87 57 89 6A AC 36 7E 37 CD 2E 5B 3E A3 46 61 6C 73 65 
TXT: 08.02.2018 18:13:50.00 | TX MSG crypted Length: | 269
HEX: 08.02.2018 18:13:50.00 | TX MSG crypted Length: | 32 36 39 
TXT: 08.02.2018 18:13:50.00 |      TX MSG crypted: | &lt;CAN&gt;&lt;SOH&gt;&lt;NUL&gt;&lt;NUL&gt; &lt;NUL&gt;&lt;NUL&gt;&lt;NUL&gt;z&lt;STX&gt;ÔŸU.◊&lt;DLE&gt;*`?<FS>Yk§‰<ESC>C<SOH>≥r«S@÷[?Ì7Jt???√?<o˙{∂<CAN>;<SUB>®[À<BS><VT>ߧfi<SOH>µ›Ÿø<SO>¨9<ACK>vR™∏ϺO<ETX>4kÍ<ESC>‹∆<FS>êwxJ?ÆY©®Å†<VT>'<VT><SO>?œ[SwD?0Ëm?0?ÁO(_ç∫<FF>W?<DC3>NJ<DEL>Ôê]†<DC2><SUB>{º<DEL>ˆ:<BEL>π^txÁ<CR>????Ì-<RS>øF%π?xlÛ<DC3>Zdçfi"}Li,§?N?<l∞∞<CR>*<DC1>«<DLE><STX>êu<Y<FS>Ω?«ˆÔr<BS> KÅ}≤DTÔ˛¡[Ò*´\G?“z∆u¨<US>W€†?<GS>£;<DC3>2VøÓS4<US>€Ufi∂<SOH><US><HT>???Y>Á7∆U<ESC>F?W?j¨6~7Õ.[>£False
HEX: 08.02.2018 18:13:50.00 |      TX MSG crypted: | 18 01 00 00 20 00 00 00 7A 02 EF D9 55 2E D7 10 2A 60 9B 1C 59 6B A4 E4 1B 43 01 B3 72 C7 53 40 D6 5B 9E ED 37 4A 74 9F 80 96 C3 9A 3C F0 6F FA 7B B6 18 3B 1A A8 5B CB 08 0B A7 A4 DE 01 B5 DD D9 BF 0E AC 39 06 76 52 AA B8 EC BC 4F 03 34 6B EA 1B DC C6 1C 90 77 78 4A 87 AE 59 A9 A8 81 A0 0B 27 0B 0E 85 CF 5B 53 77 44 8E 30 E8 6D 9C 30 85 E7 4F 28 5F 8D BA 0C 57 96 13 4E 4A 7F EF 90 5D A0 12 1A 7B BC 7F F6 3A 07 B9 5E 74 78 E7 0D 86 87 8C 84 ED 2D 1E BF 46 25 B9 88 78 6C F3 13 5A 64 8D DE 22 7D 4C 69 2C A4 8C 4E 87 3C 6C B0 B0 0D 2A 11 C7 10 02 90 75 3C 59 1C BD 82 C7 F6 EF 72 08 CA 4B 81 7D B2 44 54 EF FE C1 5B F1 2A AB 5C 47 94 D2 7A C6 75 AC 1F 57 DB A0 8A 1D A3 3B 13 32 56 BF EE 53 34 1F DB 55 DE B6 01 1F 09 8E 9B 89 59 3E E7 37 C6 55 1B 46 87 57 89 6A AC 36 7E 37 CD 2E 5B 3E A3 46 61 6C 73 65 

Oder sehe ich langsam Gespenster…

Grüße,
Kai

Ja… :wink:
Okay also wird mit pcco geantwortet.
Der Rest von oben gilt aber weiter.
Siehst du auch in deinem Debug:
Connect Seed enthält als String ‚false‘.
Siehst du auch beim senden im Debug:

TXT: 08.02.2018 18:13:50.00 | TX MSG crypted: | …False
Tip: Verwende SendDebug anders. Nicht gemischt das JSON und Klartext und Binär ausgeben.
Hier ist es besser den Datenstrom decodiert auszugeben, dann findet man auch die Nutzdaten wieder in allen Ausgaben.

Michael

Hallo Michael,

danke.
Also mache ich das substr im pcco Case.

$Seed = substr($Payload,12,16);
$this->SetBuffer("Seed", $Seed);

In der connect Funktion setze ich den Buffer vorher auf auf leer.

$this->SetBuffer("Seed", "");

Und warte mit einer while Schliefe so lange bis er voll ist?! Ich hab da irgendwie angst einer Dauerschleife zu bauen…
Gibt es da eine andere bzw. bessere Lösung?

Edit: Wobei jetzt wo das substr im pcco Case ist, hat er den Buffer schon voll, an der Stelle im Connect.

Grüße,
Kai

Dennoch ist eine ms zu kurz.
Statische Zeiten sind einfach Quark.
While nutze ich auch nicht.
Ich habe da eine klassische for von 0 bis 500 mit 5ms Sleep.
IPSNetwork/module.php at 707e3a1b36c4efa069fc7cb3604ab10112e57d82 · Nall-chan/IPSNetwork · GitHub

Somit wird max 2,5 Sekunden auf eine Antwort gewartet sonst Abbruch.

Jetzt hast du im ReceiveData das hier dreimal drinnen:
$Seed = substr($Payload,12,16);

Und mach eine Debugausgabe der unverschlüsselten Daten beim senden.
Das Paket ist auf jeden Fall kaputt, da du str_pad falsch benutzt.
Die Funktion hat einen Rückgabewert und ändert nicht das Original :wink:
http://php.net/manual/de/function.str-pad.php
Michael

Danke, die Funktion schaue ich mir an.
Aber ich denke ich habe Iwo noch Fehler bei den Paketen.
Sobald ein Pakete abgeschickt wird, verliert der Socket die Verbindung zur PS4.

Das substr habe ich nur noch im pcco Case.

Grüße,
Kai

Hallo,

so hab nochmal im Github was geändert.
Die Pakete (zumindest Login) dürften so passen, habe in dem Python Script ein Test (python-ps4/test_connection.py at master · hthiery/python-ps4 · GitHub) gefunden, da sieht man die Pakete von einigen Funktionen.

Der Verbindung bricht allerdings sofort ab wenn ich das Login Paket schicke.

Grüße,
Kai

Hallo,

ich habe eben folgende Nachricht von dem Entwickler bekommen, der es in NodeJS umgesetzt hat…

  1. You send unencrypted CHello („client hello“)
  2. PS4 responds with unencrypted SHello („server hello“)
  3. The SHello packet contains the server’s „seed“ that you use to configure crypto. You then use the PS4’s public key to encrypt your client „seed“ and include the encrypted seed in your response (as well as the server’s „seed“).
  4. AFTER sending the handshake packet, everything MUST be encrypted/decrypted.

Meiner Meinung tu ich das ja jetzt. Oder hab ich noch irgendwo etwas übersehen?

Grüße,
Kai

Ich versuche das irgendwie nach zu vollziehen.
Dazu brauche ich aber die Daten.
Ich sehe du hast jetzt bei ReceiveData eine Ausgabe der utf8decodierten Daten eingebaut.

Dies und das Debug aus dem socket würde mit helfen :slight_smile:

Aktuell kann ich noch nicht mal das Ende vom Paket finden :frowning:

Auch gerne per PN wenn du irgendwelche Daten hast, welche nicht jeder sehen soll.

Michael

PS: Einen Fork habe ich mit schon mal gezogen :wink:

Hallo Michael,

du bist einfach zu gut für diese Welt. :slight_smile: :stuck_out_tongue:
Ich schicke dir jetzt gleich folgenden Dump nach folgenden Funktionsaufrufen:

[ul]
[li]Connect inkl. Handshake
[/li][li]Send Login Package
[/li][/ul]

Gerne kannst du auch Live an meiner Playsi gucken, wenn du möchtest.

Grüße,
Kai