Skip to content

Commit 8e51abd

Browse files
committed
OnlineChecks: Update VirusTotal menu text, Fix memory leak
1 parent b40fc37 commit 8e51abd

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

plugins/OnlineChecks/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ VOID NTAPI MainMenuInitializingCallback(
233233
onlineMenuItem = PhPluginCreateEMenuItem(PluginInstance, 0, 0, L"Online Checks", NULL);
234234
PhInsertEMenuItem(onlineMenuItem, enableMenuItem = PhPluginCreateEMenuItem(PluginInstance, 0, ENABLE_SERVICE_VIRUSTOTAL, L"Enable VirusTotal scanning", NULL), -1);
235235
PhInsertEMenuItem(onlineMenuItem, PhPluginCreateEMenuItem(PluginInstance, PH_EMENU_SEPARATOR, 0, NULL, NULL), -1);
236-
PhInsertEMenuItem(onlineMenuItem, PhPluginCreateEMenuItem(PluginInstance, 0, MENUITEM_VIRUSTOTAL_QUEUE, L"Upload unknown files to VirusTotal...", NULL), -1);
237236
PhInsertEMenuItem(onlineMenuItem, PhPluginCreateEMenuItem(PluginInstance, 0, MENUITEM_VIRUSTOTAL_UPLOAD_FILE, L"Upload file to VirusTotal...", NULL), -1);
237+
PhInsertEMenuItem(onlineMenuItem, PhPluginCreateEMenuItem(PluginInstance, 0, MENUITEM_VIRUSTOTAL_QUEUE, L"Upload unknown files to VirusTotal...", NULL), -1);
238238
PhInsertEMenuItem(menuInfo->Menu, onlineMenuItem, -1);
239239

240240
if (VirusTotalScanningEnabled)
@@ -449,7 +449,7 @@ VOID NTAPI TreeNewMessageCallback(
449449

450450
if (!VirusTotalScanningEnabled)
451451
{
452-
static PH_STRINGREF disabledText = PH_STRINGREF_INIT(L"VirusTotal disabled");
452+
static PH_STRINGREF disabledText = PH_STRINGREF_INIT(L"Scanning disabled");
453453

454454
GetTextExtentPoint32(
455455
customDraw->Dc,

plugins/OnlineChecks/onlnchk.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@
5656

5757
extern PPH_PLUGIN PluginInstance;
5858

59-
VOID ShowOptionsDialog(
60-
_In_opt_ HWND Parent
61-
);
62-
6359
typedef struct _SERVICE_INFO
6460
{
6561
ULONG Id;
@@ -152,6 +148,10 @@ typedef struct _UPLOAD_CONTEXT
152148
PPH_STRING LastAnalysisAgo;
153149
} UPLOAD_CONTEXT, *PUPLOAD_CONTEXT;
154150

151+
VOID ShowOptionsDialog(
152+
_In_opt_ HWND Parent
153+
);
154+
155155
NTSTATUS UploadFileThreadStart(
156156
_In_ PVOID Parameter
157157
);
@@ -224,7 +224,7 @@ NTSTATUS HashFileAndResetPosition(
224224
_In_ HANDLE FileHandle,
225225
_In_ PLARGE_INTEGER FileSize,
226226
_In_ PH_HASH_ALGORITHM Algorithm,
227-
_Out_ PVOID Hash
227+
_Out_ PPH_STRING *HashString
228228
);
229229

230230
typedef struct _VIRUSTOTAL_API_RESULT

plugins/OnlineChecks/upload.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,20 +260,21 @@ NTSTATUS HashFileAndResetPosition(
260260
_In_ HANDLE FileHandle,
261261
_In_ PLARGE_INTEGER FileSize,
262262
_In_ PH_HASH_ALGORITHM Algorithm,
263-
_Out_ PVOID Hash
263+
_Out_ PPH_STRING *HashString
264264
)
265265
{
266266
NTSTATUS status;
267267
IO_STATUS_BLOCK iosb;
268268
PH_HASH_CONTEXT hashContext;
269+
PPH_STRING hashString;
269270
ULONG64 bytesRemaining;
270271
FILE_POSITION_INFORMATION positionInfo;
271272
LONG priority;
272-
IO_PRIORITY_HINT ioPriority;
273273
LONG newpriority;
274+
IO_PRIORITY_HINT ioPriority;
274275
IO_PRIORITY_HINT newioPriority;
275276
UCHAR buffer[PAGE_SIZE];
276-
277+
277278
bytesRemaining = FileSize->QuadPart;
278279

279280
PhInitializeHash(&hashContext, Algorithm);
@@ -311,19 +312,26 @@ NTSTATUS HashFileAndResetPosition(
311312

312313
if (NT_SUCCESS(status))
313314
{
315+
UCHAR hash[32];
316+
314317
switch (Algorithm)
315318
{
316319
case Md5HashAlgorithm:
317-
PhFinalHash(&hashContext, Hash, 16, NULL);
320+
PhFinalHash(&hashContext, hash, 16, NULL);
321+
hashString = PhBufferToHexString(hash, 16);
318322
break;
319323
case Sha1HashAlgorithm:
320-
PhFinalHash(&hashContext, Hash, 20, NULL);
324+
PhFinalHash(&hashContext, hash, 20, NULL);
325+
hashString = PhBufferToHexString(hash, 20);
321326
break;
322327
case Sha256HashAlgorithm:
323-
PhFinalHash(&hashContext, Hash, 32, NULL);
328+
PhFinalHash(&hashContext, hash, 32, NULL);
329+
hashString = PhBufferToHexString(hash, 32);
324330
break;
325331
}
326332

333+
*HashString = hashString;
334+
327335
positionInfo.CurrentByteOffset.QuadPart = 0;
328336
status = NtSetInformationFile(
329337
FileHandle,
@@ -1032,16 +1040,14 @@ NTSTATUS UploadCheckThreadStart(
10321040
{
10331041
PSTR uploadUrl = NULL;
10341042
PSTR quote = NULL;
1035-
UCHAR hash[32];
10361043
PVOID rootJsonObject;
10371044

1038-
if (!NT_SUCCESS(status = HashFileAndResetPosition(fileHandle, &fileSize64, Sha256HashAlgorithm, hash)))
1045+
if (!NT_SUCCESS(status = HashFileAndResetPosition(fileHandle, &fileSize64, Sha256HashAlgorithm, &hashString)))
10391046
{
10401047
RaiseUploadError(context, L"Unable to hash the file", RtlNtStatusToDosError(status));
10411048
goto CleanupExit;
10421049
}
10431050

1044-
hashString = PhBufferToHexString(hash, 32);
10451051
subObjectName = PhConcatStrings2(L"/file/upload/?sha256=", hashString->Buffer);
10461052

10471053
if (PhIsNullOrEmptyString(context->KeyString))

plugins/OnlineChecks/virustotal.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ PVIRUSTOTAL_FILE_HASH_ENTRY VirusTotalAddCacheResult(
8989
result = PhAllocate(sizeof(VIRUSTOTAL_FILE_HASH_ENTRY));
9090
memset(result, 0, sizeof(VIRUSTOTAL_FILE_HASH_ENTRY));
9191

92+
PhReferenceObject(FileName);
93+
result->FileName = FileName;
94+
result->FileNameAnsi = PhConvertUtf16ToMultiByte(PhGetString(FileName));
9295
result->Extension = Extension;
93-
result->FileName = PhDuplicateString(FileName);
9496

9597
PhAcquireQueuedLockExclusive(&ProcessListLock);
9698
PhAddItemList(VirusTotalList, result);
@@ -226,7 +228,7 @@ VOID VirusTotalBuildJsonArray(
226228
{
227229
HANDLE fileHandle;
228230
FILE_NETWORK_OPEN_INFORMATION fileAttributeInfo;
229-
UCHAR hash[32];
231+
PPH_STRING hashString = NULL;
230232

231233
if (NT_SUCCESS(PhQueryFullAttributesFileWin32(
232234
Entry->FileName->Buffer,
@@ -250,20 +252,19 @@ VOID VirusTotalBuildJsonArray(
250252
fileHandle,
251253
&fileAttributeInfo.EndOfFile,
252254
Sha256HashAlgorithm,
253-
hash
255+
&hashString
254256
)))
255257
{
256258
PVOID entry;
257-
258-
Entry->FileHash = PhBufferToHexString(hash, 32);
259-
Entry->FileHashAnsi = PhConvertUtf16ToMultiByte(PhGetStringOrEmpty(Entry->FileHash));
260-
Entry->FileNameAnsi = PhConvertUtf16ToMultiByte(PhGetStringOrEmpty(Entry->FileName));
259+
260+
Entry->FileHash = hashString;
261+
Entry->FileHashAnsi = PhConvertUtf16ToMultiByte(Entry->FileHash->Buffer);
261262

262263
entry = CreateJsonObject();
263264
JsonAddObject(entry, "autostart_location", "");
264265
JsonAddObject(entry, "autostart_entry", "");
265-
JsonAddObject(entry, "hash", Entry->FileHashAnsi ? Entry->FileHashAnsi->Buffer : "");
266-
JsonAddObject(entry, "image_path", Entry->FileNameAnsi ? Entry->FileNameAnsi->Buffer : "");
266+
JsonAddObject(entry, "hash", Entry->FileHashAnsi->Buffer);
267+
JsonAddObject(entry, "image_path", Entry->FileNameAnsi->Buffer);
267268
JsonAddObject(entry, "creation_datetime", Entry->CreationTime ? Entry->CreationTime->Buffer : "");
268269
JsonArrayAddObject(JsonArray, entry);
269270
}
@@ -290,7 +291,9 @@ PSTR VirusTotalSendHttpRequest(
290291
phVersion = PhGetPhVersion();
291292
userAgent = PhConcatStrings2(L"ProcessHacker_", phVersion->Buffer);
292293

294+
#ifdef _DEBUG
293295
WinHttpGetIEProxyConfigForCurrentUser(&proxyConfig);
296+
#endif
294297

295298
if (!(httpSessionHandle = WinHttpOpen(
296299
userAgent->Buffer,
@@ -438,7 +441,9 @@ PVIRUSTOTAL_FILE_REPORT_RESULT VirusTotalSendHttpFileReportRequest(
438441
phVersion = PhGetPhVersion();
439442
userAgent = PhConcatStrings2(L"ProcessHacker_", phVersion->Buffer);
440443

444+
#ifdef _DEBUG
441445
WinHttpGetIEProxyConfigForCurrentUser(&proxyConfig);
446+
#endif
442447

443448
if (!(httpSessionHandle = WinHttpOpen(
444449
userAgent->Buffer,

0 commit comments

Comments
 (0)