⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aeon.h

📁 数字签名的例子
💻 H
字号:



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Header
#include <Windows.h>

//#define AEON_OVR
#ifndef _WIN32_WCE
#define AEON_SEG ".AEON"
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Init AEON variable
#ifndef AEON_SEG
VOID AeonInit(PVOID pvAeon, DWORD dwSize = sizeof(DWORD), HMODULE hModule = NULL)
#else
VOID AeonInit(HMODULE hModule = NULL)
#endif
{
	TCHAR tzPath[MAX_PATH];
	PTSTR ptzExt = tzPath + GetModuleFileName(hModule, tzPath, MAX_PATH) - 5;
	if (lstrcmpi(ptzExt, TEXT(".AEON")) == 0)
	{
		TCHAR tzOld[MAX_PATH];
		lstrcpy(tzOld, tzPath);
		*ptzExt = 0;
		for (UINT i = 0; i < 1000; i++, Sleep(20))
		{
			DeleteFile(tzPath);
			if (MoveFile(tzOld, tzPath))
			{
				break;
			}
		}
		ExitProcess(0);
	}

#ifndef AEON_SEG
	HANDLE hFile = CreateFile(tzPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
	if (hFile != INVALID_HANDLE_VALUE)
	{
#ifdef AEON_OVR
		SetFilePointer(hFile, -((LONG) dwSize), 0, FILE_END);
		ReadFile(hFile, pvAeon, dwSize, &dwSize, NULL);
#else
		DWORD dwTemp;
		DWORD dwAeon[2];
		SetFilePointer(hFile, -8, 0, FILE_END);
		ReadFile(hFile, &dwAeon, 8, &dwTemp, NULL);
		if (dwAeon[1] == 'AEON')
		{
			SetFilePointer(hFile, -8 - dwAeon[0], 0, FILE_END);
			ReadFile(hFile, pvAeon, dwSize, &dwTemp, NULL);
		}
#endif
		CloseHandle(hFile);
	}
#endif
}

#ifdef AEON_SEG
PIMAGE_SECTION_HEADER AeonGetSeg(PBYTE pbBase)
{
	// Verify DOS signature
	if (((PIMAGE_DOS_HEADER) pbBase)->e_magic == IMAGE_DOS_SIGNATURE)
	{
		// Verify PE signature
		PIMAGE_NT_HEADERS pNTHdr = (PIMAGE_NT_HEADERS) (pbBase + ((PIMAGE_DOS_HEADER) pbBase)->e_lfanew);
		if (pNTHdr->Signature == IMAGE_NT_SIGNATURE)
		{
			// Lookup PE sections
			PIMAGE_SECTION_HEADER pSecHdr = (PIMAGE_SECTION_HEADER) (pNTHdr + 1);
			for (UINT i = pNTHdr->FileHeader.NumberOfSections; i; i--, pSecHdr++)
			{
				// Write back
				if (!memcmp(pSecHdr->Name, AEON_SEG, sizeof(AEON_SEG)))
				{
					return pSecHdr;
				}
			}
		}
	}
	return NULL;
}
#endif

// Save AEON variable
#ifndef AEON_SEG
VOID AeonExit(PVOID pvAeon, DWORD dwSize = sizeof(DWORD), HMODULE hModule = NULL)
#else
VOID AeonExit(HMODULE hModule = NULL)
#endif
{
	TCHAR tzPath[MAX_PATH];
	TCHAR tzNew[MAX_PATH];
	GetModuleFileName(hModule, tzPath, MAX_PATH);
	lstrcpy(tzNew, tzPath);
	lstrcat(tzNew, TEXT(".AEON"));
	CopyFile(tzPath, tzNew, FALSE);

	HANDLE hFile = CreateFile(tzNew, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hFile != INVALID_HANDLE_VALUE)
	{
#ifndef AEON_SEG
#ifdef AEON_OVR
		SetFilePointer(hFile, -((LONG) dwSize), 0, FILE_END);
		WriteFile(hFile, pvAeon, dwSize, &dwSize, NULL);
#else
		DWORD dwTemp;
		DWORD dwAeon[2];
		SetFilePointer(hFile, -8, 0, FILE_END);
		ReadFile(hFile, &dwAeon, 8, &dwTemp, NULL);
		SetFilePointer(hFile, (dwAeon[1] == 'AEON') ? (-8 - dwAeon[0]) : 0, 0, FILE_END);
		WriteFile(hFile, pvAeon, dwSize, &dwTemp, NULL);
		dwAeon[0] = dwSize;
		dwAeon[1] = 'AEON';
		WriteFile(hFile, &dwAeon, 8, &dwTemp, NULL);
		SetEndOfFile(hFile);
#endif
#else
		HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, GetFileSize(hFile, NULL), NULL);
		if (hMapping)
		{
			PBYTE pbFile = (PBYTE) MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
			if (pbFile)
			{
				PBYTE pbModule = hModule ? (PBYTE) hModule : (PBYTE) GetModuleHandle(NULL);
				PIMAGE_SECTION_HEADER pFileSec = AeonGetSeg(pbFile);
				PIMAGE_SECTION_HEADER pInstSec = AeonGetSeg(pbModule);
				if (pFileSec && pInstSec)
				{
					memcpy(pbFile + pFileSec->PointerToRawData, pbModule + pInstSec->VirtualAddress, pFileSec->SizeOfRawData);
				}
				UnmapViewOfFile(pbFile);
			}
			CloseHandle(hMapping);
		}
#endif
		CloseHandle(hFile);

		PROCESS_INFORMATION pi;
		STARTUPINFO si = {sizeof(STARTUPINFO)};

#ifdef _USRDLL
#ifdef _WIN32_WCE
		lstrcat(tzNew, TEXT(",AEON"));
		if (CreateProcess(TEXT("RUNDLL32.EXE"), tzNew, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi))
#else
		wsprintf(tzPath, TEXT("RUNDLL32.EXE %s,AEON"), tzNew);
		if (CreateProcess(NULL, tzPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
#endif
#else
		if (CreateProcess(tzNew, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
#endif
		{
			CloseHandle(pi.hThread);
			CloseHandle(pi.hProcess);
		}

		//ExitProcess(0);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -