Browse Source

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.
pull/436/head^2
Anders Jenbo 6 years ago
parent
commit
4532f009ff
  1. 4
      3rdParty/Storm/Source/storm.h
  2. 132
      Source/mpqapi.cpp
  3. 2
      Source/pfile.cpp
  4. 19
      SourceS/miniwin/misc.h
  5. 1
      SourceS/miniwin/misc_macro.h
  6. 4
      SourceX/DiabloUI/diabloui.cpp
  7. 4
      SourceX/DiabloUI/selgame.cpp
  8. 12
      SourceX/miniwin/misc.cpp
  9. 24
      SourceX/storm/storm.cpp
  10. 2
      SourceX/storm/storm_net.cpp

4
3rdParty/Storm/Source/storm.h vendored

@ -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);

132
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)

2
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;
}

19
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);

1
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

4
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

4
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;

12
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();

24
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];

2
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);

Loading…
Cancel
Save