mirror of https://github.com/x64dbg/TitanEngine
parent
a8628215dc
commit
93a8582044
|
|
@ -567,7 +567,8 @@ __declspec(dllexport) long long TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapV
|
||||||
__declspec(dllexport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
||||||
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllexport) bool TITCALL ReadProcessMemoryEnforce(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
__declspec(dllexport) bool TITCALL MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
||||||
|
__declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesWritten);
|
||||||
// TitanEngine.Realigner.functions:
|
// TitanEngine.Realigner.functions:
|
||||||
__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
||||||
__declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
__declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
||||||
|
|
|
||||||
|
|
@ -566,7 +566,8 @@ __declspec(dllimport) long long TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapV
|
||||||
__declspec(dllimport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
__declspec(dllimport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
||||||
__declspec(dllimport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllimport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllimport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllimport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllimport) bool TITCALL ReadProcessMemoryEnforce(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
__declspec(dllexport) bool TITCALL MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
||||||
|
__declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesWritten);
|
||||||
// TitanEngine.Realigner.functions:
|
// TitanEngine.Realigner.functions:
|
||||||
__declspec(dllimport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
__declspec(dllimport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
||||||
__declspec(dllimport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
__declspec(dllimport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
||||||
|
|
|
||||||
|
|
@ -388,6 +388,14 @@ protected:
|
||||||
{
|
{
|
||||||
return UE::ConvertFileOffsetToVAEx(FileMapVA, FileSize, ImageBase, AddressToConvert, ReturnType);
|
return UE::ConvertFileOffsetToVAEx(FileMapVA, FileSize, ImageBase, AddressToConvert, ReturnType);
|
||||||
}
|
}
|
||||||
|
static bool MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead)
|
||||||
|
{
|
||||||
|
return UE::MemoryReadSafe(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead);
|
||||||
|
}
|
||||||
|
static bool MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesWritten)
|
||||||
|
{
|
||||||
|
return UE::MemoryWriteSafe(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DumperA
|
class DumperA
|
||||||
|
|
@ -814,6 +822,14 @@ public:
|
||||||
static void* GetPEBLocation64(HANDLE hProcess)
|
static void* GetPEBLocation64(HANDLE hProcess)
|
||||||
{
|
{
|
||||||
return UE::GetPEBLocation64(hProcess);
|
return UE::GetPEBLocation64(hProcess);
|
||||||
|
}
|
||||||
|
static void* GetTEBLocation(HANDLE hProcess)
|
||||||
|
{
|
||||||
|
return UE::GetTEBLocation(hProcess);
|
||||||
|
}
|
||||||
|
static void* GetTEBLocation64(HANDLE hProcess)
|
||||||
|
{
|
||||||
|
return UE::GetTEBLocation64(hProcess);
|
||||||
}
|
}
|
||||||
static bool HideDebugger(HANDLE hProcess, eHideLevel PatchAPILevel)
|
static bool HideDebugger(HANDLE hProcess, eHideLevel PatchAPILevel)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -357,3 +357,54 @@ __declspec(dllexport) bool TITCALL Replace(LPVOID MemoryStart, DWORD MemorySize,
|
||||||
return(ReplaceEx(GetCurrentProcess(), MemoryStart, MemorySize, SearchPattern, PatternSize, NumberOfRepetitions, ReplacePattern, ReplaceSize, WildCard));
|
return(ReplaceEx(GetCurrentProcess(), MemoryStart, MemorySize, SearchPattern, PatternSize, NumberOfRepetitions, ReplacePattern, ReplaceSize, WildCard));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//what should this function do:
|
||||||
|
//- do all possible effort to read memory
|
||||||
|
//- filter out breakpoints
|
||||||
|
__declspec(dllexport) bool TITCALL MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead)
|
||||||
|
{
|
||||||
|
SIZE_T ueNumberOfBytesRead = 0;
|
||||||
|
SIZE_T * pNumBytes = 0;
|
||||||
|
DWORD dwProtect = 0;
|
||||||
|
bool retValue = false;
|
||||||
|
|
||||||
|
if ( (hProcess == 0) || (lpBaseAddress == 0) || (lpBuffer == 0) || (nSize == 0))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lpNumberOfBytesRead)
|
||||||
|
{
|
||||||
|
pNumBytes = &ueNumberOfBytesRead;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pNumBytes = lpNumberOfBytesRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, pNumBytes))
|
||||||
|
{
|
||||||
|
if (VirtualProtectEx(hProcess, lpBaseAddress, nSize, PAGE_EXECUTE_READWRITE, &dwProtect))
|
||||||
|
{
|
||||||
|
if (ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, pNumBytes))
|
||||||
|
{
|
||||||
|
retValue = true;
|
||||||
|
}
|
||||||
|
VirtualProtectEx(hProcess, lpBaseAddress, nSize, dwProtect, &dwProtect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
retValue = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//what should this function do:
|
||||||
|
//- do all possible effort to write memory
|
||||||
|
//- re-set breakpoints when overwritten
|
||||||
|
__declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesWritten)
|
||||||
|
{
|
||||||
|
return !!WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten);
|
||||||
|
}
|
||||||
|
|
@ -158,7 +158,7 @@ __declspec(dllexport) bool TITCALL DumpProcessW(HANDLE hProcess, LPVOID ImageBas
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, TITANENGINE_PAGESIZE, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, TITANENGINE_PAGESIZE, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile, ueCopyBuffer, TITANENGINE_PAGESIZE, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile, ueCopyBuffer, TITANENGINE_PAGESIZE, &uedNumberOfBytesRead, NULL);
|
||||||
SizeOfImageDump = SizeOfImageDump - TITANENGINE_PAGESIZE;
|
SizeOfImageDump = SizeOfImageDump - TITANENGINE_PAGESIZE;
|
||||||
|
|
@ -167,7 +167,7 @@ __declspec(dllexport) bool TITCALL DumpProcessW(HANDLE hProcess, LPVOID ImageBas
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, SizeOfImageDump, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, SizeOfImageDump, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile, ueCopyBuffer, SizeOfImageDump, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile, ueCopyBuffer, SizeOfImageDump, &uedNumberOfBytesRead, NULL);
|
||||||
SizeOfImageDump = NULL;
|
SizeOfImageDump = NULL;
|
||||||
|
|
@ -240,7 +240,7 @@ __declspec(dllexport) bool TITCALL DumpProcessW(HANDLE hProcess, LPVOID ImageBas
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, TITANENGINE_PAGESIZE, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, TITANENGINE_PAGESIZE, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile, ueCopyBuffer, TITANENGINE_PAGESIZE, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile, ueCopyBuffer, TITANENGINE_PAGESIZE, &uedNumberOfBytesRead, NULL);
|
||||||
SizeOfImageDump = SizeOfImageDump - TITANENGINE_PAGESIZE;
|
SizeOfImageDump = SizeOfImageDump - TITANENGINE_PAGESIZE;
|
||||||
|
|
@ -249,7 +249,7 @@ __declspec(dllexport) bool TITCALL DumpProcessW(HANDLE hProcess, LPVOID ImageBas
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
RtlZeroMemory(ueCopyBuffer, AlignedHeaderSize);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, SizeOfImageDump, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, SizeOfImageDump, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile, ueCopyBuffer, SizeOfImageDump, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile, ueCopyBuffer, SizeOfImageDump, &uedNumberOfBytesRead, NULL);
|
||||||
SizeOfImageDump = NULL;
|
SizeOfImageDump = NULL;
|
||||||
|
|
@ -332,46 +332,6 @@ __declspec(dllexport) bool TITCALL DumpMemory(HANDLE hProcess, LPVOID MemoryStar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL ReadProcessMemoryEnforce(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead)
|
|
||||||
{
|
|
||||||
SIZE_T ueNumberOfBytesRead = 0;
|
|
||||||
SIZE_T * pNumBytes = 0;
|
|
||||||
DWORD dwProtect = 0;
|
|
||||||
bool retValue = false;
|
|
||||||
|
|
||||||
if ( (hProcess == 0) || (lpBaseAddress == 0) || (lpBuffer == 0) || (nSize == 0))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lpNumberOfBytesRead)
|
|
||||||
{
|
|
||||||
pNumBytes = &ueNumberOfBytesRead;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pNumBytes = lpNumberOfBytesRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, pNumBytes))
|
|
||||||
{
|
|
||||||
if (VirtualProtectEx(hProcess, lpBaseAddress, nSize, PAGE_EXECUTE_READWRITE, &dwProtect))
|
|
||||||
{
|
|
||||||
if (ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, pNumBytes))
|
|
||||||
{
|
|
||||||
retValue = true;
|
|
||||||
}
|
|
||||||
VirtualProtectEx(hProcess, lpBaseAddress, nSize, dwProtect, &dwProtect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
retValue = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return retValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL DumpMemoryW(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName)
|
__declspec(dllexport) bool TITCALL DumpMemoryW(HANDLE hProcess, LPVOID MemoryStart, ULONG_PTR MemorySize, wchar_t* szDumpFileName)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -393,7 +353,7 @@ __declspec(dllexport) bool TITCALL DumpMemoryW(HANDLE hProcess, LPVOID MemorySta
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer,0x2000);
|
RtlZeroMemory(ueCopyBuffer,0x2000);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, 0x1000, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, 0x1000, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile,ueCopyBuffer, 0x1000, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile,ueCopyBuffer, 0x1000, &uedNumberOfBytesRead, NULL);
|
||||||
MemorySize = MemorySize - 0x1000;
|
MemorySize = MemorySize - 0x1000;
|
||||||
|
|
@ -402,7 +362,7 @@ __declspec(dllexport) bool TITCALL DumpMemoryW(HANDLE hProcess, LPVOID MemorySta
|
||||||
{
|
{
|
||||||
RtlZeroMemory(ueCopyBuffer,0x2000);
|
RtlZeroMemory(ueCopyBuffer,0x2000);
|
||||||
|
|
||||||
ReadProcessMemoryEnforce(hProcess, ReadBase, ueCopyBuffer, MemorySize, &ueNumberOfBytesRead);
|
MemoryReadSafe(hProcess, ReadBase, ueCopyBuffer, MemorySize, &ueNumberOfBytesRead);
|
||||||
|
|
||||||
WriteFile(hFile, ueCopyBuffer, (DWORD)MemorySize, &uedNumberOfBytesRead, NULL);
|
WriteFile(hFile, ueCopyBuffer, (DWORD)MemorySize, &uedNumberOfBytesRead, NULL);
|
||||||
MemorySize = NULL;
|
MemorySize = NULL;
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,8 @@ ConvertVAtoFileOffset
|
||||||
ConvertVAtoFileOffsetEx
|
ConvertVAtoFileOffsetEx
|
||||||
ConvertFileOffsetToVA
|
ConvertFileOffsetToVA
|
||||||
ConvertFileOffsetToVAEx
|
ConvertFileOffsetToVAEx
|
||||||
ReadProcessMemoryEnforce
|
MemoryReadSafe
|
||||||
|
MemoryWriteSafe
|
||||||
GetPE32Data
|
GetPE32Data
|
||||||
GetPE32DataW
|
GetPE32DataW
|
||||||
GetPE32DataFromMappedFile
|
GetPE32DataFromMappedFile
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,8 @@ __declspec(dllexport) long long TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapV
|
||||||
__declspec(dllexport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool AddressIsRVA, bool ReturnType);
|
||||||
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVA(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
__declspec(dllexport) long long TITCALL ConvertFileOffsetToVAEx(ULONG_PTR FileMapVA, DWORD FileSize, ULONG_PTR ImageBase, ULONG_PTR AddressToConvert, bool ReturnType);
|
||||||
__declspec(dllexport) bool TITCALL ReadProcessMemoryEnforce(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
__declspec(dllexport) bool TITCALL MemoryReadSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesRead);
|
||||||
|
__declspec(dllexport) bool TITCALL MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T * lpNumberOfBytesWritten);
|
||||||
// TitanEngine.Realigner.functions:
|
// TitanEngine.Realigner.functions:
|
||||||
__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName);
|
||||||
__declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
__declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue