221 lines
9.2 KiB
HTML
221 lines
9.2 KiB
HTML
{% extends "konami.html" %}
|
|
{% block title %}Smart E-Amusement{% endblock %}
|
|
{% block body %}
|
|
<h1>Smart E-Amusement</h1>
|
|
<p>So maybe you've turned on that checkbox before, and you're wondering what magic it used? Thankfully, source code for
|
|
that tool is actually shipped along with it (provided you have a legitimate copy) so we can have a look.</p>
|
|
<p>...and that's where the trail runs cold. Upon cracking open the source you will just be faced with walls of hardcoded
|
|
binary data. Let's take a serious look at what we have here instead.</p>
|
|
<p>The first important thing to note is that every single reply from easrv is hardcoded. This means their encryption is
|
|
also hardcoded, and sure enough the header is hardcoded to <code>1-53d121c7-a8b3</code> (in fact, the entire HTTP
|
|
header block is a hardcoded string!).</p>
|
|
<p>Many of these responses are only rqeuired by specific games. I've not yet compiled a list of which is for what game,
|
|
but consider it a future expansion coming later :).</p>
|
|
<h2><code>services.get</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<services>
|
|
<item name="cardmng" url="http://localhost:8080/" />
|
|
<item name="facility" url="http://localhost:8080/" />
|
|
<item name="message" url="http://localhost:8080/" />
|
|
<item name="package" url="http://localhost:8080/" />
|
|
<item name="pcbevent" url="http://localhost:8080/" />
|
|
<item name="pcbtracker" url="http://localhost:8080/" />
|
|
<item name="posevent" url="http://localhost:8080/" />
|
|
<item name="pkglist" url="http://localhost:8080/" />
|
|
<item name="dlstatus" url="http://localhost:8080/" />
|
|
<item name="eacoin" url="http://localhost:8080/" />
|
|
<item name="lobby" url="http://localhost:8080/" />
|
|
<item name="lobby2" url="http://localhost:8080/" />
|
|
<item name="local" url="http://localhost:8080/" />
|
|
<item name="local2" url="http://localhost:8080/" />
|
|
<item name="apsmanager" url="http://localhost:8080/" />
|
|
<item name="netlog" url="http://localhost:8080/" />
|
|
<item name="ntp" url="ntp://pool.ntp.org/" />
|
|
<item name="keepalive" url="http://localhost:8080/keepalive?pa=localhost&ia=localhost&ga=localhost&ma=localhost&t1=2&t2=10" />
|
|
</services>
|
|
</response>{% endhighlight %}</pre>
|
|
<p>Fairly standard response here. Many more services are listed than actually available, but that's fine. The router
|
|
address (<code>ia</code>), gateway (<code>ga</code>) and centre (<code>ma</code>) are all set to
|
|
<code>localhost</code>, ensuring pings succeed.
|
|
</p>
|
|
|
|
<h2><code>pcbtracker.alive</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<pcbtracker ecenable="0" eclimit="0" expire="0" limit="0" status="0" />
|
|
</response>{% endhighlight %}</pre>
|
|
<p>Inform the game we have no intention of supporting PASELI. Implementing PASELI involves implementing carding, and is
|
|
a sizable amount of work. Smart EA exists to start games, not implement all features.</p>
|
|
|
|
<h2><code>message.get</code></h2>
|
|
<h3>Maintenance disabled:</h3>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<message status="0" />
|
|
</response>{% endhighlight %}</pre>
|
|
<p>Just report that there's nothing to process. Nice and simple.</p>
|
|
<h3>Maintenance enabled:</h3>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<message expire="300" status="0">
|
|
<item end="86400" name="sys.mainte" start="0" />
|
|
<item end="86400" name="sys.eacoin.mainte" start="0" />
|
|
</message>
|
|
</response>{% endhighlight %}</pre>
|
|
<p>When maintenance is enabled, we publish two messages. I believe the former is to announce the whole ea network is
|
|
under maintenance, and the latter PASELI-specific.</p>
|
|
|
|
<h2><code>facility.get</code></h2>
|
|
<p>This packet notably has its encoding bytes as <code>00 FF</code> which to the best of my knowledge is not a valid
|
|
encoding. I used Shift-JIS here to decode the location name.</p>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<facility>
|
|
<location>
|
|
<id __type="str">US-01</id>
|
|
<country __type="str">US</country>
|
|
<region __type="str">.</region>
|
|
<name __type="str">・ョ・ッ・ョ・・</name>
|
|
<type __type="u8">0</type>
|
|
</location>
|
|
<line>
|
|
<id __type="str">.</id>
|
|
<class __type="u8">0</class>
|
|
</line>
|
|
<portfw>
|
|
<globalip __type="ip4">1.0.0.127</globalip>
|
|
<globalport __type="s16">8888</globalport>
|
|
<privateport __type="s16">8888</privateport>
|
|
</portfw>
|
|
<public>
|
|
<flag __type="u8">1</flag>
|
|
<name __type="str">.</name>
|
|
<latitude __type="str">0</latitude>
|
|
<longitude __type="str">0</longitude>
|
|
</public>
|
|
<share>
|
|
<eacoin>
|
|
<notchamount __type="s32">0</notchamount>
|
|
<notchcount __type="s32">0</notchcount>
|
|
<supplylimit __type="s32">1000000</supplylimit>
|
|
</eacoin>
|
|
<url>
|
|
<eapass __type="str">http://localhost</eapass>
|
|
<arcadefan __type="str">http://localhost</arcadefan>
|
|
<konaminetdx __type="str">http://localhost</konaminetdx>
|
|
<konamiid __type="str">http://localhost</konamiid>
|
|
<eagate __type="str">http://localhost</eagate>
|
|
</url>
|
|
</share>
|
|
</facility>
|
|
</response>{% endhighlight %}</pre>
|
|
<p>Pretty standard <code>facility.get</code> response here, full of the usual fake values. Notably not even the share
|
|
URLs were lucky enough to get real data.</p>
|
|
|
|
<h2><code>pcbevent.put</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<pcbevent />
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>package.list</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<package expire="1200" status="0" />
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>tax.get_phase</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<tax>
|
|
<phase __type="s32">0</phase>
|
|
</tax>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>eventlog.write</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<eventlog>
|
|
<gamesession __type="s64">1</gamesession>
|
|
<logsendflg __type="s32">0</logsendflg>
|
|
<logerrlevel __type="s32">0</logerrlevel>
|
|
<evtidnosendflg __type="s32">0</evtidnosendflg>
|
|
</eventlog>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>machine.get_control</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<machine>
|
|
<command>
|
|
<arg __type="str">nop</arg>
|
|
</command>
|
|
</machine>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>info2.common</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<info2>
|
|
<event_ctrl />
|
|
</info2>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>pcb2.boot</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<shop2>
|
|
<sinfo>
|
|
<nm __type="str">AS</nm>
|
|
<cl_enbl __type="bool">1</cl_enbl>
|
|
<cl_h __type="u8">0</cl_h>
|
|
<cl_m __type="u8">0</cl_m>
|
|
</sinfo>
|
|
</shop2>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>pcb2.error</code></h2>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<pcb2 status="0" />
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>system.getmaster</code></h2>
|
|
<p>Just an error response unless the game is one of...</p>
|
|
<h3>Steel Chronicle (<code>KGG-*</code>):</h3>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<system>
|
|
<result __type="s32">1</result>
|
|
<strdata1 __type="str">MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx</strdata1>
|
|
<strdata2 __type="str">MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx</strdata2>
|
|
<updatedate __type="u64">1120367223</updatedate>
|
|
</system>
|
|
</response>{% endhighlight %}</pre>
|
|
<h3>Metal Gear Arcade (<code>I36-*</code>):</h3>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<system>
|
|
<result __type="s32">1</result>
|
|
<strdata1 __type="str">MjAxMTA4MTAwMDoxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MToxOjE6MQ==</strdata1>
|
|
<strdata2 __type="str">MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx</strdata2>
|
|
<updatedate __type="u64">1120367223</updatedate>
|
|
</system>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>hdkoperation.get</code></h2>
|
|
<p>Only used by Steel Chronicle as far as I can tell</p>
|
|
<pre>{% highlight "cxml" %}<?xml version="1.0" encoding="SHIFT_JIS"?>
|
|
<response>
|
|
<hdkoperation>
|
|
<nr_entry __type="s32">1</nr_entry>
|
|
<param __type="str">0,0,0,0,0,0,0,0,0</param>
|
|
</hdkoperation>
|
|
</response>{% endhighlight %}</pre>
|
|
|
|
<h2><code>op2_common.get_music_info</code></h2>
|
|
<p>This one is really long. <a href="{{ROOT}}/smartea.op2_common.get_music_info.html">It's got its own dedicated
|
|
page</a> if you really want to see it anyway.</p>
|
|
<p>It appears to be specifically for Nostalgia Op.2, however this may be incorrect.</p>
|
|
{% endblock %} |