MCPcopy Create free account
hub / github.com/SickleSec/GhostWolf / GetBrowserVersion

Function GetBrowserVersion

Ghostwolf/Application.cpp:85–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

83
84#pragma comment(lib, "version.lib")
85BOOL GetBrowserVersion(HANDLE hProcess, BrowserVersion& browserVersion) {
86
87 LPWSTR filePath = (wchar_t*)malloc(sizeof(wchar_t) * MAX_PATH);
88 if (filePath == NULL || GetModuleFileNameEx(hProcess, NULL, filePath, MAX_PATH) == 0) {
89 PRINT("GetModuleFileNameEx failed");
90 free(filePath);
91 return FALSE;
92 }
93 DWORD dwHandle;
94 DWORD dwSize = GetFileVersionInfoSize(filePath, &dwHandle);
95 if (dwSize == 0)
96 {
97 PRINT("GetFileVersionInfoSize failed");
98 free(filePath);
99 return FALSE;
100 }
101
102 BYTE* buffer = (BYTE*)malloc(dwSize);
103 if (buffer == nullptr || !GetFileVersionInfo(filePath, 0, dwSize, buffer))
104 {
105 PRINT("GetFileVersionInfo failed");
106 free(buffer);
107 free(filePath);
108 return FALSE;
109 }
110
111 free(filePath);
112
113 VS_FIXEDFILEINFO* fileinfo;
114 UINT len = 0;
115 if (!VerQueryValue(buffer, TEXT("\\"), reinterpret_cast<void**>(&fileinfo), &len))
116 {
117 PRINT("VerQueryValue failed");
118 free(buffer);
119 return FALSE;
120 }
121
122 if (len == 0)
123 {
124 PRINT("VerQueryValue returned empty VS_FIXEDFILEINFO");
125 free(buffer);
126 return FALSE;
127 }
128
129 PRINT("[*] Application Version: %hu.%hu.%hu.%hu\n\n",
130 HIWORD(fileinfo->dwProductVersionMS),
131 LOWORD(fileinfo->dwProductVersionMS),
132 HIWORD(fileinfo->dwProductVersionLS),
133 LOWORD(fileinfo->dwProductVersionLS)
134 );
135 browserVersion.highMajor = HIWORD(fileinfo->dwProductVersionMS);
136 browserVersion.lowMajor = LOWORD(fileinfo->dwProductVersionMS);
137 browserVersion.highMinor = HIWORD(fileinfo->dwProductVersionLS);
138 browserVersion.lowMinor = LOWORD(fileinfo->dwProductVersionLS);
139
140 free(buffer);
141 return TRUE;
142}

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected