Last active
June 20, 2020 06:22
-
-
Save DarkLotus/024a0b58e4f6b7a6597f722f3b1c934c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // this is onyl func that calls the below func, and this func is called from WinMain. | |
| //the pointer unk_A1BB38 has no other refs either than this func. | |
| LONG sub_549470() | |
| { | |
| LONG result; // eax@1 | |
| struct _TIME_ZONE_INFORMATION v1; // [sp+0h] [bp-B0h]@1 | |
| result = GetTimeZoneInformation(&v1); | |
| if ( result != -1 ) | |
| { | |
| result = -2004318071 * v1.Bias; | |
| dword_A1BC4C = v1.Bias / 60; | |
| } | |
| if ( byte_709362 ) | |
| { | |
| SendClientInfo(&unk_A1BB38); | |
| result = (LONG)sub_549290(); | |
| } | |
| return result; | |
| } | |
| unsigned int __cdecl SendClientInfo(void *a1) | |
| { | |
| unsigned int result; // eax@1 | |
| HKEY v2; // ST1C_4@6 | |
| bool v3; // zf@7 | |
| DWORD v4; // ecx@7 | |
| DWORD v5; // edx@7 | |
| double v6; // st7@12 | |
| HDC v7; // esi@12 | |
| int v8; // eax@12 | |
| LSTATUS v9; // eax@12 | |
| char *v10; // edi@12 | |
| _WORD *v11; // eax@18 | |
| __int16 v12; // cx@18 | |
| const char *v13; // eax@19 | |
| signed int i; // esi@19 | |
| DWORD v15; // eax@24 | |
| char *v16; // ecx@25 | |
| CHAR v17; // al@27 | |
| HANDLE v18; // esi@29 | |
| BOOL v19; // edi@30 | |
| int v20; // edi@37 | |
| _DWORD *v21; // esi@37 | |
| _BYTE *v22; // esi@44 | |
| HKEY v23; // ecx@47 | |
| HKEY v24; // edx@51 | |
| HANDLE v25; // eax@57 | |
| void *v26; // esi@57 | |
| DWORD v27; // edi@58 | |
| HANDLE v28; // eax@61 | |
| void *v29; // esi@61 | |
| DWORD v30; // edi@62 | |
| HANDLE v31; // eax@65 | |
| void *v32; // esi@65 | |
| DWORD v33; // edi@66 | |
| FARPROC v34; // esi@71 | |
| _DWORD *v35; // eax@71 | |
| HMODULE v36; // eax@71 | |
| char *v37; // eax@82 | |
| char v38; // cl@83 | |
| _DWORD *v39; // esi@87 | |
| int v40; // ecx@87 | |
| HMODULE v41; // eax@94 | |
| FARPROC v42; // eax@95 | |
| int v43; // eax@95 | |
| char *v44; // eax@97 | |
| char v45; // cl@98 | |
| _DWORD *v46; // eax@103 | |
| int v47; // edx@103 | |
| signed int j; // esi@106 | |
| void (__stdcall *v49)(HKEY); // esi@114 | |
| _DWORD *v50; // eax@124 | |
| void *v51; // esi@141 | |
| unsigned int v52; // eax@141 | |
| double v53; // st7@142 | |
| double v54; // st7@143 | |
| int v55; // [sp+8h] [bp-4Ch]@1 | |
| int v56; // [sp+18h] [bp-3Ch]@71 | |
| BYTE v57[4]; // [sp+1Ch] [bp-38h]@117 | |
| HMODULE hLibModule; // [sp+20h] [bp-34h]@71 | |
| HKEY v59; // [sp+24h] [bp-30h]@18 | |
| void *v60; // [sp+28h] [bp-2Ch]@1 | |
| DWORD BytesReturned; // [sp+2Ch] [bp-28h]@30 | |
| BYTE Data[4]; // [sp+30h] [bp-24h]@3 | |
| DWORD cbData; // [sp+34h] [bp-20h]@3 | |
| HKEY phkResult; // [sp+38h] [bp-1Ch]@3 | |
| unsigned __int16 v65; // [sp+3Eh] [bp-16h]@12 | |
| HKEY hKey; // [sp+40h] [bp-14h]@12 | |
| int *v67; // [sp+44h] [bp-10h]@1 | |
| int v68; // [sp+50h] [bp-4h]@12 | |
| struct _OSVERSIONINFOA VersionInformation; // [sp+54h] [bp+0h]@7 | |
| struct _SYSTEM_INFO SystemInfo; // [sp+E8h] [bp+94h]@12 | |
| int v71; // [sp+10Ch] [bp+B8h]@71 | |
| __int16 v72; // [sp+110h] [bp+BCh]@71 | |
| __int16 v73; // [sp+112h] [bp+BEh]@71 | |
| char v74; // [sp+114h] [bp+C0h]@71 | |
| char v75; // [sp+115h] [bp+C1h]@71 | |
| char v76; // [sp+116h] [bp+C2h]@71 | |
| char v77; // [sp+117h] [bp+C3h]@71 | |
| char v78; // [sp+118h] [bp+C4h]@71 | |
| char v79; // [sp+119h] [bp+C5h]@71 | |
| char v80; // [sp+11Ah] [bp+C6h]@71 | |
| char v81; // [sp+11Bh] [bp+C7h]@71 | |
| int OutBuffer; // [sp+11Ch] [bp+C8h]@30 | |
| char v83; // [sp+4D0h] [bp+47Ch]@96 | |
| _BYTE v84[3]; // [sp+4D1h] [bp+47Dh]@99 | |
| char v85; // [sp+4ECh] [bp+498h]@81 | |
| char v86; // [sp+6D0h] [bp+67Ch]@100 | |
| char v87; // [sp+6ECh] [bp+698h]@82 | |
| _BYTE v88[3]; // [sp+6EDh] [bp+699h]@84 | |
| int v89; // [sp+8F4h] [bp+8A0h]@87 | |
| int v90; // [sp+8F8h] [bp+8A4h]@87 | |
| int v91; // [sp+8FCh] [bp+8A8h]@103 | |
| char Src; // [sp+91Ch] [bp+8C8h]@48 | |
| CHAR SubKey; // [sp+920h] [bp+8CCh]@108 | |
| char v94; // [sp+A1Fh] [bp+9CBh]@108 | |
| CHAR FileName[8]; // [sp+A20h] [bp+9CCh]@12 | |
| v67 = &v55; | |
| v60 = a1; | |
| memset(a1, 0, 0x114u); | |
| result = sub_547F00(); | |
| if ( result >= 0x15 ) | |
| { | |
| *((_DWORD *)a1 + 1) = result; | |
| return result; | |
| } | |
| sub_547F80(0x15u); | |
| sub_547F80(0x16u); | |
| phkResult = 0; | |
| *(_DWORD *)Data = 0; | |
| cbData = 4; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &phkResult) ) | |
| { | |
| if ( RegQueryValueExA(phkResult, "UniqueInstanceId", 0, 0, Data, &cbData) ) | |
| { | |
| *(_DWORD *)Data = _time64(0); | |
| RegSetValueExA(phkResult, "UniqueInstanceId", 0, 4u, Data, 4u); | |
| } | |
| v2 = phkResult; | |
| *((_DWORD *)a1 + 1) = *(_DWORD *)Data; | |
| RegCloseKey(v2); | |
| } | |
| sub_547F80(0x17u); | |
| memset(&VersionInformation, 0, 0x94u); | |
| VersionInformation.dwOSVersionInfoSize = 148; | |
| GetVersionExA(&VersionInformation); | |
| v3 = VersionInformation.dwMajorVersion == 4; | |
| v4 = VersionInformation.dwMinorVersion; | |
| v5 = VersionInformation.dwBuildNumber; | |
| *((_DWORD *)a1 + 2) = VersionInformation.dwMajorVersion; | |
| *((_DWORD *)a1 + 3) = v4; | |
| *((_DWORD *)a1 + 4) = v5; | |
| if ( v3 && (!v4 || v4 == 10 || v4 == 90) ) | |
| *((_WORD *)a1 + 9) = 0; | |
| sub_547F80(0x18u); | |
| GlobalMemoryStatus((LPMEMORYSTATUS)&SystemInfo.dwPageSize); | |
| v6 = ceil((double)(unsigned int)SystemInfo.lpMaximumApplicationAddress * 0.0000002384185791015625); | |
| cbData = v65 | 0xC00; | |
| *(_QWORD *)FileName = (signed __int64)v6; | |
| *((_DWORD *)a1 + 10) = 4 * (unsigned __int64)(signed __int64)v6; | |
| sub_547F80(0x19u); | |
| *((_DWORD *)a1 + 11) = GetSystemMetrics(0); | |
| *((_DWORD *)a1 + 12) = GetSystemMetrics(1); | |
| v7 = GetDC(0); | |
| cbData = GetDeviceCaps(v7, 14); | |
| v8 = GetDeviceCaps(v7, 12); | |
| *((_DWORD *)v60 + 13) = v8 * cbData; | |
| ReleaseDC(0, v7); | |
| sub_547F80(0x1Au); | |
| v68 = 8; | |
| hKey = 0; | |
| v9 = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\DirectX", 0, 0x20019u, &hKey); | |
| v10 = (char *)v60; | |
| if ( !v9 ) | |
| { | |
| if ( !*((_WORD *)v60 + 28) ) | |
| { | |
| cbData = 79; | |
| memset(&VersionInformation.szCSDVersion[48], 0, 0x50u); | |
| if ( !RegQueryValueExA(hKey, "Version", 0, 0, (LPBYTE)&VersionInformation.szCSDVersion[48], &cbData) ) | |
| sscanf(&VersionInformation.szCSDVersion[48], "%*lu.%lu.%lu", v10 + 56, v10 + 58); | |
| } | |
| RegCloseKey(hKey); | |
| } | |
| if ( !*((_WORD *)v10 + 28) ) | |
| { | |
| v59 = 0; | |
| cbData = 0; | |
| sub_547170((int)&v59, (int)&cbData, &VersionInformation); | |
| v11 = v60; | |
| v12 = (unsigned __int8)v59; | |
| *((_WORD *)v60 + 28) = BYTE1(v59); | |
| v11[29] = v12; | |
| } | |
| sub_547F80(0x1Bu); | |
| v68 = 10; | |
| *(_DWORD *)Data = 0; | |
| v13 = (const char *)sub_575C80(); | |
| strncpy((char *)Data, v13, 4u); | |
| for ( i = 0; i < 3; ++i ) | |
| Data[i] = tolower((char)Data[i]); | |
| Data[3] = 0; | |
| sub_5D2C40((char *)v60 + 204, Data, 3); | |
| cbData = 28; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| v68 = 12; | |
| v15 = GetLogicalDriveStringsA(0x69u, &VersionInformation.szCSDVersion[20]); | |
| VersionInformation.szCSDVersion[125] = 0; | |
| if ( v15 ) | |
| { | |
| v16 = &VersionInformation.szCSDVersion[20]; | |
| cbData = (DWORD)&VersionInformation.szCSDVersion[v15 + 20]; | |
| while ( 1 ) | |
| { | |
| v59 = (HKEY)v16; | |
| if ( (unsigned int)v16 >= cbData ) | |
| break; | |
| v17 = toupper(*v16); | |
| if ( v17 != 65 && v17 != 66 ) | |
| { | |
| *(_DWORD *)FileName = 1546542172; | |
| FileName[4] = v17; | |
| FileName[5] = 58; | |
| FileName[6] = 0; | |
| v18 = CreateFileA(FileName, 0xC0000000, 3u, 0, 3u, 0, 0); | |
| if ( v18 != (HANDLE)-1 ) | |
| { | |
| BytesReturned = 0; | |
| v19 = DeviceIoControl(v18, 0x2D0C04u, 0, 0, &OutBuffer, 0x800u, &BytesReturned, 0); | |
| CloseHandle(v18); | |
| if ( v19 ) | |
| { | |
| if ( OutBuffer == 51 ) | |
| { | |
| byte_A1BC03 |= 0x10u; | |
| goto LABEL_35; | |
| } | |
| } | |
| } | |
| } | |
| v16 = (char *)v59 + strlen((const char *)v59) + 1; | |
| } | |
| } | |
| byte_A1BC03 &= 0xEFu; | |
| LABEL_35: | |
| cbData = 29; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| v68 = 14; | |
| GetSystemInfo(&SystemInfo); | |
| v20 = (int)v60; | |
| v21 = (char *)v60 + 24; | |
| if ( SystemInfo.dwProcessorType == 386 ) | |
| { | |
| *v21 = 3; | |
| } | |
| else if ( SystemInfo.dwProcessorType == 486 ) | |
| { | |
| *v21 = 4; | |
| } | |
| else | |
| { | |
| sub_5476F0((char *)v60 + 20, (char *)v60 + 24, (char *)v60 + 28); | |
| if ( *(_BYTE *)(v20 + 20) ) | |
| goto LABEL_44; | |
| *v21 = 5; | |
| } | |
| *(_BYTE *)(v20 + 20) = 1; | |
| *(_DWORD *)(v20 + 28) = 0; | |
| LABEL_44: | |
| *(_DWORD *)(v20 + 32) = sub_547910(*v21 >= 5u); | |
| *(_BYTE *)(v20 + 36) = SystemInfo.dwNumberOfProcessors; | |
| v22 = v60; | |
| cbData = 30; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| v68 = 16; | |
| *(_DWORD *)Data = 0; | |
| cbData = sub_559E20(0); | |
| v22[200] = sub_547BE0(); | |
| v22[201] = 2; | |
| if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online\\Ultima Online", 0, 0x20019u, (PHKEY)Data) ) | |
| { | |
| sub_55A0C0(&Src, 260); | |
| if ( sub_55AE40(&Src, "client.exe") ) | |
| v22[202] |= 2u; | |
| } | |
| else | |
| { | |
| v23 = *(HKEY *)Data; | |
| v22[202] |= 2u; | |
| RegCloseKey(v23); | |
| } | |
| if ( RegOpenKeyExA( | |
| HKEY_LOCAL_MACHINE, | |
| "SOFTWARE\\Origin Worlds Online\\Ultima Online Third Dawn", | |
| 0, | |
| 0x20019u, | |
| (PHKEY)Data) ) | |
| { | |
| sub_55A0C0(&Src, 260); | |
| if ( sub_55AE40(&Src, "uotd.exe") ) | |
| v22[202] |= 4u; | |
| } | |
| else | |
| { | |
| v24 = *(HKEY *)Data; | |
| v22[202] |= 4u; | |
| RegCloseKey(v24); | |
| } | |
| if ( sub_55AE40((void *)cbData, "map0.mul") == 0 ) | |
| byte_A1BC03 |= 1u; | |
| else | |
| byte_A1BC03 &= 0xFEu; | |
| v25 = CreateFileA("uo.exe", 0x80000000, 0, 0, 3u, 0, 0); | |
| v26 = v25; | |
| if ( v25 != (HANDLE)-1 && (v27 = GetFileSize(v25, 0), CloseHandle(v26), v27 == 53248) ) | |
| byte_A1BC03 &= 0xFDu; | |
| else | |
| byte_A1BC03 |= 2u; | |
| v28 = CreateFileA("uopatch.exe", 0x80000000, 0, 0, 3u, 0, 0); | |
| v29 = v28; | |
| if ( v28 != (HANDLE)-1 && (v30 = GetFileSize(v28, 0), CloseHandle(v29), v30 == 266240) ) | |
| byte_A1BC03 &= 0xFBu; | |
| else | |
| byte_A1BC03 |= 4u; | |
| v31 = CreateFileA("patchw32.dll", 0x80000000, 0, 0, 3u, 0, 0); | |
| v32 = v31; | |
| if ( v31 != (HANDLE)-1 && (v33 = GetFileSize(v31, 0), CloseHandle(v32), v33 == 202240) ) | |
| byte_A1BC03 &= 0xF7u; | |
| else | |
| byte_A1BC03 |= 8u; | |
| cbData = 31; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| v78 = -105; | |
| v79 = -105; | |
| v34 = 0; | |
| v68 = 18; | |
| v56 = 0; | |
| cbData = 0; | |
| v71 = 367419072; | |
| v72 = 15260; | |
| v73 = 4562; | |
| v74 = -71; | |
| v75 = 47; | |
| v76 = 0; | |
| v77 = 96; | |
| v80 = -22; | |
| v81 = 91; | |
| HIBYTE(v65) = 0; | |
| phkResult = 0; | |
| v59 = (HKEY)((char *)v60 + 60); | |
| memset((char *)v60 + 60, 0, 0x80u); | |
| v35 = v60; | |
| *((_DWORD *)v60 + 47) = 0; | |
| v35[48] = 0; | |
| v36 = LoadLibraryA("DDRAW.DLL"); | |
| hLibModule = v36; | |
| if ( v36 ) | |
| { | |
| v34 = GetProcAddress(v36, "DirectDrawCreateEx"); | |
| cbData = (DWORD)v34; | |
| } | |
| else | |
| { | |
| phkResult = (HKEY)1; | |
| } | |
| BytesReturned = 32; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| if ( v34 ) | |
| { | |
| if ( ((int (__stdcall *)(_DWORD, int *, int *, _DWORD))v34)(0, &v56, &v71, 0) ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 4); | |
| } | |
| else | |
| { | |
| BytesReturned = 33; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| memset(&v85, 0, 0x430u); | |
| if ( (*(int (__stdcall **)(int, char *, _DWORD))(*(_DWORD *)v56 + 108))(v56, &v85, 0) ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 8); | |
| v39 = v60; | |
| } | |
| else | |
| { | |
| v37 = &v87; | |
| do | |
| v38 = *v37++; | |
| while ( v38 ); | |
| if ( v37 == v88 ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x10); | |
| } | |
| else | |
| { | |
| sub_5D2C40(v59, &v87, 63); | |
| HIBYTE(v65) = 1; | |
| } | |
| v39 = v60; | |
| v40 = v90; | |
| *((_DWORD *)v60 + 47) = v89; | |
| v39[48] = v40; | |
| } | |
| BytesReturned = 34; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| SystemInfo.dwProcessorType = 0; | |
| SystemInfo.dwAllocationGranularity = 0; | |
| *(_DWORD *)&SystemInfo.wProcessorLevel = 0; | |
| SystemInfo.dwNumberOfProcessors = 268451840; | |
| if ( !(*(int (__stdcall **)(int, DWORD *, BYTE *, CHAR *))(*(_DWORD *)v56 + 92))( | |
| v56, | |
| &SystemInfo.dwNumberOfProcessors, | |
| Data, | |
| &FileName[4]) ) | |
| v39[49] = *(_DWORD *)Data; | |
| (*(void (__stdcall **)(int))(*(_DWORD *)v56 + 8))(v56); | |
| if ( HIBYTE(v65) ) | |
| goto LABEL_137; | |
| } | |
| } | |
| else | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 2); | |
| } | |
| v41 = LoadLibraryA("D3D9.DLL"); | |
| if ( !v41 || (v42 = GetProcAddress(v41, "Direct3DCreate9"), (v43 = ((int (__stdcall *)(signed int))v42)(32)) == 0) ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x100); | |
| goto LABEL_104; | |
| } | |
| if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, char *))(*(_DWORD *)v43 + 20))(v43, 0, 0, &v83) ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x200); | |
| LABEL_104: | |
| BytesReturned = 35; | |
| hKey = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u); | |
| RegCloseKey(hKey); | |
| } | |
| *(_DWORD *)Data = 0; | |
| for ( j = 9; j >= 0; --j ) | |
| { | |
| _snprintf( | |
| &SubKey, | |
| 0x100u, | |
| "System\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\%.4d", | |
| j); | |
| v94 = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, &SubKey, 0, 0x20019u, (PHKEY)Data) ) | |
| break; | |
| _snprintf(&SubKey, 0x100u, "System\\CurrentControlSet\\Services\\Class\\Display\\%.4d", j); | |
| v94 = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, &SubKey, 0, 0x20019u, (PHKEY)Data) ) | |
| break; | |
| } | |
| BytesReturned = 36; | |
| hKey = 0; | |
| if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) ) | |
| { | |
| v49 = (void (__stdcall *)(HKEY))RegCloseKey; | |
| } | |
| else | |
| { | |
| RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u); | |
| v49 = (void (__stdcall *)(HKEY))RegCloseKey; | |
| RegCloseKey(hKey); | |
| } | |
| if ( *(_DWORD *)Data ) | |
| { | |
| *(_DWORD *)v57 = 37; | |
| BytesReturned = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned) ) | |
| { | |
| RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, v57, 4u); | |
| v49((HKEY)BytesReturned); | |
| } | |
| hKey = (HKEY)127; | |
| if ( RegQueryValueExW(*(HKEY *)Data, &off_6816BC, 0, 0, (LPBYTE)v60 + 60, (LPDWORD)&hKey) ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x40); | |
| } | |
| else if ( hKey ) | |
| { | |
| HIBYTE(v65) = 1; | |
| } | |
| else | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x80); | |
| } | |
| hKey = (HKEY)79; | |
| memset(&VersionInformation.szCSDVersion[48], 0, 0x50u); | |
| v3 = RegQueryValueExA( | |
| *(HKEY *)Data, | |
| "MatchingDeviceId", | |
| 0, | |
| 0, | |
| (LPBYTE)&VersionInformation.szCSDVersion[48], | |
| (LPDWORD)&hKey) == 0; | |
| v50 = v60; | |
| if ( v3 ) | |
| { | |
| sscanf(&VersionInformation.szCSDVersion[48], "%*[^_]_%lx%*[^_]_%lx", (char *)v60 + 188, (char *)v60 + 192); | |
| v49(*(HKEY *)Data); | |
| } | |
| else | |
| { | |
| *((_DWORD *)v60 + 47) = 0; | |
| v50[48] = 0; | |
| v49(*(HKEY *)Data); | |
| } | |
| } | |
| else | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x20); | |
| } | |
| if ( !HIBYTE(v65) ) | |
| { | |
| sprintf(&VersionInformation.szCSDVersion[48], "Error code %04x", phkResult); | |
| sub_5D2C10((char *)v60 + 60, &VersionInformation.szCSDVersion[48]); | |
| } | |
| *(_DWORD *)v57 = 38; | |
| BytesReturned = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned) ) | |
| { | |
| RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, v57, 4u); | |
| v49((HKEY)BytesReturned); | |
| } | |
| v59 = 0; | |
| SystemInfo.dwNumberOfProcessors = -1280904224; | |
| SystemInfo.dwProcessorType = 298789699; | |
| SystemInfo.dwAllocationGranularity = -1442783582; | |
| SystemInfo.wProcessorLevel = -18176; | |
| SystemInfo.wProcessorRevision = 22067; | |
| if ( cbData | |
| && !((int (__stdcall *)(_DWORD, HKEY *, DWORD *, _DWORD))cbData)(0, &v59, &SystemInfo.dwNumberOfProcessors, 0) ) | |
| { | |
| *(_DWORD *)v57 = 268451840; | |
| if ( !(*(int (__stdcall **)(HKEY, BYTE *, DWORD *, CHAR *))(*(_DWORD *)v59 + 92))(v59, v57, &cbData, &FileName[4]) ) | |
| *((_DWORD *)v60 + 49) = cbData; | |
| (*(void (__stdcall **)(HKEY))(*(_DWORD *)v59 + 8))(v59); | |
| } | |
| goto LABEL_137; | |
| } | |
| v44 = &v83; | |
| do | |
| v45 = *v44++; | |
| while ( v45 ); | |
| if ( v44 == v84 ) | |
| { | |
| phkResult = (HKEY)((unsigned int)phkResult | 0x400); | |
| } | |
| else | |
| { | |
| sub_5D2C40(v59, &v86, 63); | |
| HIBYTE(v65) = 1; | |
| } | |
| v3 = HIBYTE(v65) == 0; | |
| v46 = v60; | |
| v47 = v91; | |
| *((_DWORD *)v60 + 47) = v90; | |
| v46[48] = v47; | |
| if ( v3 ) | |
| goto LABEL_104; | |
| LABEL_137: | |
| if ( hLibModule ) | |
| FreeLibrary(hLibModule); | |
| hLibModule = (HMODULE)39; | |
| v59 = 0; | |
| if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &v59) ) | |
| { | |
| RegSetValueExA(v59, lpValueName, 0, 4u, (const BYTE *)&hLibModule, 4u); | |
| RegCloseKey(v59); | |
| } | |
| v51 = v60; | |
| *((_DWORD *)v51 + 49) += (unsigned int)(*((_DWORD *)v60 + 11) * *((_DWORD *)v60 + 12) * *((_DWORD *)v60 + 13)) >> 3; | |
| v52 = *((_DWORD *)v51 + 49); | |
| if ( v52 >= 0x1000000 ) | |
| { | |
| *(_DWORD *)&FileName[4] = *((_DWORD *)v51 + 49); | |
| v54 = ceil((double)v52 * 0.0000001192092895507812); | |
| hLibModule = (HMODULE)(v65 | 0xC00); | |
| *(_QWORD *)FileName = (signed __int64)v54; | |
| *((_DWORD *)v51 + 49) = 8 * (unsigned __int64)(signed __int64)v54; | |
| } | |
| else | |
| { | |
| *(_DWORD *)&FileName[4] = *((_DWORD *)v51 + 49); | |
| v53 = ceil((double)v52 * 0.000000476837158203125); | |
| hLibModule = (HMODULE)(v65 | 0xC00); | |
| *(_QWORD *)FileName = (signed __int64)v53; | |
| *((_DWORD *)v51 + 49) = 2 * (unsigned __int64)(signed __int64)v53; | |
| } | |
| hLibModule = 0; | |
| BytesReturned = 0; | |
| result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned); | |
| if ( !result ) | |
| { | |
| RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, (const BYTE *)&hLibModule, 4u); | |
| result = RegCloseKey((HKEY)BytesReturned); | |
| } | |
| return result; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment