PS3 [Research] LINK.XML information

Fired up IDA & analysed the plugin but there seems to be no direct cross reference to the "webkit" string in the disassembled sprx so it's harder to find the location of the code that uses it & what it does with it.

However I noticed that the string was located with other strings coherent with the parsing task at hand. So you get the opening & closing tag characters < & > for instance as well as the expected tags. Those tags appear to be very few, with the available parts, I could only make 4 possible tags:
<url>, <link>, <webkit> & <cntry>

Finding out more would require digging deeper.
 
Fired up IDA & analysed the plugin but there seems to be no direct cross reference to the "webkit" string in the disassembled sprx so it's harder to find the location of the code that uses it & what it does with it.

However I noticed that the string was located with other strings coherent with the parsing task at hand. So you get the opening & closing tag characters < & > for instance as well as the expected tags. Those tags appear to be very few, with the available parts, I could only make 4 possible tags:
<url>, <link>, <webkit> & <cntry>

Finding out more would require digging deeper.

Oh, well thanks for checking.

I noticed cntry, and I had a bit of mess with it but I had no luck. I was just trying things like
Code:
<cntry>us</cntry>

Then seeing if it would only show with the language set to US. no luck with that but hard to know what it expects.
@DeViL303
Have you tried a boolean value for the webkit tag?
Or something along those lines?
I do not actually know what that means :) So probably not.

You mean like true and false? I did try 0, 1 and 2.
 
Just tried
Code:
<link ver="1.0">
<webkit>false</webkit>
<url>javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

and

Code:
<link ver="1.0">
<webkit>true</webkit>
<url>javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

No luck :(, it still uses webbrowser_plugin, I can tell cos an mp4 link still streams rather than downloads. And JS is not read.
 
For sure. Now that I think about I might have the syntax wrong altogether.

It could even be like <webkit=xxxx>, with no closing tag. I have seen things like this before. This opens up another load of tests. What made me think of this is the fact that there is no "=" or "/" mentioned in the sprx, but they are obviously allowed as they are in the the link entry.
 
Like this:

cntry checked only on url
Code:
<url cntry="us">http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>

webkit checked only in link
Code:
<link webkit>http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</link>

Interesting, So it seems like webbrowser_plugin really is the crap one. Strange that is also the one that can stream videos but anyway that is not important, just worth noting when you actually want to stream a video.
webbrowser_plugin is limited and uses less resources which means that there is more free memory and video playing performance will be much better. webkit is used to open the link in the this browser so it perform better like if they wanted to just stream they would use webkit tag.


It saves 96 bytes per line (I only could take off 2 lines due the "info" pair is variable).
So in 300 games it will save 28KB of memory and processing.
A bit more if you replace ps2_base with pb
 
Like this:

cntry checked only on url
Code:
<url cntry="us">http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
Cool thanks.

This one seems to not work, but it is possible that "us" is not an accepted value, it does look like it could be the right syntax though or very close. It just shows "this service has ended", same like if I forgot to add a tag.

webkit checked only in link
Code:
<link webkit>http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</link>
This one I am not so sure about. It does not look right really and does not work. It just shows "this service has ended", same like if I forgot to add a tag.

It did make me realize that the ver="1.0" is not required.

So this works as normal:
Code:
<link>
<url>http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
</link>

Just the same as
Code:
<link ver="1.0">
<url>http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
</link>

I think what you said could be very close though. I will try some more variations. Maybe the cntry and webkit need adding to the closing tags too, idk.
 
Ha, savage I got it. @NewFile you were right. It just needed a little tweaking.

Code:
<link ver="1.0" webkit="1">
<url>javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

This works.

I tried loads of values, like "webrender_plugin", "silk" etc etc, then tried "1" and it works. :D


Awesome stuff, this opens up loads of possibilities, installable exploits etc. Thanks for the help guys.
 
Like this:

cntry checked only on url
Code:
<url cntry="us">http://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
Ha, and this is right after all. The reason it was not working is that this is not tied to the system language, its tied to the PSN account country.

So I clicked on whats new, and chose US as the country, and now it works with "US". Great stuff.

Code:
<link ver="1.0" webkit="1">
<url cntry="us">javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

so now multi language options are possible. For example different webpage depending on language settings. So we could have an installable HEN enabler, with different languages for every country.

This works, I have webkit set to 0 here so they stream. Changing it to 1 makes them download like expected.
Code:
<link ver="1.0" webkit="0">
<url cntry="us">https://dl.dropboxusercontent.com/s/b6ofyx5po57maum/glitter.mp4</url>
<url cntry="gb">https://dl.dropboxusercontent.com/s/trau85djme72s1p/glitter2.mp4</url>
<url cntry="ie">https://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
<url>https://dl.dropboxusercontent.com/s/oueptuzkbp1j09x/tunnel.mp4</url>
</link>

You can also have one url added with no cntry, so this can be a fallback option incase the user has no PSN country set up.
 
Last edited:
include may be adding raw text instead of tags so worth a try

Code:
<Table key="pb">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

<Table key="pm">
<String><String>/mount_ps3/dev_hdd0/PS2ISO/</String>
</Table>

<Table key="0043" include="pb">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action" include="pm">Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
 
include may be adding raw text instead of tags so worth a try

Code:
<Table key="pb">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

<Table key="pm">
<String><String>/mount_ps3/dev_hdd0/PS2ISO/</String>
</Table>

<Table key="0043" include="pb">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action" include="pm">Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>
Interesting, you could be right. I will do some tests tomorrow, or today I mean. 6am here. :)
 
Ha, savage I got it. @NewFile you were right. It just needed a little tweaking.

Code:
<link ver="1.0" webkit="1">
<url>javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

This works.

I tried loads of values, like "webrender_plugin", "silk" etc etc, then tried "1" and it works. :D


Awesome stuff, this opens up loads of possibilities, installable exploits etc. Thanks for the help guys.

Just tested it and now my shortcuts works as expected, thanks
 
Ha, and this is right after all. The reason it was not working is that this is not tied to the system language, its tied to the PSN account country.

So I clicked on whats new, and chose US as the country, and now it works with "US". Great stuff.

Code:
<link ver="1.0" webkit="1">
<url cntry="us">javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

so now multi language options are possible. For example different webpage depending on language settings. So we could have an installable HEN enabler, with different languages for every country.

This works, I have webkit set to 0 here so they stream. Changing it to 1 makes them download like expected.
Code:
<link ver="1.0" webkit="0">
<url cntry="us">https://dl.dropboxusercontent.com/s/b6ofyx5po57maum/glitter.mp4</url>
<url cntry="gb">https://dl.dropboxusercontent.com/s/trau85djme72s1p/glitter2.mp4</url>
<url cntry="ie">https://dl.dropboxusercontent.com/s/fqz3nbwfs2bl5w3/flyinglight.mp4</url>
<url>https://dl.dropboxusercontent.com/s/oueptuzkbp1j09x/tunnel.mp4</url>
</link>

You can also have one url added with no cntry, so this can be a fallback option incase the user has no PSN country set up.


Maybe lang="#number" can be also accepted?
 
The only thing I am still curious about when it comes to LINK.XML is the ; and & and ' seen here.

upload_2021-2-21_16-10-37-png.31467


Probably not important, maybe just some way of adding arguments after the URL or something. but anyway that is the only thing left that might be interesting.
 
Ha, savage I got it. @NewFile you were right. It just needed a little tweaking.

Code:
<link ver="1.0" webkit="1">
<url>javascript:eval('document.write(\47\74style\76html{left:100%;position:relative;overflow:hidden;}\74/style\76\74input autofocus type="radio" style="position:fixed;right:0;bottom:0;width:20px;height:20px;opacity:0"\76\47)');</url>
</link>

This works.

I tried loads of values, like "webrender_plugin", "silk" etc etc, then tried "1" and it works. :D


Awesome stuff, this opens up loads of possibilities, installable exploits etc. Thanks for the help guys.

WOW :eek: This is an awesome discovery! Now we're in control of which plugin we can use in LINK.XML

I also was thinking webkit could be an attribute, but never thought about adding it to the tag <link>.

Thanks @DeViL303, @NewFile, @bguerville for your help.

The only thing I am still curious about when it comes to LINK.XML is the ; and & and ' seen here.

Probably not important, maybe just some way of adding arguments after the URL or something. but anyway that is the only thing left that might be interesting.

These probably are used for internal validations during the parsing of the XML. I don't think they could provide any interest function.

include may be adding raw text instead of tags so worth a try

Code:
<Table key="pb">
<Pair key="module_name"><String>idle_plugin</String></Pair>
<Pair key="bar_action"><String>none</String></Pair>
<Pair key="info"><String>/dev_hdd0/PS2ISO</String></Pair>
</Table>

<Table key="pm">
<String><String>/mount_ps3/dev_hdd0/PS2ISO/</String>
</Table>

<Table key="0043" include="pb">
<Pair key="icon"><String>/dev_hdd0/PS2ISO/Grand Theft Auto - Liberty City Stories.jpg</String></Pair>
<Pair key="title"><String>Grand Theft Auto - Liberty City Stories</String></Pair>
<Pair key="module_action" include="pm">Grand+Theft+Auto+-+Liberty+City+Stories.ISO</String></Pair>
</Table>

I found something interesting here, at least for the generation of mygames.xml in wMM

The tags <String> and </String> can be reduced to <> and </> respectively like this:
Code:
<Table key="inc">
<Pair key="module_name"><>idle_plugin</></Pair>
<Pair key="bar_action"><>none</></Pair>
</Table>

This saves 12 bytes per pair or 48 bytes per game entry (each game is using 4 pairs).
With the include it saves 144 bytes per game entry. In 300 games it saves 42KB of memory and text processing.
 
Back
Top