From ec7a8ba88974c64e0e5a32c2b27cc45a85bcbec4 Mon Sep 17 00:00:00 2001 From: ufrisk Date: Sat, 14 Jul 2018 14:52:50 +0200 Subject: [PATCH] Version 3.4 --- pcileech/help.c | 6 +- pcileech/kmd.c | 12 ++++ pcileech/statistics.c | 14 ++--- pcileech/vfs.c | 4 +- pcileech/vmm.c | 44 +++++++++++--- pcileech/vmm.h | 14 ++++- pcileech/vmmproc.c | 25 +++++--- pcileech/vmmvfs.c | 117 +++++++++++++++++++++++++++++++++--- pcileech/vmmvfs.h | 2 +- pcileech_files/pcileech.exe | Bin 371712 -> 373248 bytes readme.md | 4 ++ 11 files changed, 203 insertions(+), 39 deletions(-) diff --git a/pcileech/help.c b/pcileech/help.c index 56fdbc2..30f0fd6 100644 --- a/pcileech/help.c +++ b/pcileech/help.c @@ -114,8 +114,8 @@ VOID Help_ShowGeneral() " Option has no value. Example: -pt. Used in conjunction with \n" \ " -kmd option to trigger KMD insertion by page table hijack. \n" \ " -cr3 : base address of page table (PML4) / CR3 CPU register. \n" \ - " -efibase : base address of EFI_SYSTEM_TABLE (IBI SYST). Used when inserting \n" \ - " UEFI 'kernel' modules. \n" \ + " -efibase : base address of EFI table when inserting select kernel modules. \n" \ + " EFI_SYSTEM_TABLE(IBI SYST) == UEFI ; RUNTSERV == LINUX RUNTSERV EFI. \n" \ " -kmd : address of already loaded kernel module helper (KMD). \n" \ " ALTERNATIVELY \n" \ " kernel module to use, see list below for choices: \n" \ @@ -143,7 +143,7 @@ VOID Help_ShowInfo() printf( " PCILEECH INFORMATION \n" \ " PCILeech (c) 2016-2018 Ulf Frisk \n" \ - " Version: 3.3 \n" \ + " Version: 3.4 \n" \ " License: GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 \n" \ " Contact information: pcileech@frizk.net \n" \ " System requirements: 64-bit Windows 7, 10 or Linux. \n" \ diff --git a/pcileech/kmd.c b/pcileech/kmd.c index 368ad3a..3d0f5f0 100644 --- a/pcileech/kmd.c +++ b/pcileech/kmd.c @@ -124,6 +124,18 @@ BOOL KMD_FindSignature_EfiRuntimeServices(_Inout_ PPCILEECH_CONTEXT ctx, _Out_ P if(!(pbBuffer16M = LocalAlloc(0, 0x01000000))) { return FALSE; } + // Option 1: User-supplied efibase option (= base of EFI RUNTIME SERVICES table (RUNTSERV)). + if(ctx->cfg->qwEFI_IBI_SYST) { // technically not EFI_IBI_SYST table but we use this user-supplied option anyway here. + result = + ((ctx->cfg->qwEFI_IBI_SYST & 0xfff) > 0x18) && + ((ctx->cfg->qwEFI_IBI_SYST & 0xfff) < (0x1000 - 0x88)) && + DeviceReadMEM(ctx, ctx->cfg->qwEFI_IBI_SYST & ~0xfff, pbBuffer16M, 0x1000, PCILEECH_MEM_FLAG_RETRYONFAIL) && + IS_SIGNATURE_EFI_RUNTIME_SERVICES(pbBuffer16M + (ctx->cfg->qwEFI_IBI_SYST & 0xfff)); + LocalFree(pbBuffer16M); + *pqwAddrPhys = ctx->cfg->qwEFI_IBI_SYST; + return result; + } + // Option 2: Scan for EFI RUNTIME SERVICES table (RUNTSERV). ctx->cfg->qwAddrMin &= ~0xfff; ctx->cfg->qwAddrMax = (ctx->cfg->qwAddrMax + 1) & ~0xfff; if(ctx->cfg->qwAddrMax == 0) { diff --git a/pcileech/statistics.c b/pcileech/statistics.c index b03695b..3f93061 100644 --- a/pcileech/statistics.c +++ b/pcileech/statistics.c @@ -1,6 +1,6 @@ // statistics.c : implementation of statistics related functionality. // -// (c) Ulf Frisk, 2016, 2017 +// (c) Ulf Frisk, 2016-2018 // Author: Ulf Frisk, pcileech@frizk.net // #include "statistics.h" @@ -10,14 +10,14 @@ VOID _PageStatPrintMemMap(_Inout_ PPAGE_STATISTICS ps) BOOL fIsLinePrinted = FALSE; QWORD i, qwAddrBase, qwAddrEnd; if(!ps->i.fIsFirstPrintCompleted) { - printf(" Memory Map: \n START END #PAGES\n"); + printf(" Memory Map: \n START END #PAGES \n"); } if(!ps->i.MemMapIdx && !ps->i.MemMap[0]) { - printf(" \n \n"); + printf(" \n \n"); return; } if(ps->i.MemMapPrintCommitIdx >= PAGE_STATISTICS_MEM_MAP_MAX_ENTRY - 4) { - printf(" Maximum number of memory map entries reached.\n \n"); + printf(" Maximum number of memory map entries reached. \n \n"); return; } qwAddrBase = ps->i.qwAddrBase + ps->i.MemMapPrintCommitPages * 0x1000; @@ -32,7 +32,7 @@ VOID _PageStatPrintMemMap(_Inout_ PPAGE_STATISTICS ps) if((i % 2) == 0) { fIsLinePrinted = TRUE; printf( - " %016llx - %016llx %08x\n", + " %016llx - %016llx %08x \n", qwAddrBase, qwAddrEnd - 1, ps->i.MemMap[i]); @@ -45,9 +45,9 @@ VOID _PageStatPrintMemMap(_Inout_ PPAGE_STATISTICS ps) qwAddrBase = qwAddrEnd; } if(!fIsLinePrinted) { // print extra line for formatting reasons. - printf(" (No memory successfully read yet) \n"); + printf(" (No memory successfully read yet) \n"); } - printf(" \n"); + printf(" \n"); } VOID _PageStatShowUpdate(_Inout_ PPAGE_STATISTICS ps) diff --git a/pcileech/vfs.c b/pcileech/vfs.c index 4dcd160..2013208 100644 --- a/pcileech/vfs.c +++ b/pcileech/vfs.c @@ -835,7 +835,7 @@ VfsCallback_ReadFile(LPCWSTR wcsFileName, LPVOID Buffer, DWORD BufferLength, LPD if(!_wcsnicmp(wcsFileName, L"\\files\\", 7) && pds->fKMD) { return _VfsReadFile_File(wcsFileName, Buffer, BufferLength, ReadLength, Offset, DokanFileInfo); } - if(pds->fVMM && (!_wcsnicmp(wcsFileName, L"\\proc\\name\\", 1) || !_wcsnicmp(wcsFileName, L"\\proc\\pid\\", 10))) { + if(pds->fVMM && (!_wcsnicmp(wcsFileName, L"\\proc\\name\\", 11) || !_wcsnicmp(wcsFileName, L"\\proc\\pid\\", 10))) { return VmmVfsReadFile(pds->ctx, wcsFileName, Buffer, BufferLength, ReadLength, Offset); } return STATUS_FILE_INVALID; @@ -865,7 +865,7 @@ VfsCallback_WriteFile(LPCWSTR wcsFileName, LPCVOID Buffer, DWORD NumberOfBytesTo if(!_wcsnicmp(wcsFileName, L"\\files\\", 7) && pds->fKMD) { return _VfsWriteFile_File(wcsFileName, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten, Offset, DokanFileInfo); } - if(pds->fVMM && (!_wcsnicmp(wcsFileName, L"\\proc\\name\\", 1) || !_wcsnicmp(wcsFileName, L"\\proc\\pid\\", 10))) { + if(pds->fVMM && (!_wcsnicmp(wcsFileName, L"\\proc\\name\\", 11) || !_wcsnicmp(wcsFileName, L"\\proc\\pid\\", 10))) { return VmmVfsWriteFile(pds->ctx, wcsFileName, (PBYTE)Buffer, NumberOfBytesToWrite, NumberOfBytesWritten, Offset); } return STATUS_FILE_INVALID; diff --git a/pcileech/vmm.c b/pcileech/vmm.c index 64027d0..a646c82 100644 --- a/pcileech/vmm.c +++ b/pcileech/vmm.c @@ -739,13 +739,15 @@ BOOL VmmReadPhysicalPage(_Inout_ PVMM_CONTEXT ctxVmm, _In_ QWORD qwPA, _Inout_by return FALSE; } -VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _Inout_ PPDMA_IO_SCATTER_HEADER ppDMAsVirt, _In_ DWORD cpDMAsVirt) +VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _Inout_ PPDMA_IO_SCATTER_HEADER ppDMAsVirt, _In_ DWORD cpDMAsVirt, _In_ QWORD flags) { BOOL result; QWORD i, j, cPagesPerScatterRead, qwVA, qwPA, cpDMAsPhys = 0; PDMA_IO_SCATTER_HEADER pDMA_Virt, pDMA_Phys; PVMM_CACHE_ENTRY ppDMAsPhysCacheEntry[0x48]; PDMA_IO_SCATTER_HEADER ppDMAsPhys[0x48]; + DMA_IO_SCATTER_HEADER pDMAsPhys_NoCache[0x48]; + BOOL fCacheDisable = flags & VMM_FLAG_NOCACHE; // 1: translate virt2phys for(i = 0; i < cpDMAsVirt; i++) { pDMA_Virt = ppDMAsVirt[i]; @@ -753,9 +755,37 @@ VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProce (QWORD)pDMA_Virt->pvReserved1 = (result && (pDMA_Virt->cbMax == 0x1000)) ? 0 : 1; (QWORD)pDMA_Virt->pvReserved2 = qwPA; } - // 2: translate virt2phys and retrieve data loop + // 2: retrieve data loop below cpDMAsPhys = 0; cPagesPerScatterRead = min(0x48, ((ctxVmm->ctxPcileech->cfg->qwMaxSizeDmaIo & ~0xfff) >> 12)); + // 2.1: retrieve data loop - read strategy: non-cached read + if(fCacheDisable) { + for(i = 0; i < cpDMAsVirt; i++) { + pDMA_Virt = ppDMAsVirt[i]; + if(!(QWORD)pDMA_Virt->pvReserved1) { // phys2virt translation exists + pDMA_Phys = &pDMAsPhys_NoCache[cpDMAsPhys]; + pDMA_Phys->pb = pDMA_Virt->pb; + pDMA_Phys->cbMax = pDMA_Virt->cbMax; + pDMA_Phys->cb = 0; + pDMA_Phys->qwA = (QWORD)pDMA_Virt->pvReserved2; + (QWORD)pDMA_Phys->pvReserved1 = i; + ppDMAsPhys[cpDMAsPhys] = pDMA_Phys; + cpDMAsPhys++; + } + // physical read if requesting queue is full or if this is last + if(cpDMAsPhys && ((cpDMAsPhys == cPagesPerScatterRead) || (i == cpDMAsVirt - 1))) { + // physical memory access + DeviceReadScatterDMA(ctxVmm->ctxPcileech, ppDMAsPhys, (DWORD)cpDMAsPhys, NULL); + for(j = 0; j < cpDMAsPhys; j++) { + pDMA_Phys = ppDMAsPhys[j]; + ppDMAsVirt[(QWORD)pDMA_Phys->pvReserved1]->cb = pDMA_Phys->cb; + } + cpDMAsPhys = 0; + } + } + return; + } + // 2.2: retrieve data loop - read strategy: cached read (standard/preferred) for(i = 0; i < cpDMAsVirt; i++) { // retrieve from cache (if found) pDMA_Virt = ppDMAsVirt[i]; @@ -777,7 +807,7 @@ VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProce cpDMAsPhys++; } } - // physical read if requesting queue is full of if this is last + // physical read if requesting queue is full or if this is last if(cpDMAsPhys && ((cpDMAsPhys == cPagesPerScatterRead) || (i == cpDMAsVirt - 1))) { // SPECULATIVE FUTURE READ IF NEGLIGIBLE PERFORMANCE LOSS while(cpDMAsPhys < min(0x18, cPagesPerScatterRead)) { @@ -875,7 +905,7 @@ BOOL VmmWrite(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWOR return (cbWrite == cb); } -VOID VmmReadEx(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD qwVA, _Inout_ PBYTE pb, _In_ DWORD cb, _Out_opt_ PDWORD pcbReadOpt) +VOID VmmReadEx(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD qwVA, _Inout_ PBYTE pb, _In_ DWORD cb, _Out_opt_ PDWORD pcbReadOpt, _In_ QWORD flags) { DWORD cbP, cDMAs, cbRead = 0; PBYTE pbBuffer; @@ -901,7 +931,7 @@ VOID VmmReadEx(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWO pDMAs[cDMAs - 1].pb = pbBuffer + 0x1000; } // Read VMM and handle result - VmmReadScatterVirtual(ctxVmm, pProcess, ppDMAs, cDMAs); + VmmReadScatterVirtual(ctxVmm, pProcess, ppDMAs, cDMAs, flags); for(i = 0; i < cDMAs; i++) { if(pDMAs[i].cb == 0x1000) { cbRead += 0x1000; @@ -951,7 +981,7 @@ BOOL VmmReadString_Unicode2Ansi(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS p BOOL VmmRead(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD qwVA, _Out_ PBYTE pb, _In_ DWORD cb) { DWORD cbRead; - VmmReadEx(ctxVmm, pProcess, qwVA, pb, cb, &cbRead); + VmmReadEx(ctxVmm, pProcess, qwVA, pb, cb, &cbRead, 0); return (cbRead == cb); } @@ -963,7 +993,7 @@ BOOL VmmReadPage(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ Q pDMA->pb = pbPage; pDMA->cb = 0; pDMA->cbMax = 0x1000; - VmmReadScatterVirtual(ctxVmm, pProcess, &pDMA, 1); + VmmReadScatterVirtual(ctxVmm, pProcess, &pDMA, 1, 0); return (pDMA->cb == 0x1000); } diff --git a/pcileech/vmm.h b/pcileech/vmm.h index 1b6cb67..adf50ca 100644 --- a/pcileech/vmm.h +++ b/pcileech/vmm.h @@ -27,6 +27,8 @@ #define VMM_CACHE_TLB_ENTRIES 0x4000 // -> 64MB of cached data #define VMM_CACHE_PHYS_ENTRIES 0x4000 // -> 64MB of cached data +#define VMM_FLAG_NOCACHE 0x0001 // do not use the data cache (force reading from DMA device) + typedef struct tdVMM_MEMMAP_ENTRY { QWORD AddrBase; QWORD cPages; @@ -60,6 +62,7 @@ typedef struct tdVMM_PROCESS { BOOL _i_fMigrated; BOOL fUserOnly; BOOL fSpiderPageTableDone; + BOOL fFileCacheDisabled; // memmap related pointers (free must be called separately) QWORD cMemMap; PVMM_MEMMAP_ENTRY pMemMap; @@ -137,6 +140,11 @@ typedef struct tdVMM_CONTEXT { struct { BOOL fEnabled; HANDLE hThread; + DWORD cMs_TickPeriod; + DWORD cTick_Phys; + DWORD cTick_TLB; + DWORD cTick_ProcPartial; + DWORD cTick_ProcTotal; } ThreadProcCache; } VMM_CONTEXT, *PVMM_CONTEXT; @@ -198,8 +206,9 @@ BOOL VmmRead(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD * -- pb * -- cb * -- pcbRead +* -- flags = flags as in VMM_FLAG_* */ -VOID VmmReadEx(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD qwVA, _Inout_ PBYTE pb, _In_ DWORD cb, _Out_opt_ PDWORD pcbReadOpt); +VOID VmmReadEx(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ QWORD qwVA, _Inout_ PBYTE pb, _In_ DWORD cb, _Out_opt_ PDWORD pcbReadOpt, _In_ QWORD flags); /* * Read a single 4096-byte page of virtual memory. @@ -217,8 +226,9 @@ BOOL VmmReadPage(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ Q * -- pProcess * -- ppDMAsVirt * -- cpDMAsVirt +* -- flags = flags as in VMM_FLAG_*, [VMM_FLAG_NOCACHE for supression of data (not tlb) caching] */ -VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _Inout_ PPDMA_IO_SCATTER_HEADER ppDMAsVirt, _In_ DWORD cpDMAsVirt); +VOID VmmReadScatterVirtual(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _Inout_ PPDMA_IO_SCATTER_HEADER ppDMAsVirt, _In_ DWORD cpDMAsVirt, _In_ QWORD flags); /* * Read a single 4096-byte page of physical memory. diff --git a/pcileech/vmmproc.c b/pcileech/vmmproc.c index de7c94f..fed57d3 100644 --- a/pcileech/vmmproc.c +++ b/pcileech/vmmproc.c @@ -196,7 +196,7 @@ VOID VmmProcWindows_PE_LoadIAT_DisplayBuffer(_Inout_ PVMM_CONTEXT ctxVmm, _Inout if(pModule->SizeOfImage > 0x01000000) { return; } cbModule = pModule->SizeOfImage; if(!(pbModule = LocalAlloc(LMEM_ZEROINIT, cbModule))) { return; } - VmmReadEx(ctxVmm, pProcess, pModule->BaseAddress, pbModule, cbModule, &cbRead); + VmmReadEx(ctxVmm, pProcess, pModule->BaseAddress, pbModule, cbModule, &cbRead, 0); if(cbRead <= 0x2000) { goto cleanup; } // load both 32/64 bit ntHeader (only one will be valid) if(!(ntHeader64 = VmmProcWindows_GetVerifyHeaderPE(ctxVmm, pProcess, pModule->BaseAddress, pbModuleHeader, &fHdr32))) { goto cleanup; } @@ -533,7 +533,7 @@ QWORD VmmProcWindows_FindNtoskrnl(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS if(!pb) { goto cleanup; } // Scan back in 2MB chunks a time, (ntoskrnl.exe is loaded in 2MB pages). for(vaBase = vaKernelEntry & ~0x1fffff; vaBase + 0x02000000 > vaKernelEntry; vaBase -= 0x200000) { - VmmReadEx(ctxVmm, pSystemProcess, vaBase, pb, 0x200000, &cbRead); + VmmReadEx(ctxVmm, pSystemProcess, vaBase, pb, 0x200000, &cbRead, 0); // only fail here if all virtual memory in read fails. reason is that kernel is // properly mapped in memory (with NX MZ header in separate page) with empty // space before next valid kernel pages when running Virtualization Based Security. @@ -713,7 +713,7 @@ VOID VmmProcWindows_ScanHeaderPE(_Inout_ PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS } } // 3: read all MZ header candicates previously selected and try load name from them (after read is successful) - VmmReadScatterVirtual(ctxVmm, pProcess, ppDMAs, cDMAs); + VmmReadScatterVirtual(ctxVmm, pProcess, ppDMAs, cDMAs, 0); for(i = 0; i < cDMAs; i++) { if(pMaps[i].dma.cb == 0x1000) { pMap = pMaps + i; @@ -1041,7 +1041,7 @@ QWORD VmmProcPHYS_ScanWindowsKernel_LargePages(_Inout_ PVMM_CONTEXT ctxVmm, _In_ // try locate ntoskrnl.exe base inside suggested area pbBuffer = (PBYTE)LocalAlloc(0, cbSize); if(!pbBuffer) { return 0; } - VmmReadEx(ctxVmm, pSystemProcess, vaBase, pbBuffer, (DWORD)cbSize, NULL); + VmmReadEx(ctxVmm, pSystemProcess, vaBase, pbBuffer, (DWORD)cbSize, NULL, 0); for(p = 0; p < cbSize; p += 0x1000) { if(*(PWORD)(pbBuffer + p) != 0x5a4d) { continue; } // check if module header contains INITKDBG and POOLCODE @@ -1149,8 +1149,8 @@ BOOL VmmProcUserCR3TryInitialize(_Inout_ PVMM_CONTEXT ctxVmm) #define VMMPROC_UPDATERTHREAD_PERIOD 50 #define VMMPROC_UPDATERTHREAD_PHYSCACHE (500 / VMMPROC_UPDATERTHREAD_PERIOD) // 0.5s +#define VMMPROC_UPDATERTHREAD_TLB (5 * 1000 / VMMPROC_UPDATERTHREAD_PERIOD) // 5s #define VMMPROC_UPDATERTHREAD_PROC_REFRESHLIST (5 * 1000 / VMMPROC_UPDATERTHREAD_PERIOD) // 5s -#define VMMPROC_UPDATERTHREAD_TLB (15 * 1000 / VMMPROC_UPDATERTHREAD_PERIOD) // 15s #define VMMPROC_UPDATERTHREAD_PROC_REFRESHTOTAL (15 * 1000 / VMMPROC_UPDATERTHREAD_PERIOD) // 15s DWORD VmmProcCacheUpdaterThread(_Inout_ PVMM_CONTEXT ctxVmm) @@ -1162,13 +1162,18 @@ DWORD VmmProcCacheUpdaterThread(_Inout_ PVMM_CONTEXT ctxVmm) if(ctxVmm->ctxPcileech->cfg->fVerbose) { printf("VmmProc: Start periodic cache flushing.\n"); } + ctxVmm->ThreadProcCache.cMs_TickPeriod = VMMPROC_UPDATERTHREAD_PERIOD; + ctxVmm->ThreadProcCache.cTick_Phys = VMMPROC_UPDATERTHREAD_PHYSCACHE; + ctxVmm->ThreadProcCache.cTick_TLB = VMMPROC_UPDATERTHREAD_TLB; + ctxVmm->ThreadProcCache.cTick_ProcPartial = VMMPROC_UPDATERTHREAD_PROC_REFRESHLIST; + ctxVmm->ThreadProcCache.cTick_ProcTotal = VMMPROC_UPDATERTHREAD_PROC_REFRESHTOTAL; while(ctxVmm->ThreadProcCache.fEnabled) { - Sleep(VMMPROC_UPDATERTHREAD_PERIOD); + Sleep(ctxVmm->ThreadProcCache.cMs_TickPeriod); i++; - fTLB = !(i % VMMPROC_UPDATERTHREAD_PHYSCACHE); - fPHYS = !(i % VMMPROC_UPDATERTHREAD_PHYSCACHE); - fProcTotal = !(i % VMMPROC_UPDATERTHREAD_PROC_REFRESHTOTAL); - fProcList = !(i % VMMPROC_UPDATERTHREAD_PROC_REFRESHLIST) && !fProcTotal; + fTLB = !(i % ctxVmm->ThreadProcCache.cTick_TLB); + fPHYS = !(i % ctxVmm->ThreadProcCache.cTick_Phys); + fProcTotal = !(i % ctxVmm->ThreadProcCache.cTick_ProcTotal); + fProcList = !(i % ctxVmm->ThreadProcCache.cTick_ProcPartial) && !fProcTotal; EnterCriticalSection(&ctxVmm->MasterLock); // PHYS / TLB cache clear if(fPHYS || fTLB) { diff --git a/pcileech/vmmvfs.c b/pcileech/vmmvfs.c index e16f82e..a83ec9a 100644 --- a/pcileech/vmmvfs.c +++ b/pcileech/vmmvfs.c @@ -113,6 +113,13 @@ NTSTATUS VmmVfsReadFile_FromDWORD(_In_ DWORD dwValue, _Out_ LPVOID pb, _In_ DWOR return VmmVfsReadFile_FromBuffer(pbBuffer, cbBuffer, pb, cb, pcbRead, cbOffset); } +NTSTATUS VmmVfsReadFile_FromBOOL(_In_ BOOL fValue, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbRead, _In_ QWORD cbOffset) +{ + BYTE pbBuffer[1]; + pbBuffer[0] = fValue ? '1' : '0'; + return VmmVfsReadFile_FromBuffer(pbBuffer, 1, pb, cb, pcbRead, cbOffset); +} + NTSTATUS VmmVfsReadFile_Virt2Phys(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ LPSTR szFile, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbRead, _In_ QWORD cbOffset) { BYTE iPML = 0; @@ -175,7 +182,7 @@ NTSTATUS VmmVfsReadFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath if(!pProcess) { return STATUS_FILE_INVALID; } // read memory from "vmem" file if(!_stricmp(pPath->szPath1, "vmem")) { - VmmReadEx(ctxVmm, pProcess, cbOffset, pb, cb, NULL); + VmmReadEx(ctxVmm, pProcess, cbOffset, pb, cb, NULL, 0); *pcbRead = cb; return STATUS_SUCCESS; } @@ -187,7 +194,12 @@ NTSTATUS VmmVfsReadFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath *pcbRead = 0; if(pMapEntry->AddrBase + (pMapEntry->cPages << 12) <= pPath->qwPath2 + cbOffset) { return STATUS_END_OF_FILE; } cbMax = min((pMapEntry->AddrBase + (pMapEntry->cPages << 12)), (pPath->qwPath2 + cb + cbOffset)) - (pPath->qwPath2 - cbOffset); // min(entry_top_addr, request_top_addr) - request_start_addr - VmmReadEx(ctxVmm, pProcess, pPath->qwPath2 + cbOffset, pb, (DWORD)min(cb, cbMax), pcbRead); + //QWORD tmFreq, tmStart, tmNow; + //QueryPerformanceFrequency((PLARGE_INTEGER)&tmFreq); + //QueryPerformanceCounter((PLARGE_INTEGER)&tmStart); + VmmReadEx(ctxVmm, pProcess, pPath->qwPath2 + cbOffset, pb, (DWORD)min(cb, cbMax), pcbRead, (pProcess->fFileCacheDisabled ? VMM_FLAG_NOCACHE : 0)); + //QueryPerformanceCounter((PLARGE_INTEGER)&tmNow); + //printf("Time uS VmmReadEx: %i\n", (((tmNow - tmStart) * 1000 * 1000) / tmFreq)); return (*pcbRead) ? STATUS_SUCCESS : STATUS_END_OF_FILE; } // read the memory map @@ -281,6 +293,34 @@ NTSTATUS VmmVfsReadFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath } return STATUS_FILE_INVALID; } + // read file in .config directory + if(!_stricmp(pPath->szPath1, ".config")) { + *pcbRead = 0; + // file: cache_file_enable + if(!_stricmp(pPath->szPath2, "cache_file_enable")) { + return VmmVfsReadFile_FromBOOL(!pProcess->fFileCacheDisabled, pb, cb, pcbRead, cbOffset); + } + // files: global_refresh* + if(!_stricmp(pPath->szPath2, "global_refresh_enable")) { + return VmmVfsReadFile_FromBOOL(ctxVmm->ThreadProcCache.fEnabled, pb, cb, pcbRead, cbOffset); + } + if(!_stricmp(pPath->szPath2, "global_refresh_tick_period_ms")) { + return VmmVfsReadFile_FromDWORD(ctxVmm->ThreadProcCache.cMs_TickPeriod, pb, cb, pcbRead, cbOffset, FALSE); + } + if(!_stricmp(pPath->szPath2, "global_refresh_read")) { + return VmmVfsReadFile_FromDWORD(ctxVmm->ThreadProcCache.cTick_Phys, pb, cb, pcbRead, cbOffset, FALSE); + } + if(!_stricmp(pPath->szPath2, "global_refresh_tlb")) { + return VmmVfsReadFile_FromDWORD(ctxVmm->ThreadProcCache.cTick_TLB, pb, cb, pcbRead, cbOffset, FALSE); + } + if(!_stricmp(pPath->szPath2, "global_refresh_proc_partial")) { + return VmmVfsReadFile_FromDWORD(ctxVmm->ThreadProcCache.cTick_ProcPartial, pb, cb, pcbRead, cbOffset, FALSE); + } + if(!_stricmp(pPath->szPath2, "global_refresh_proc_total")) { + return VmmVfsReadFile_FromDWORD(ctxVmm->ThreadProcCache.cTick_ProcTotal, pb, cb, pcbRead, cbOffset, FALSE); + } + return STATUS_FILE_INVALID; + } return STATUS_FILE_INVALID; } @@ -301,7 +341,26 @@ NTSTATUS VmmVfsReadFile(_Inout_ PPCILEECH_CONTEXT ctx, LPCWSTR wcsFileName, _Out // FUNCTIONALITY RELATED TO: WRITE // ---------------------------------------------------------------------------- -NTSTATUS VmmVfsWriteFile_Virt2PhysVA(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) +NTSTATUS VmmVfsWriteFile_DWORD(_Inout_ PDWORD pdwTarget, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset, _In_ DWORD dwMinAllow) +{ + BYTE pbBuffer[9]; + DWORD dw; + if(cbOffset < 8) { + *pcbWrite = cb; + snprintf(pbBuffer, 9, "%08x", *pdwTarget); + cb = (DWORD)min(8 - cbOffset, cb); + memcpy(pbBuffer + cbOffset, pb, cb); + pbBuffer[8] = 0; + dw = strtoul(pbBuffer, NULL, 16); + dw = max(dw, dwMinAllow); + *pdwTarget = dw; + } else { + *pcbWrite = 0; + } + return STATUS_SUCCESS; +} + +NTSTATUS VmmVfsWriteFile_Virt2PhysVA(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) { BYTE pbBuffer[17]; if(cbOffset < 16) { @@ -318,7 +377,7 @@ NTSTATUS VmmVfsWriteFile_Virt2PhysVA(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pPro return STATUS_SUCCESS; } -NTSTATUS VmmVfsWriteFile_Virt2Phys(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ LPSTR szFile, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) +NTSTATUS VmmVfsWriteFile_Virt2Phys(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProcess, _In_ LPSTR szFile, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) { DWORD i; if(!_stricmp(szFile, "virt")) { @@ -339,7 +398,7 @@ NTSTATUS VmmVfsWriteFile_Virt2Phys(PVMM_CONTEXT ctxVmm, _In_ PVMM_PROCESS pProce } -NTSTATUS VmmVfsWriteFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) +NTSTATUS VmmVfsWriteFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) { PVMM_CONTEXT ctxVmm = (PVMM_CONTEXT)ctx->hVMM; PVMM_MEMMAP_ENTRY pMapEntry; @@ -394,10 +453,39 @@ NTSTATUS VmmVfsWriteFileDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPat *pcbWrite = cb; return STATUS_SUCCESS; } + // write file in .config directory + if(!_stricmp(pPath->szPath1, ".config")) { + // file: cache_file_enable + if(!_stricmp(pPath->szPath2, "cache_file_enable")) { + if((cbOffset == 0) && (cb > 0)) { + if(((PCHAR)pb)[0] == '1') { pProcess->fFileCacheDisabled = FALSE; } + if(((PCHAR)pb)[0] == '0') { pProcess->fFileCacheDisabled = TRUE; } + } + *pcbWrite = cb; + return STATUS_SUCCESS; + } + // files: global_refresh* + if(!_stricmp(pPath->szPath2, "global_refresh_tick_period_ms")) { + return VmmVfsWriteFile_DWORD(&ctxVmm->ThreadProcCache.cMs_TickPeriod, pb, cb, pcbWrite, cbOffset, 50); + } + if(!_stricmp(pPath->szPath2, "global_refresh_read")) { + return VmmVfsWriteFile_DWORD(&ctxVmm->ThreadProcCache.cTick_Phys, pb, cb, pcbWrite, cbOffset, 1); + } + if(!_stricmp(pPath->szPath2, "global_refresh_tlb")) { + return VmmVfsWriteFile_DWORD(&ctxVmm->ThreadProcCache.cTick_TLB, pb, cb, pcbWrite, cbOffset, 1); + } + if(!_stricmp(pPath->szPath2, "global_refresh_proc_partial")) { + return VmmVfsWriteFile_DWORD(&ctxVmm->ThreadProcCache.cTick_ProcPartial, pb, cb, pcbWrite, cbOffset, 1); + } + if(!_stricmp(pPath->szPath2, "global_refresh_proc_total")) { + return VmmVfsWriteFile_DWORD(&ctxVmm->ThreadProcCache.cTick_ProcTotal, pb, cb, pcbWrite, cbOffset, 1); + } + return STATUS_FILE_INVALID; + } return STATUS_FILE_INVALID; } -NTSTATUS VmmVfsWriteFile(_Inout_ PPCILEECH_CONTEXT ctx, LPCWSTR wcsFileName, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) +NTSTATUS VmmVfsWriteFile(_Inout_ PPCILEECH_CONTEXT ctx, LPCWSTR wcsFileName, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset) { NTSTATUS nt; VMMVFS_PATH path; @@ -508,7 +596,7 @@ BOOL VmmVfsListFilesDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath, _ } // populate process directory - list standard files and subdirectories if(!pPath->szPath1) { - i = 0, cMax = 14; + i = 0, cMax = 15; if(!(*ppfi = LocalAlloc(LMEM_ZEROINIT, cMax * sizeof(VFS_RESULT_FILEINFO)))) { return FALSE; } VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "map", pProcess->cbMemMapDisplayCache, VFS_FLAGS_FILE_NORMAL); VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "name", 16, VFS_FLAGS_FILE_NORMAL); @@ -518,6 +606,7 @@ BOOL VmmVfsListFilesDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath, _ VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "modules", 0, VFS_FLAGS_FILE_DIRECTORY); VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "virt2phys", 0, VFS_FLAGS_FILE_DIRECTORY); VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "vmemd", 0, VFS_FLAGS_FILE_DIRECTORY); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, ".config", 0, VFS_FLAGS_FILE_DIRECTORY); if(pProcess->paPML4_UserOpt) { VmmVfsListFiles_PopulateResultFileInfo(*ppfi + i++, "pml4-user", 16, VFS_FLAGS_FILE_NORMAL); } @@ -595,6 +684,20 @@ BOOL VmmVfsListFilesDo(_Inout_ PPCILEECH_CONTEXT ctx, _In_ PVMMVFS_PATH pPath, _ } printf("DEBUG PATH: %s :: %s \n", pPath->szPath2, pPath->szPath3); } + // populate .config directory + if(!_stricmp(pPath->szPath1, ".config")) { + *pcfi = 7; + *ppfi = LocalAlloc(LMEM_ZEROINIT, *pcfi * sizeof(VFS_RESULT_FILEINFO)); + if(!*ppfi) { return FALSE; } + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 0, "cache_file_enable", 1, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 1, "global_refresh_enable", 1, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 2, "global_refresh_tick_period_ms", 8, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 3, "global_refresh_read", 8, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 4, "global_refresh_tlb", 8, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 5, "global_refresh_proc_partial", 8, VFS_FLAGS_FILE_NORMAL); + VmmVfsListFiles_PopulateResultFileInfo(*ppfi + 6, "global_refresh_proc_total", 8, VFS_FLAGS_FILE_NORMAL); + return TRUE; + } // no hit - return false return FALSE; } diff --git a/pcileech/vmmvfs.h b/pcileech/vmmvfs.h index bff6bf7..b57e32b 100644 --- a/pcileech/vmmvfs.h +++ b/pcileech/vmmvfs.h @@ -43,7 +43,7 @@ NTSTATUS VmmVfsReadFile(_Inout_ PPCILEECH_CONTEXT ctx, _In_ LPCWSTR wcsFileName, * -- pcbWrite = bytes actually read * -- cbOffset = offset where to start read compared to file start */ -NTSTATUS VmmVfsWriteFile(_Inout_ PPCILEECH_CONTEXT ctx, _In_ LPCWSTR wcsFileName, _Out_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset); +NTSTATUS VmmVfsWriteFile(_Inout_ PPCILEECH_CONTEXT ctx, _In_ LPCWSTR wcsFileName, _In_ LPVOID pb, _In_ DWORD cb, _Out_ PDWORD pcbWrite, _In_ QWORD cbOffset); #endif /* WIN32 */ #endif /* __VMMVFS_H__ */ diff --git a/pcileech_files/pcileech.exe b/pcileech_files/pcileech.exe index d0c7e0e6fd421278ebe6f9124de9b3e02f1d5e16..0537a581d2fd12afffbefd13c259d2fcd051e847 100644 GIT binary patch delta 81596 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 BQJ??- delta 79562 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 diff --git a/readme.md b/readme.md index c716dd2..6948ddb 100644 --- a/readme.md +++ b/readme.md @@ -169,3 +169,7 @@ v3.3 * Memory Process File System - 32-bit process support, parsing of imports, exports, directories and sections. * Total Meltdown stability fixes (removed risk of bluescreen) and increased memory support (up to 512GB). * Various bug fixes. + +v3.4 +* Memory Process File System - runtime tunables in .config directory - allows for disabling of caching and adjusting refresh periods. +* Various bug fixes \ No newline at end of file