From 4532f009ff672334125d0552ca270a69ff1df8fc Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 9 Nov 2019 20:00:53 +0100 Subject: [PATCH] Remove old anti-cheat code from save function Tthis code simply logs the save time of a multiplayer game in the register database, this was likly done as part of an anti cheat scheme (the key was "Video Player"), but appears to have since been disabled. Probably to allow moving save games between PC's which was supported when better Windows 2000 support was added. --- 3rdParty/Storm/Source/storm.h | 4 -- Source/mpqapi.cpp | 132 +--------------------------------- Source/pfile.cpp | 2 - SourceS/miniwin/misc.h | 19 ----- SourceS/miniwin/misc_macro.h | 1 - SourceX/DiabloUI/diabloui.cpp | 4 +- SourceX/DiabloUI/selgame.cpp | 4 +- SourceX/miniwin/misc.cpp | 12 ---- SourceX/storm/storm.cpp | 24 ------- SourceX/storm/storm_net.cpp | 2 +- 10 files changed, 6 insertions(+), 198 deletions(-) diff --git a/3rdParty/Storm/Source/storm.h b/3rdParty/Storm/Source/storm.h index 7d2c2207d..1edfb0366 100644 --- a/3rdParty/Storm/Source/storm.h +++ b/3rdParty/Storm/Source/storm.h @@ -828,11 +828,7 @@ void GetPrefPath(char *buffer, size_t size); bool getIniBool(const char *sectionName, const char *keyName, bool defaultValue = false); bool getIniValue(const char *sectionName, const char *keyName, char *string, int stringSize, int *dataSize = NULL); void setIniValue(const char *sectionName, const char *keyName, char *value, int len = 0); -BOOL STORMAPI SRegLoadData(const char *keyname, const char *valuename, int size, LPBYTE lpData, BYTE flags, LPDWORD lpcbData); -BOOL STORMAPI SRegLoadString(const char *keyname, const char *valuename, BYTE flags, char *buffer, unsigned int buffersize); BOOL STORMAPI SRegLoadValue(const char *keyname, const char *valuename, BYTE flags, int *value); -BOOL STORMAPI SRegSaveData(const char *keyname, const char *valuename, int size, BYTE *lpData, DWORD cbData); -BOOL STORMAPI SRegSaveString(const char *keyname, const char *valuename, BYTE flags, char *string); BOOL STORMAPI SRegSaveValue(const char *keyname, const char *valuename, BYTE flags, DWORD result); BOOL STORMAPI SRegDeleteValue(const char *keyname, const char *valuename, BYTE flags); diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp index beb8a85c5..526e5983c 100644 --- a/Source/mpqapi.cpp +++ b/Source/mpqapi.cpp @@ -8,7 +8,6 @@ char mpq_buf[4096]; _HASHENTRY *sgpHashTbl; BOOL save_archive_modified; _BLOCKENTRY *sgpBlockTbl; -BOOLEAN save_archive_open; //note: 32872 = 32768 + 104 (sizeof(_FILEHEADER)) @@ -31,108 +30,6 @@ BOOL mpqapi_set_hidden(const char *pszArchive, BOOL hidden) return SetFileAttributes(pszArchive, dwFileAttributesToSet); } -void mpqapi_store_creation_time(const char *pszArchive, DWORD dwChar) -{ - HANDLE handle; - struct _WIN32_FIND_DATAA FindFileData; - char dst[160]; - - if (gbMaxPlayers != 1) { - mpqapi_reg_load_modification_time(dst, 160); - handle = FindFirstFile(pszArchive, &FindFileData); - if (handle != INVALID_HANDLE_VALUE) { - FindClose(handle); - *((FILETIME *)(dst) + dwChar * 2) = FindFileData.ftCreationTime; - mpqapi_reg_store_modification_time(dst, 160); - } - } -} - -BOOL mpqapi_reg_load_modification_time(char *dst, int size) -{ - char *pszDst; - char *pbData; - DWORD nbytes_read; - - pszDst = dst; - memset(dst, 0, size); -#ifdef SPAWN - if (!SRegLoadData("Diablo", "Audio Playback ", 0, (BYTE *)pszDst, size, &nbytes_read)) { -#else - if (!SRegLoadData("Diablo", "Video Player ", 0, (BYTE *)pszDst, size, &nbytes_read)) { -#endif - return FALSE; - } - - if (nbytes_read != size) - return FALSE; - - for (; size >= 8u; size -= 8) { - pbData = pszDst; - pszDst += 8; - mpqapi_xor_buf(pbData); - } - - return TRUE; -} - -void mpqapi_xor_buf(char *pbData) -{ - DWORD mask; - char *pbCurrentData; - int i; - - mask = 0xF0761AB; - pbCurrentData = pbData; - - for (i = 0; i < 8; i++) { - *pbCurrentData ^= mask; - pbCurrentData++; - mask = (mask << 1) | (mask >> 31); // _rotl(mask, 1) - } -} - -void mpqapi_store_default_time(DWORD dwChar) -{ - /* - DWORD idx; - char dst[160]; - - if(gbMaxPlayers == 1) { - return; - } - - /// ASSERT: assert(dwChar < MAX_CHARACTERS); - idx = 16 * dwChar; - mpqapi_reg_load_modification_time(dst, sizeof(dst)); - *(DWORD *)&dst[idx + 4] = 0x78341348; // dwHighDateTime - mpqapi_reg_store_modification_time(dst, sizeof(dst)); -*/ -} - -BOOLEAN mpqapi_reg_store_modification_time(char *pbData, DWORD dwLen) -{ - char *pbCurrentData, *pbDataToXor; - DWORD i; - - pbCurrentData = pbData; - if (dwLen >= 8) { - i = dwLen >> 3; - do { - pbDataToXor = pbCurrentData; - pbCurrentData += 8; - mpqapi_xor_buf(pbDataToXor); - i--; - } while (i); - } - -#ifdef SPAWN - return SRegSaveData("Diablo", "Audio Playback ", 0, (BYTE *)pbData, dwLen); -#else - return SRegSaveData("Diablo", "Video Player ", 0, (BYTE *)pbData, dwLen); -#endif -} - void mpqapi_remove_hash_entry(const char *pszName) { _HASHENTRY *pHashTbl; @@ -439,13 +336,11 @@ BOOL OpenMPQ(const char *pszArchive, BOOL hidden, DWORD dwChar) return FALSE; } dwFlagsAndAttributes = gbMaxPlayers > 1 ? FILE_FLAG_WRITE_THROUGH : 0; - save_archive_open = FALSE; sghArchive = CreateFile(pszArchive, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL); if (sghArchive == INVALID_HANDLE_VALUE) { sghArchive = CreateFile(pszArchive, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, dwFlagsAndAttributes | (hidden ? FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN : 0), NULL); if (sghArchive == INVALID_HANDLE_VALUE) return FALSE; - save_archive_open = TRUE; save_archive_modified = TRUE; } if (sgpBlockTbl == NULL || sgpHashTbl == NULL) { @@ -515,7 +410,6 @@ BOOL ParseMPQHeader(_FILEHEADER *pHdr, DWORD *pdwNextFileStart) pHdr->version = 0; *pdwNextFileStart = 0x10068; save_archive_modified = TRUE; - save_archive_open = 1; } return TRUE; @@ -531,31 +425,7 @@ void CloseMPQ(const char *pszArchive, BOOL bFree, DWORD dwChar) CloseHandle(sghArchive); sghArchive = INVALID_HANDLE_VALUE; } - if (save_archive_modified) { - save_archive_modified = FALSE; - mpqapi_store_modified_time(pszArchive, dwChar); - } - if (save_archive_open) { - save_archive_open = FALSE; - mpqapi_store_creation_time(pszArchive, dwChar); - } -} - -void mpqapi_store_modified_time(const char *pszArchive, DWORD dwChar) -{ - HANDLE handle; - struct _WIN32_FIND_DATAA FindFileData; - char dst[160]; - - if (gbMaxPlayers != 1) { - mpqapi_reg_load_modification_time(dst, 160); - handle = FindFirstFile(pszArchive, &FindFileData); - if (handle != INVALID_HANDLE_VALUE) { - FindClose(handle); - *((FILETIME *)(dst) + dwChar * 2 + 1) = FindFileData.ftLastWriteTime; - mpqapi_reg_store_modification_time(dst, 160); - } - } + save_archive_modified = FALSE; } BOOL mpqapi_flush_and_close(const char *pszArchive, BOOL bFree, DWORD dwChar) diff --git a/Source/pfile.cpp b/Source/pfile.cpp index c9ce7dc3b..d49f3bcc5 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -65,8 +65,6 @@ BOOL pfile_open_archive(BOOL update, DWORD save_num) if (OpenMPQ(FileName, FALSE, save_num)) return TRUE; - if (update && gbMaxPlayers > 1) - mpqapi_store_default_time(save_num); return FALSE; } diff --git a/SourceS/miniwin/misc.h b/SourceS/miniwin/misc.h index 42fe67115..52ade8388 100644 --- a/SourceS/miniwin/misc.h +++ b/SourceS/miniwin/misc.h @@ -223,22 +223,6 @@ char *__cdecl _itoa(int _Value, char *_Dest, int _Radix); // File I/O // -typedef struct _WIN32_FIND_DATAA { - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD dwReserved0; - DWORD dwReserved1; - CHAR cFileName[DVL_MAX_PATH]; - CHAR cAlternateFileName[14]; - DWORD dwFileType; - DWORD dwCreatorType; - WORD wFinderFlags; -} WIN32_FIND_DATAA, WIN32_FIND_DATA, *LPWIN32_FIND_DATAA; - typedef void *LPOVERLAPPED; typedef struct _IMAGE_FILE_HEADER { @@ -344,9 +328,6 @@ DWORD WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistance WINBOOL WINAPI SetEndOfFile(HANDLE hFile); DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName); WINBOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes); -HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); -BOOL FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); -WINBOOL WINAPI FindClose(HANDLE hFindFile); HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); diff --git a/SourceS/miniwin/misc_macro.h b/SourceS/miniwin/misc_macro.h index f03878da9..0ac810a49 100644 --- a/SourceS/miniwin/misc_macro.h +++ b/SourceS/miniwin/misc_macro.h @@ -93,7 +93,6 @@ #define GetFileAttributes GetFileAttributesA #define SetFileAttributes SetFileAttributesA -#define FindFirstFile FindFirstFileA #define CreateFile CreateFileA #define GetComputerName GetComputerNameA #define DeleteFile DeleteFileA diff --git a/SourceX/DiabloUI/diabloui.cpp b/SourceX/DiabloUI/diabloui.cpp index 41ca9e1c9..10ba45ec8 100644 --- a/SourceX/DiabloUI/diabloui.cpp +++ b/SourceX/DiabloUI/diabloui.cpp @@ -807,8 +807,8 @@ void DvlIntSetting(const char *valuename, int *value) */ void DvlStringSetting(const char *valuename, char *string, int len) { - if (!SRegLoadString("devilutionx", valuename, 0, string, len)) { - SRegSaveString("devilutionx", valuename, 0, string); + if (!getIniValue("devilutionx", valuename, string, len)) { + setIniValue("devilutionx", valuename, string); } } } // namespace dvl diff --git a/SourceX/DiabloUI/selgame.cpp b/SourceX/DiabloUI/selgame.cpp index 0987e44b5..6e20d0f22 100644 --- a/SourceX/DiabloUI/selgame.cpp +++ b/SourceX/DiabloUI/selgame.cpp @@ -102,7 +102,7 @@ void selgame_GameSelection_Init() return; } - SRegLoadString("Phone Book", "Entry1", 0, selgame_Ip, 128); + getIniValue("Phone Book", "Entry1", selgame_Ip, 128); UiInitList(0, 1, selgame_GameSelection_Focus, selgame_GameSelection_Select, selgame_GameSelection_Esc, SELUDPGAME_DIALOG, size(SELUDPGAME_DIALOG)); } @@ -191,7 +191,7 @@ void selgame_Password_Init(int value) void selgame_Password_Select(int value) { if (selgame_selectedGame) { - SRegSaveString("Phone Book", "Entry1", 0, selgame_Ip); + setIniValue("Phone Book", "Entry1", selgame_Ip); if (SNetJoinGame(selgame_selectedGame, selgame_Ip, selgame_Password, NULL, NULL, gdwPlayerId)) { UiInitList(0, 0, NULL, NULL, NULL, NULL, 0); selgame_endMenu = true; diff --git a/SourceX/miniwin/misc.cpp b/SourceX/miniwin/misc.cpp index e3a77452a..cff312459 100644 --- a/SourceX/miniwin/misc.cpp +++ b/SourceX/miniwin/misc.cpp @@ -83,18 +83,6 @@ void Sleep(DWORD dwMilliseconds) SDL_Delay(dwMilliseconds); } -HANDLE FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData) -{ - DUMMY(); - return (HANDLE)-1; -} - -WINBOOL FindClose(HANDLE hFindFile) -{ - UNIMPLEMENTED(); - return true; -} - WINBOOL GetComputerNameA(LPSTR lpBuffer, LPDWORD nSize) { DUMMY(); diff --git a/SourceX/storm/storm.cpp b/SourceX/storm/storm.cpp index 94a0c7b1b..b41bafa07 100644 --- a/SourceX/storm/storm.cpp +++ b/SourceX/storm/storm.cpp @@ -360,16 +360,6 @@ void setIniValue(const char *sectionName, const char *keyName, char *value, int ini.saveToFile(); } -BOOL SRegLoadData(const char *keyname, const char *valuename, int size, LPBYTE lpData, BYTE flags, LPDWORD lpcbData) -{ - return getIniValue(keyname, valuename, (char *)lpData, size, (int *)lpcbData); -} - -BOOL SRegLoadString(const char *keyname, const char *valuename, BYTE flags, char *buffer, unsigned int buffersize) -{ - return getIniValue(keyname, valuename, buffer, buffersize); -} - BOOL SRegLoadValue(const char *keyname, const char *valuename, BYTE flags, int *value) { char string[10]; @@ -381,20 +371,6 @@ BOOL SRegLoadValue(const char *keyname, const char *valuename, BYTE flags, int * return false; } -BOOL SRegSaveData(const char *keyname, const char *valuename, int size, BYTE *lpData, DWORD cbData) -{ - setIniValue(keyname, valuename, (char *)lpData, cbData); - - return true; -} - -BOOL SRegSaveString(const char *keyname, const char *valuename, BYTE flags, char *string) -{ - setIniValue(keyname, valuename, string); - - return true; -} - BOOL SRegSaveValue(const char *keyname, const char *valuename, BYTE flags, DWORD result) { char str[10]; diff --git a/SourceX/storm/storm_net.cpp b/SourceX/storm/storm_net.cpp index 5318c75c7..94e0b19d3 100644 --- a/SourceX/storm/storm_net.cpp +++ b/SourceX/storm/storm_net.cpp @@ -115,7 +115,7 @@ BOOL SNetCreateGame(const char *pszGameName, const char *pszGamePassword, const dvlnet_inst->setup_gameinfo(std::move(game_init_info)); char addrstr[129] = "0.0.0.0"; - SRegLoadString("dvlnet", "bindaddr", 0, addrstr, 128); + getIniValue("dvlnet", "bindaddr", addrstr, 128); strncpy(gpszGameName, addrstr, sizeof(gpszGameName) - 1); if (pszGamePassword) strncpy(gpszGamePassword, pszGamePassword, sizeof(gpszGamePassword) - 1);