[Bug 34455] NCsoft's Aion (MMORPG) fails to load "CrySystem.dll" (WinLicense software protection, avoid forwarding some msvcrt API to ntdll)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Sep 7 15:58:01 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=34455

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |download, obfuscation
             Status|UNCONFIRMED                 |NEW
                URL|                            |ftp://ftp.ncsoft.com/aionin
                   |                            |staller/AionInstaller.exe
                 CC|                            |focht at gmx.net
          Component|-unknown                    |msvcrt
            Summary|Aion launch failed          |NCsoft's Aion (MMORPG)
                   |                            |fails to load
                   |                            |"CrySystem.dll" (WinLicense
                   |                            |software protection, avoid
                   |                            |forwarding some msvcrt API
                   |                            |to ntdll)
     Ever Confirmed|0                           |1

--- Comment #5 from Anastasius Focht <focht at gmx.net> 2013-09-07 15:58:01 CDT ---
Hello folks,

please avoid mixing various issues in one bug.

--- quote ---
Now the game launched fails with an error:

[Launcher error] An error has occurred. E03001
--- quote ---

This is described here:
https://aiononline.custhelp.com/app/answers/detail/a_id/9302/~/new-launcher---error-e03001

--- quote ---
Running the launcher from the NCLauncher.exe instead of the shortcut on your
desktop may cause you to receive error E03001. Try using the shortcut that is
located on your desktop or selecting the shortcut from your Aion folder in your
Start Menu. Following these steps should resolve your issue.
--- quote ---

Debugging their crappy command line parsing code sheds some light on this...
Actually it's one of the gazillion broken apps that expects a _trailing_
whitespace at end of command line (similar to bug 16543).

To work around, use builtin "start.exe" for "NClauncher.exe" which
automagically adds the whitespace (mimics Windows behaviour).

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/NCWest/NCLauncher
...
wine start ./NCLauncher.exe /LauncherID:NCWest /CompanyID:12 /GameID:AION
/LUpdateAddr:updater.nclauncher.ncsoft.com
--- snip ---

The game downloader/updater/launcher comes with builtin torrent client which
works a bit flaky (sometimes emits error E02018) but still manages to download
several GiB of game data (given some restarts).

NOTE: I'm still on clean 32-bit WINEPREFIX, no native components (winetricks)

Now coming to the first crash "Aion started to launch, then gave error:
CrySystem.dll Loading failed" ...

It seems the game is wrapped with the WinLicense software protection scheme
from Oreans (http://www.oreans.com/).
Yes, these guys that gave much grievance to Windows and Wine users with their
infamous Themida protection scheme.

Despite various anti-debugging/dumping measure employed I worked out some
issues...
It seems the protection doesn't like Wine's msvcrt forwards to ntdll.

Partial dump of extra IAT:

--- snip ---
...
033B8514    F34F088A   OFFSET msvcrt._splitpath
033B8518    F34EF7AC   OFFSET msvcrt.MSVCRT__findfirst64i32
033B851C    F3540318   OFFSET msvcrt.MSVCRT__snprintf_s
033B8520    F356C35A   ASCII "ntdll.wcsstr"
033B8524    F35105D4   OFFSET msvcrt._mbsicmp
033B8528    F3532F92   OFFSET msvcrt.MSVCRT_wcschr
...
033B85D0    F3532C4A   OFFSET msvcrt.MSVCRT_memset
033B85D4    F3532EAF   OFFSET msvcrt.MSVCRT_strstr
033B85D8    F356C2B7   ASCII "ntdll.strncat"
033B85DC    F35304B0   OFFSET msvcrt.MSVCRT_strncpy
033B85E0    F350BCA1   OFFSET msvcrt._CIlog
...
033B8620    F35332B0   OFFSET msvcrt._beginthreadex
033B8624    F356C2D3   ASCII "ntdll.strrchr"
033B8628    F3532C17   OFFSET msvcrt.MSVCRT_memcpy
...
--- snip ---

Wine's msvcrt has been changed several times to not forward various API to
ntdll anymore (see GIT commit log "Don't forward <foo> to ntdll")

I reduced the list further (copying the code from ntdll):

--- snip ---
-@ cdecl _wcsnicmp(wstr wstr long) ntdll._wcsnicmp
+@ cdecl _wcsnicmp(wstr wstr long) MSVCRT__wcsnicmp
...
-@ cdecl memcmp(ptr ptr long) ntdll.memcmp
+@ cdecl memcmp(ptr ptr long) MSVCRT_memcmp
...
-@ cdecl memmove(ptr ptr long) ntdll.memmove
+@ cdecl memmove(ptr ptr long) MSVCRT_memmove
...
-@ cdecl strcmp(str str) ntdll.strcmp
+@ cdecl strcmp(str str) MSVCRT_strcmp
...
-@ cdecl strlen(str) ntdll.strlen
-@ cdecl strncat(str str long) ntdll.strncat
+@ cdecl strlen(str) MSVCRT_strlen
+@ cdecl strncat(str str long) MSVCRT_strncat
...
-@ cdecl strrchr(str long) ntdll.strrchr
+@ cdecl strrchr(str long) MSVCRT_strrchr
...
-@ cdecl strstr(str str) ntdll.strstr
+@ cdecl strstr(str str) MSVCRT_strstr
...
-@ cdecl wcschr(wstr long) ntdll.wcschr
+@ cdecl wcschr(wstr long) MSVCRT_wcschr
...
-@ cdecl wcslen(wstr) ntdll.wcslen
+@ cdecl wcslen(wstr) MSVCRT_wcslen
...
-@ cdecl wcsstr(wstr wstr) ntdll.wcsstr
+@ cdecl wcsstr(wstr wstr) MSVCRT_wcsstr
--- snip ---

With those forwards removed the game runs a bit further - into next bug
(similar issue with Wine's msvcp80.dll which deserves a separate bug)

$ wine --version
wine-1.7.1-229-g7813f5c

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list