Hello.
For guys who want to construct table yourself, we used this code to build it easily
Code: Select alltypedef struct _BINARY_PATCH_BLOCK {
ULONG VirtualOffset;
UCHAR DataLength;
UCHAR Data[1];
} BINARY_PATCH_BLOCK, *PBINARY_PATCH_BLOCK;
typedef struct _BINARY_PATCH_BLOCK_INTERNAL {
ULONG VirtualOffset;
UCHAR DataLength;
UCHAR Data[32];
} BINARY_PATCH_BLOCK_INTERNAL, *PBINARY_PATCH_BLOCK_INTERNAL;
#define NUMBER_OF_PATCHES 15
static BINARY_PATCH_BLOCK_INTERNAL TempDataArray[NUMBER_OF_PATCHES] = {
{ 0x3218d, 2, { 0x51, 0x52 } },
{ 0x323f4, 2, { 0x51, 0x52 } },
{ 0x32547, 2, { 0x51, 0x52 } },
{ 0x32872, 2, { 0x51, 0x52 } },
{ 0x32a14, 2, { 0x51, 0x52 } },
{ 0x32b48, 2, { 0x51, 0x52 } },
{ 0x3bf30, 2, { 0x51, 0x52 } },
{ 0x11bf98, 8, { 0x4D, 0x61, 0x67, 0x69, 0x63, 0x61, 0x6C, 0x52 } },
{ 0x1195e7, 0x1b, {
0x44, 0x73, 0x64, 0x74, 0x46, 0x69, 0x6C, 0x65, 0x50, 0x61, 0x74, 0x68, 0x00, 0x53,
0x73, 0x64, 0x74, 0x46, 0x69, 0x6C, 0x65, 0x50, 0x61, 0x74, 0x68, 0x00, 0x00}
},
{ 0xd8b6, 2, { 0xDE, 0x10 } },
{ 0x12026, 2, { 0xDE, 0x10 } },
{ 0x1f70e, 2, { 0xDE, 0x10 } },
{ 0x41ef1, 2, { 0xDE, 0x10 } },
{ 0x41f05, 2, { 0xAD, 0xDE } },
{ 0x1f701, 2, { 0xDE, 0x10 } }
};
VOID BuildTable()
{
int i;
PUCHAR Table;
DWORD dwTableSize, dwEntrySize;
TCHAR szOutputFileName[MAX_PATH * 2];
Table = (PUCHAR)LocalAlloc(LPTR, 0x1000);
if (Table == NULL) return;
dwTableSize = 0;
for (i = 0; i < NUMBER_OF_PATCHES; i++) {
dwEntrySize = sizeof(ULONG) + sizeof(UCHAR) + (sizeof(UCHAR) * TempDataArray[i].DataLength);
if (dwTableSize + dwEntrySize > 0x1000) break;
RtlCopyMemory(&Table[dwTableSize], &TempDataArray[i], dwEntrySize);
dwTableSize += dwEntrySize;
}
GetCurrentDirectory(MAX_PATH, szOutputFileName);
lstrcat(szOutputFileName, TEXT("\\output.bin"));
WriteBufferToFile(Table, dwTableSize, szOutputFileName);
LocalFree(HLOCAL(Table));
}