http://bugs.winehq.org/show_bug.cgi?id=34455
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, obfuscation Status|UNCONFIRMED |NEW URL| |ftp://ftp.ncsoft.com/aionin | |staller/AionInstaller.exe CC| |focht@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@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-...
--- 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