Migrate to x64

This commit is contained in:
Changhua 2024-06-03 23:06:02 +08:00
parent e217f35bdf
commit ebc268a290
2 changed files with 12 additions and 11 deletions

View File

@ -208,44 +208,44 @@ int OpenWeChat(DWORD *pid)
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
size_t GetWstringByAddress(UINT64 address, wchar_t *buffer, UINT64 buffer_size) size_t GetWstringByAddress(UINT64 addr, wchar_t *buffer, UINT64 buffer_size)
{ {
size_t strLength = GET_UINT64(address + 4); size_t strLength = GET_DWORD(addr + 8);
if (strLength == 0) { if (strLength == 0) {
return 0; return 0;
} else if (strLength > buffer_size) { } else if (strLength > buffer_size) {
strLength = buffer_size - 1; strLength = buffer_size - 1;
} }
wmemcpy_s(buffer, strLength + 1, GET_WSTRING(address), strLength + 1); wmemcpy_s(buffer, strLength + 1, GET_WSTRING(addr), strLength + 1);
return strLength; return strLength;
} }
string GetStringByAddress(UINT64 address) string GetStringByAddress(UINT64 addr)
{ {
UINT64 strLength = GET_UINT64(address + 4); size_t strLength = GET_DWORD(addr + 8);
return Wstring2String(wstring(GET_WSTRING(address), strLength)); return Wstring2String(wstring(GET_WSTRING(addr), strLength));
} }
string GetStringByStrAddr(UINT64 addr) string GetStringByStrAddr(UINT64 addr)
{ {
UINT64 strLength = GET_UINT64(addr + 4); size_t strLength = GET_DWORD(addr + 8);
return strLength ? string(GET_STRING(addr), strLength) : string(); return strLength ? string(GET_STRING(addr), strLength) : string();
} }
string GetStringByWstrAddr(UINT64 addr) string GetStringByWstrAddr(UINT64 addr)
{ {
UINT64 strLength = GET_UINT64(addr + 4); size_t strLength = GET_DWORD(addr + 8);
return strLength ? Wstring2String(wstring(GET_WSTRING(addr), strLength)) : string(); return strLength ? Wstring2String(wstring(GET_WSTRING(addr), strLength)) : string();
} }
UINT32 GetMemoryIntByAddress(HANDLE hProcess, UINT64 address) UINT32 GetMemoryIntByAddress(HANDLE hProcess, UINT64 addr)
{ {
UINT32 value = 0; UINT32 value = 0;
unsigned char data[4] = { 0 }; unsigned char data[4] = { 0 };
if (ReadProcessMemory(hProcess, (LPVOID)address, data, 4, 0)) { if (ReadProcessMemory(hProcess, (LPVOID)addr, data, 4, 0)) {
value = data[0] & 0xFF; value = data[0] & 0xFF;
value |= ((data[1] << 8) & 0xFF00); value |= ((data[1] << 8) & 0xFF00);
value |= ((data[2] << 16) & 0xFF0000); value |= ((data[2] << 16) & 0xFF0000);

View File

@ -9,6 +9,7 @@
#define WCFSPYDLL_DEBUG L"spy_debug.dll" #define WCFSPYDLL_DEBUG L"spy_debug.dll"
#define GET_UINT64(addr) ((UINT64) * (UINT64 *)(addr)) #define GET_UINT64(addr) ((UINT64) * (UINT64 *)(addr))
#define GET_DWORD(addr) ((DWORD) * (UINT64 *)(addr))
#define GET_QWORD(addr) ((UINT64) * (UINT64 *)(addr)) #define GET_QWORD(addr) ((UINT64) * (UINT64 *)(addr))
#define GET_STRING(addr) ((CHAR *)(*(UINT64 *)(addr))) #define GET_STRING(addr) ((CHAR *)(*(UINT64 *)(addr)))
#define GET_WSTRING(addr) ((WCHAR *)(*(UINT64 *)(addr))) #define GET_WSTRING(addr) ((WCHAR *)(*(UINT64 *)(addr)))