#include <Windows.h>
#pragma comment(linker, "/SECTION:.text,RWE")
#define FILENAME "main.exe"
PDWORD FindMarker(void *addr, DWORD dwMarker)
{
PBYTE ptr = (PBYTE)addr;
while ((*(DWORD *)ptr) != dwMarker)
ptr++;
return (PDWORD)ptr;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
PDWORD StartMarker = 0, EndMarker = 0;
HANDLE hFile = NULL;
HANDLE hFileMapping = NULL;
LPVOID lpMapView = NULL;
BYTE dwMarkerDistance = 0;
PDWORD (* volatile find)(void *, DWORD) = FindMarker;
hFile = CreateFile(TEXT(FILENAME),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL);
hFileMapping = CreateFileMapping(hFile,
NULL,
PAGE_READWRITE,
0,
0,
NULL);
lpMapView = MapViewOfFile(hFileMapping,
FILE_MAP_READ | FILE_MAP_WRITE,
0,
0,
0);
StartMarker = find(lpMapView, 0x90909090);
EndMarker = find(StartMarker + 1, 0x90909090);
dwMarkerDistance = EndMarker - StartMarker;
TCHAR buffer[127];
wsprintf(buffer, TEXT("%x, %x, %x"), StartMarker, EndMarker, (EndMarker - StartMarker) * sizeof(DWORD));
MessageBox(NULL, buffer, NULL, MB_OK);
*((PBYTE)StartMarker - 1) = dwMarkerDistance * sizeof(DWORD) + 4;
StartMarker++;
while (StartMarker < EndMarker)
{
*StartMarker ^= 0xDEADCAFE;
StartMarker++;
}
UnmapViewOfFile(lpMapView);
CloseHandle(hFileMapping);
CloseHandle(hFile);
}
I2luY2x1ZGUgPFdpbmRvd3MuaD4KCiNwcmFnbWEgY29tbWVudChsaW5rZXIsICIvU0VDVElPTjoudGV4dCxSV0UiKQoKI2RlZmluZSBGSUxFTkFNRSAibWFpbi5leGUiCgoKUERXT1JEIEZpbmRNYXJrZXIodm9pZCAqYWRkciwgRFdPUkQgZHdNYXJrZXIpCnsKCVBCWVRFIHB0ciA9IChQQllURSlhZGRyOwoJd2hpbGUgKCgqKERXT1JEICopcHRyKSAhPSBkd01hcmtlcikKCQlwdHIrKzsKCXJldHVybiAoUERXT1JEKXB0cjsKfQoKaW50IFdJTkFQSSBXaW5NYWluKEhJTlNUQU5DRSBoSW5zdCwgSElOU1RBTkNFIGhQcmV2SW5zdCwgTFBTVFIgbHBDbWRMaW5lLCBpbnQgbkNtZFNob3cpCnsKCVBEV09SRCBTdGFydE1hcmtlciA9IDAsIEVuZE1hcmtlciA9IDA7CglIQU5ETEUgaEZpbGUgPSBOVUxMOwoJSEFORExFIGhGaWxlTWFwcGluZyA9IE5VTEw7CglMUFZPSUQgbHBNYXBWaWV3ID0gTlVMTDsKCUJZVEUgZHdNYXJrZXJEaXN0YW5jZSA9IDA7CgoJUERXT1JEICgqIHZvbGF0aWxlIGZpbmQpKHZvaWQgKiwgRFdPUkQpID0gRmluZE1hcmtlcjsKCgloRmlsZSA9IENyZWF0ZUZpbGUoVEVYVChGSUxFTkFNRSksCgkJR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwKCQlGSUxFX1NIQVJFX1JFQUQsCgkJTlVMTCwKCQlPUEVOX0VYSVNUSU5HLAoJCTAsCgkJTlVMTCk7CgloRmlsZU1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoRmlsZSwKCQlOVUxMLAoJCVBBR0VfUkVBRFdSSVRFLAoJCTAsCgkJMCwKCQlOVUxMKTsKCWxwTWFwVmlldyA9IE1hcFZpZXdPZkZpbGUoaEZpbGVNYXBwaW5nLAoJCUZJTEVfTUFQX1JFQUQgfCBGSUxFX01BUF9XUklURSwKCQkwLAoJCTAsCgkJMCk7CgoJU3RhcnRNYXJrZXIgPSBmaW5kKGxwTWFwVmlldywgMHg5MDkwOTA5MCk7CglFbmRNYXJrZXIgPSBmaW5kKFN0YXJ0TWFya2VyICsgMSwgMHg5MDkwOTA5MCk7Cglkd01hcmtlckRpc3RhbmNlID0gRW5kTWFya2VyIC0gU3RhcnRNYXJrZXI7CgoJVENIQVIgYnVmZmVyWzEyN107Cgl3c3ByaW50ZihidWZmZXIsIFRFWFQoIiV4LCAleCwgJXgiKSwgU3RhcnRNYXJrZXIsIEVuZE1hcmtlciwgKEVuZE1hcmtlciAtIFN0YXJ0TWFya2VyKSAqIHNpemVvZihEV09SRCkpOwoJTWVzc2FnZUJveChOVUxMLCBidWZmZXIsIE5VTEwsIE1CX09LKTsKCgkqKChQQllURSlTdGFydE1hcmtlciAtIDEpID0gZHdNYXJrZXJEaXN0YW5jZSAqIHNpemVvZihEV09SRCkgKyA0OwoKCVN0YXJ0TWFya2VyKys7Cgl3aGlsZSAoU3RhcnRNYXJrZXIgPCBFbmRNYXJrZXIpCgl7CgkJKlN0YXJ0TWFya2VyIF49IDB4REVBRENBRkU7CgkJU3RhcnRNYXJrZXIrKzsKCX0KCglVbm1hcFZpZXdPZkZpbGUobHBNYXBWaWV3KTsKCUNsb3NlSGFuZGxlKGhGaWxlTWFwcGluZyk7CglDbG9zZUhhbmRsZShoRmlsZSk7Cn0=