Rpcs3: Add documentation to quickstart for decrypting under Linux

Created on 30 Oct 2018  路  8Comments  路  Source: RPCS3/rpcs3

The current docs focus on working from a Windows perspective, but I've figured out how to do so under Linux. The patching is fine via Wine, the only difficulty is decryption.

The tool to download is https://web.archive.org/web/20140820195811/http://www.3k3y.com/IsoTools/IsoTools-1.34.7.msi. Run under Wine and install the software, then run wineconsole in the terminal. Cd to ~/.wine/drive_c/Program Files (x86)/IsoTools, and run isotoolscon.exe crypt -i Z:/path/to/game/file.iso and wait for it to finish.

EDIT: you run into the possibility of running into this:

Game ID: BCUS-98259                                                                           Processing plain region 0 (00-8BF)                                                            Processing decrypted region 1 (8C0-3E1EFF)                                                    [----                                                           ] ETA: 0:08:28[E              RROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference               not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0
Processing plain region 0 (00-8BF)                                                            Processing decrypted region 1 (8C0-3E1EFF)                                                    [----                                                           ] ETA: 0:08:28[E              RROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference               not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74
Processing decrypted region 1 (8C0-3E1EFF)                                                    [----                                                           ] ETA: 0:08:28[E              RROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference               not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0
[----                                                           ] ETA: 0:08:28[E              RROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference               not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9
RROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference               not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0
 not set to an instance of an object                                                            at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [
  at System.Threading.Tasks.Task.FinishContinuations () [0x000a5] in <773ec02b42              f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0
f74a918ccd74911c8063c9>:0                                                                       at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.
  at System.Threading.Tasks.Task.FinishStageThree () [0x0003c] in <773ec02b42f74              a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0
a918ccd74911c8063c9>:0                                                                          at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec
  at System.Threading.Tasks.Task.FinishStageTwo () [0x000d4] in <773ec02b42f74a9              18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0
18ccd74911c8063c9>:0                                                                            at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor
  at System.Threading.Tasks.Task.Finish (System.Boolean bUserDelegateExecuted) [              0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0
0x00036] in <773ec02b42f74a918ccd74911c8063c9>:0                                                at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7
  at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.              Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0
Task& currentTaskSlot) [0x00067] in <773ec02b42f74a918ccd74911c8063c9>:0                        at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i
  at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExec              ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
ution) [0x00058] in <773ec02b42f74a918ccd74911c8063c9>:0                                        at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
  at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWor              kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
kItem () [0x00000] in <773ec02b42f74a918ccd74911c8063c9>:0                                      at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
  at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <773ec02b42f7              4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
4a918ccd74911c8063c9>:0                                                                         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
  at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] i              n <773ec02b42f74a918ccd74911c8063c9>:0
n <773ec02b42f74a918ccd74911c8063c9>:0
Discussion Linux

Most helpful comment

Decryption using IRD file is really simple. Relying on forum-released non open-source software for doing this is kinda sad.

Moreover, the tutorial makes it a lot more complicated than it should be, relying on three different softwares. It's actually a lot simpler (especially on UNIX-ish systems). You have to:

  1. decrypt from /dev/sdaXX to a temporary file (deriving the disc encryption key from data1 found in the IRD file);
  2. mount the resulting image;
  3. either directly run the game from the mount point or copy the files of the mount point to your HDD/SSD.

I don't get why the official tutorial need both PS3 ISO Patcher and 3k3y IsoTools.

All 8 comments

  1. Quickstart guide links to the portable latest version of IsoTools, which you can run with mono

  2. You probably meant to file this to the website project

When you say "run with mono," do you mean install the Windows version of mono under Wine or is there something else?

I just wanted to put it somewhere that could access documentation. Once I get this figured out I'll post the issue over there.

You can run .net applications with mono even if it's a .exe

@hch12907 what version of mono are you using? Both before and after compiling to native I just get a black screen.

Decryption using IRD file is really simple. Relying on forum-released non open-source software for doing this is kinda sad.

Moreover, the tutorial makes it a lot more complicated than it should be, relying on three different softwares. It's actually a lot simpler (especially on UNIX-ish systems). You have to:

  1. decrypt from /dev/sdaXX to a temporary file (deriving the disc encryption key from data1 found in the IRD file);
  2. mount the resulting image;
  3. either directly run the game from the mount point or copy the files of the mount point to your HDD/SSD.

I don't get why the official tutorial need both PS3 ISO Patcher and 3k3y IsoTools.

I think I accidentally added a negative reaction, but thank you, @randomstuff! I'll take a stab at it some time over the weekend.

EDIT: Can you explain to me which files to decrypt and what commands need to be sent? I'm trying to parse the page you put in, but I don't usually touch encryption stuff.

The encryption happens at the disc-image/sector level. Not at the file level.

The SCSI commands are only useful for deriving the encryption data from the disc (you apparently need a special BD drive for that). Otherwise you can use the data from the IRD file of the disc.

Quickstart contains instructions for using LibRay on Linux, and the PS3 Disc Dumper now has a Linux version too, closing as solved

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Asinin3 picture Asinin3  路  3Comments

AniLeo picture AniLeo  路  3Comments

kurosh10000 picture kurosh10000  路  3Comments

AniLeo picture AniLeo  路  3Comments

Luffykun007 picture Luffykun007  路  3Comments