Hello my beloved, greedy, dead community,
have you ever tried something in-game and had to relog for every attempt? Have you ever entered your account-data so often, your key wore off? Have you ever dreamt of not having to enter credentials, have you ever dreamt of not waiting for the character selection animation to complete? Have you ever dreamed of a fast auto login, so fast that you just skip the entire login and appear ingame?
No? Well, idc, these have been my dreams anyway :P. And I make my dreams come true.
(The timer was a bit off. The log tells the client was ready after 6.4 seconds)
Long story short: Joymax Developers had a feature to quickly test stuff on the client by hard-coding credentials into the source. The client would then perform a fast login using an internal class called CPSQuickStart skipping the intro and character select.
The class is still build in, but its inactive and outdated / broken. I spend a lot of time analysing and comparing its behaviour and finally came up with two major problems:
The P in CPSQuickStart stands for Process (and the S for Silkroad). The client used to have a feature to choose the StartProcess from the Media.pk/config/options.txt, but it was removed some time ago. But since my codebase already replaces the entire WinMain, it wasn't to hard to find a location to change the StartProcess safely.
To solve problem 1, I simply stole the IBUV confirmation code from the legitimate login code. It wasn't a problem since it was an entirely new feature and i just had to send a packet.
My solution for the second problem doesn't make me happy. The character selection is quick and dirty since I have no clue what the original CPSQuickStart code did there. It works if the char is existing, so no problems here till now.
Since the credentials are still hardcoded, a binary release makes no sense at this point. Maybe someone add a feature to read the data from a config file (ini should be enough).
have you ever tried something in-game and had to relog for every attempt? Have you ever entered your account-data so often, your key wore off? Have you ever dreamt of not having to enter credentials, have you ever dreamt of not waiting for the character selection animation to complete? Have you ever dreamed of a fast auto login, so fast that you just skip the entire login and appear ingame?
No? Well, idc, these have been my dreams anyway :P. And I make my dreams come true.
| Gallery | |
|
|
|
Long story short: Joymax Developers had a feature to quickly test stuff on the client by hard-coding credentials into the source. The client would then perform a fast login using an internal class called CPSQuickStart skipping the intro and character select.
The class is still build in, but its inactive and outdated / broken. I spend a lot of time analysing and comparing its behaviour and finally came up with two major problems:
- CPSQuickStart is unaware of the IBUV (Image Based User Verification aka. Captcha).
- CPSQuickStart sends the character name as multi-byte string instead of single-byte string
The P in CPSQuickStart stands for Process (and the S for Silkroad). The client used to have a feature to choose the StartProcess from the Media.pk/config/options.txt, but it was removed some time ago. But since my codebase already replaces the entire WinMain, it wasn't to hard to find a location to change the StartProcess safely.
Code:
// Client.cpp:104 // Enable Quickstart g_CGame->m_runtimeClass = reinterpret_cast<CGfxRuntimeClass*>(0x00EED974);
To solve problem 1, I simply stole the IBUV confirmation code from the legitimate login code. It wasn't a problem since it was an entirely new feature and i just had to send a packet.
Code:
if (pMsg->msgid == 0x1002)
{
int unk1, unk2;
*pMsg >> unk1 >> unk2;
CClientNet::get()->IBVU_confirm(""); // Confirm IBVU
return 0;
}
Code:
if (pMsg->msgid == 0xB007)
{
pMsg->FlushRemaining();
CMsgStreamBuffer buf(0x7001);
buf << std::string(charname); // Character Name
SendMsg(buf);
return 0;
}