void
__declspec
(
naked
) Start()
{
_asm {
pushfq
call Start1()
popfq
jmp rax
ret
}
}
ULONG_PTR
Start1()
{
ULONGLONG
dwBase = GetKernel32Addr();
fnGetProcAddress pfnGetProcAddress = (fnGetProcAddress)MyGetProcessAddress();
fnLoadLibraryA pfnLoadLibraryA = (fnLoadLibraryA)pfnGetProcAddress((
HMODULE
)dwBase,
"LoadLibraryW"
);
fnGetModuleHandleA pfnGetModuleHandle = (fnGetModuleHandleA)pfnGetProcAddress((
HMODULE
)dwBase,
"GetModuleHandleW"
);
fnVirtualProtect pfnVirtualProtect = (fnVirtualProtect)pfnGetProcAddress((
HMODULE
)dwBase,
"VirtualProtect"
);
HMODULE
hUser32 = (
HMODULE
)pfnLoadLibraryA(L
"user32.dll"
);
HMODULE
hKernel32 = (
HMODULE
)pfnGetModuleHandle(L
"kernel32.dll"
);
fnExitProcess pfnExitProcess = (fnExitProcess)pfnGetProcAddress(hKernel32,
"ExitProcess"
);
fnMessageBox pfnMessageBox = (fnMessageBox)pfnGetProcAddress(hUser32,
"MessageBoxW"
);
int
nRet = pfnMessageBox(NULL, L
"欢迎使用免费64位加壳程序,是否运行主程序?"
, L
"Hello PEDIY"
, MB_YESNO);
if
(nRet == IDYES)
{
ULONGLONG
dwCodeBase = g_stcParam.dwImageBase + (
DWORD
)g_stcParam.lpStartVA;
DWORD
dwOldProtect = 0;
pfnVirtualProtect((
LPVOID
)dwCodeBase, g_stcParam.dwCodeSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
XorCode();
pfnVirtualProtect((
LPVOID
)dwCodeBase, g_stcParam.dwCodeSize, dwOldProtect, &dwOldProtect);
g_oep = (FUN)(g_stcParam.dwImageBase + g_stcParam.dwOEP);
return
(
ULONG_PTR
)g_oep;
}
pfnExitProcess(0);
}