Software Engineer in Training

There are many tutorials out there on how to re-download P.T. such as here and here, but all of them required Windows-based machines. So this is a simple guide on how to get Hideo Kojima's cancelled Silent Hills demo re-downloaded on a PS4.

REQUIREMENTS

  • A MacOS machine on the same network as the PS4
  • P.T. registered to a PSN account (downloaded at least once)
  • SquidMan (I used version 4.0, but any version should work)

SETUP (MacOS)

Simply install SquidMan on a MacOS machine, open the image and run the application. There is no need to copy the application onto the machine, but you can if you would like to re-use SquidMan for other uses or for future re-downloading of P.T.

Once SquidMan is running, on first run it should open the preferences automatically but if not, in the top left: SquidMan -> Preferences. There is no need to alter anything, just click on the "Template" subheader.

In here, you simply need to paste the following template:

http_port 808

# the parent cache
cache_peer %PARENTPROXY% parent %PARENTPORT% 7 no-query no-digest no-netdb-exchange default

#Ini untuk memaksa DNS ke OpenDNS. Bisa dihapus atau dikasih tanda pagar (#) di depannya. 
dns_nameservers 8.8.8.8 8.8.4.4

# performance options
pipeline_prefetch %PIPELINE_PREFETCH%
cache_miss_revalidate %CACHE_MISS_REVALIDATE%
read_ahead_gap %READ_AHEAD_GAP%
cache_replacement_policy %CACHE_REPLACEMENT_POLICY%
memory_replacement_policy %MEMORY_REPLACEMENT_POLICY%


# disk and memory cache settings
cache_dir ufs %CACHEDIR% %CACHESIZE% 16 256
maximum_object_size %MAXOBJECTSIZE%
cache_mem %MEMCACHESIZE%
maximum_object_size_in_memory %MEMMAXOBJECTSIZE%


# store coredumps in the first cache dir
coredump_dir %CACHEDIR%


# the hostname squid displays in error messages
visible_hostname %VISIBLEHOSTNAME%


# log & process ID file details
cache_access_log stdio:%ACCESSLOG%
cache_store_log stdio:%STORELOG%
cache_log %CACHELOG%
pid_filename %PIDFILE%


# Squid listening port
http_port %PORT%


# Access Control lists
acl manager proto cache_object
acl localnet src 10.0.0.0/8 
acl localnet src 172.16.0.0/12
acl localnet src 192.168.2.0/24
acl localnet src 192.168.1.0/24
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl pkgfile url_regex gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA01127_00/1/f_1818ed1e5995c6e5950f34b9c57faac61a2a63693828d6b9290e8c74e4b9d5cc/f/UP4511-CUSA01127_00-PPPPPPPPTTTTTTTT.json
deny_info http://archive.org/download/studios/studios.json pkgfile

http_reply_access deny pkgfile

acl iconwall url_regex gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA01114_00/1/f_1a12093906541bc35b535b00d2b92966faf18f77e404548377e471f0f7aa8259/f/EP4511-CUSA01114_00-PPPPPPPPTTTTTTTT.json
deny_info http://archive.org/download/yikes_201512/yikes.json iconwall

http_reply_access deny iconwall


# protect web apps running on the proxy host from external users
http_access deny to_localhost


# rules for client access go here
http_access allow manager localhost
http_access allow localhost
http_access allow localnet
http_access allow all
%HTTPACCESSALLOWED%


# after allowed hosts, deny all other access to this proxy
# don't list any other access settings below this point
http_access deny all


# specify which hosts have direct access (bypassing the parent proxy)
%ALWAYSDIRECT%
http_access deny manager
http_access deny !Safe_ports


# refresh patterns (squid-recommended)
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

And that's it! Hit "Save" and then "Start Squid" to start the proxy.

But quick, lastly we need to get the local IP address of the machine. Open terminal and type this command: ifconfig |grep inet. This will print out a chunk of data, but the important line is the one likely starting with inet that is not the localhost IP, 127.0.0.1. This is your local IP address of your machine, that we will need when setting up the PS4.

SETUP (PS4)

Now on the PS4, login to the account that has P.T. already linked to the account. Then we must change some network settings to use the MacOS machine as a proxy. Go to: Settings -> NETWORK Settings -> Set up Internet Connection -> <your type of connection> -> Custom.

You can skip through all the IP address, subnet, DNS, etc settings, by using "Automatic" or "Do Not Specify," The important section is when you get to the proxy settings. Select "use" and type in the following:

- IP Address: <the local address of your MacOS machine, as found above using Terminal>
- Port: 808

Now you can complete the network settings, and the network test at the end should return positive. If you get any messages that it cannot connect, check the IP again carefully, or check through your router to get the machine's correct IP.

RE-DOWNLOADING P.T.

Now it is as simple as going to your Library (very right on the PS4 home screen), finding P.T. in your library and starting the download. If all is well, the download should start and successfully reinstall P.T. on your machine.

Once this is done, you can change the network settings back to automatic/your original setup, since the proxy is not needed anymore. Keeping it connected through the machine shouldn't cause any problems if you so feel, unless you turn off the MacOS machine. It could cause some latency issues in gaming, though, but I have not done any testing.

HOW DOES THIS WORK?

It's quite simple actually! The folks over at archive.org are a huge help here, for hosting the files needed to make this proxy successful. There are two important lines in the template that make this bypass work.

If you check line 59 of the template, you will see this:

acl pkgfile url_regex gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA01127_00/1/f_1818ed1e5995c6e5950f34b9c57faac61a2a63693828d6b9290e8c74e4b9d5cc/f/UP4511-CUSA01127_00-PPPPPPPPTTTTTTTT.json
deny_info http://archive.org/download/studios/studios.json pkgfile

The first link here, hosted on playstation.net is the original package/studio information for P.T. as JSON object. This would include things like the file size, file location, hash value, etc.

Sony has removed this JSON file from their servers, which is why the download now fails without this bypass, so a copy has been mirrored at archive.org. When your PS4 attempts to connect to the original playstation link and returns an error, the proxy captures the denial and instead returns the archive.org link for the JSON file.

If you notice, the link within the JSON to the package is also changed to an archive.org link within their servers. If you were to open that link, you would actually start a download of the package (full game) to your computer! The thing is that you simply cannot install the package on a PS4, it has to be done using licences and decryption which is why P.T. must have been registered to the account.

The next chunk, line 64, is almost identical in how it works.

acl iconwall url_regex gs2.ww.prod.dl.playstation.net/gs2/appkgo/prod/CUSA01114_00/1/f_1a12093906541bc35b535b00d2b92966faf18f77e404548377e471f0f7aa8259/f/EP4511-CUSA01114_00-PPPPPPPPTTTTTTTT.json
deny_info http://archive.org/download/yikes_201512/yikes.json iconwall

Again, it simply captures the denial on the orginal, removed URL and returns a mirrored copy on archive.org's servers.

Even the JSON structure is identical, and it is likely these are just slightly different versions for specific regions on PSN.

CONCLUSION

That is how you download P.T. using a MacOS machine, as well as a small explanation on how this works without causing any bans unlike modding a PS4 console!