From 802532c49a7349c639ea21fa87a4621f809f112c Mon Sep 17 00:00:00 2001 From: vxunderground <57078196+vxunderground@users.noreply.github.com> Date: Wed, 14 Sep 2022 09:15:37 -0500 Subject: [PATCH] new function + more annotations --- README.md | 1 + VX-API/ByteArrayToCharArray.cpp | 4 +- VX-API/CaplockString.cpp | 4 +- VX-API/CharArrayToByteArray.cpp | 4 +- VX-API/CharStringToWCharString.cpp | 2 +- VX-API/CopyMemoryEx.cpp | 2 +- ...entWindowTextFromUserProcessParameter.cpp} | 0 VX-API/Main.cpp | 3 +- VX-API/RtlNtStatusToDosErrorViaImport.cpp | 23 +++++++ VX-API/SecureStringCopy.cpp | 4 +- VX-API/StringCompare.cpp | 4 +- VX-API/StringConcat.cpp | 4 +- VX-API/StringCopy.cpp | 4 +- VX-API/StringFindSubstring.cpp | 4 +- VX-API/StringLength.cpp | 4 +- VX-API/StringLocateChar.cpp | 4 +- VX-API/StringManipulation.h | 60 +++++++++---------- VX-API/StringRemoveSubstring.cpp | 4 +- VX-API/StringTerminateStringAtChar.cpp | 4 +- VX-API/StringToken.cpp | 4 +- VX-API/VX-API.vcxproj | 7 ++- VX-API/VX-API.vcxproj.filters | 15 +++-- VX-API/WCharStringToCharString.cpp | 2 +- VX-API/Win32Helper.h | 1 + VX-API/ZeroMemoryEx.cpp | 2 +- 25 files changed, 101 insertions(+), 69 deletions(-) rename VX-API/{GetCurrentWindowText.cpp => GetCurrentWindowTextFromUserProcessParameter.cpp} (100%) create mode 100644 VX-API/RtlNtStatusToDosErrorViaImport.cpp diff --git a/README.md b/README.md index f65720c..b7338ef 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ You're free to use this in any manner you please. You do not need to use this en | HashFileByMsiFileHashTable | smelly__vx | Cryptography Related | | GetLastErrorFromTeb | smelly__vx | Error Handling | | GetLastNtStatusFromTeb | smelly__vx | Error Handling | +| RtlNtStatusToDosErrorViaImport | ReactOS | Error Handling | | GetLastErrorFromTeb | smelly__vx | Error Handling | | SetLastErrorInTeb | smelly__vx | Error Handling | | SetLastNtStatusInTeb | smelly__vx | Error Handling | diff --git a/VX-API/ByteArrayToCharArray.cpp b/VX-API/ByteArrayToCharArray.cpp index e24946c..48df580 100644 --- a/VX-API/ByteArrayToCharArray.cpp +++ b/VX-API/ByteArrayToCharArray.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length) +VOID ByteArrayToCharArrayA(_Inout_ PCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length) { for (DWORD dwX = 0; dwX < Length; dwX++) { @@ -8,7 +8,7 @@ VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length) } } -VOID ByteArrayToCharArrayW(PWCHAR Destination, PBYTE Source, DWORD Length) +VOID ByteArrayToCharArrayW(_Inout_ PWCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length) { for (DWORD dwX = 0; dwX < Length; dwX++) { diff --git a/VX-API/CaplockString.cpp b/VX-API/CaplockString.cpp index 2df152c..f63f78b 100644 --- a/VX-API/CaplockString.cpp +++ b/VX-API/CaplockString.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR CaplockStringA(PCHAR Ptr) +PCHAR CaplockStringA(_In_ PCHAR Ptr) { PCHAR sv = Ptr; while (*sv != '\0') @@ -13,7 +13,7 @@ PCHAR CaplockStringA(PCHAR Ptr) return Ptr; } -PWCHAR CaplockStringW(PWCHAR Ptr) +PWCHAR CaplockStringW(_In_ PWCHAR Ptr) { PWCHAR sv = Ptr; while (*sv != '\0') diff --git a/VX-API/CharArrayToByteArray.cpp b/VX-API/CharArrayToByteArray.cpp index 87cd668..d5c3262 100644 --- a/VX-API/CharArrayToByteArray.cpp +++ b/VX-API/CharArrayToByteArray.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length) +VOID CharArrayToByteArrayA(_In_ PCHAR Char, _Inout_ PBYTE Byte, _In_ DWORD Length) { for (DWORD dwX = 0; dwX < Length; dwX++) { @@ -8,7 +8,7 @@ VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length) } } -VOID CharArrayToByteArrayW(PWCHAR Char, PBYTE Byte, DWORD Length) +VOID CharArrayToByteArrayW(_In_ PWCHAR Char, _Inout_ PBYTE Byte, _In_ DWORD Length) { for (DWORD dwX = 0; dwX < Length; dwX++) { diff --git a/VX-API/CharStringToWCharString.cpp b/VX-API/CharStringToWCharString.cpp index 0f77e69..7def2e9 100644 --- a/VX-API/CharStringToWCharString.cpp +++ b/VX-API/CharStringToWCharString.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -SIZE_T CharStringToWCharString(PWCHAR Destination, PCHAR Source, SIZE_T MaximumAllowed) +SIZE_T CharStringToWCharString(_Inout_ PWCHAR Destination, _In_ PCHAR Source, SIZE_T _In_ MaximumAllowed) { INT Length = (INT)MaximumAllowed; diff --git a/VX-API/CopyMemoryEx.cpp b/VX-API/CopyMemoryEx.cpp index 2f660be..f0e6a7b 100644 --- a/VX-API/CopyMemoryEx.cpp +++ b/VX-API/CopyMemoryEx.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PVOID CopyMemoryEx(PVOID Destination, CONST PVOID Source, SIZE_T Length) +PVOID CopyMemoryEx(_Inout_ PVOID Destination, _In_ CONST PVOID Source, _In_ SIZE_T Length) { PBYTE D = (PBYTE)Destination; PBYTE S = (PBYTE)Source; diff --git a/VX-API/GetCurrentWindowText.cpp b/VX-API/GetCurrentWindowTextFromUserProcessParameter.cpp similarity index 100% rename from VX-API/GetCurrentWindowText.cpp rename to VX-API/GetCurrentWindowTextFromUserProcessParameter.cpp diff --git a/VX-API/Main.cpp b/VX-API/Main.cpp index 262fae5..e111e04 100644 --- a/VX-API/Main.cpp +++ b/VX-API/Main.cpp @@ -14,12 +14,13 @@ TODO: - Profit!!!!11 KNOWN ISSUES - - Implement RtlNtStatusToDosError - Work on In / Out / Inout in function calls - Various logic improvements */ + + int main(VOID) { DWORD dwError = ERROR_SUCCESS; diff --git a/VX-API/RtlNtStatusToDosErrorViaImport.cpp b/VX-API/RtlNtStatusToDosErrorViaImport.cpp new file mode 100644 index 0000000..2d42c2a --- /dev/null +++ b/VX-API/RtlNtStatusToDosErrorViaImport.cpp @@ -0,0 +1,23 @@ +#include "Win32Helper.h" + +DWORD RtlNtStatusToDosErrorViaImport(_In_ NTSTATUS Status) +{ + typedef ULONG(NTAPI* RTLNTSTATUSTODOSERROR)(NTSTATUS); + RTLNTSTATUSTODOSERROR RtlNtStatusToDosError; + HMODULE hModule = NULL; + DWORD dwError = ERROR_SUCCESS; + + hModule = GetModuleHandleEx2W(L"ntdll.dll"); + if (hModule == NULL) + return -1; + + RtlNtStatusToDosError = (RTLNTSTATUSTODOSERROR)GetProcAddressA((DWORD64)hModule, "RtlNtStatusToDosError"); + if (!RtlNtStatusToDosError) + return -1; + + dwError = RtlNtStatusToDosError(Status); + + RtlNtStatusToDosError = NULL; + + return dwError; +} \ No newline at end of file diff --git a/VX-API/SecureStringCopy.cpp b/VX-API/SecureStringCopy.cpp index e7daca1..aec2c90 100644 --- a/VX-API/SecureStringCopy.cpp +++ b/VX-API/SecureStringCopy.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size) +PCHAR SecureStringCopyA(_Inout_ PCHAR String1, _In_ LPCSTR String2, _In_ SIZE_T Size) { PCHAR pChar = String1; @@ -9,7 +9,7 @@ PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size) return pChar; } -PWCHAR SecureStringCopyW(PWCHAR String1, LPCWSTR String2, SIZE_T Size) +PWCHAR SecureStringCopyW(_Inout_ PWCHAR String1, _In_ LPCWSTR String2, _In_ SIZE_T Size) { PWCHAR pChar = String1; diff --git a/VX-API/StringCompare.cpp b/VX-API/StringCompare.cpp index 780df7f..ea85d79 100644 --- a/VX-API/StringCompare.cpp +++ b/VX-API/StringCompare.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -INT StringCompareA(LPCSTR String1, LPCSTR String2) +INT StringCompareA(_In_ LPCSTR String1, _In_ LPCSTR String2) { for (; *String1 == *String2; String1++, String2++) { @@ -11,7 +11,7 @@ INT StringCompareA(LPCSTR String1, LPCSTR String2) return ((*(LPCSTR)String1 < *(LPCSTR)String2) ? -1 : +1); } -INT StringCompareW(LPCWSTR String1, LPCWSTR String2) +INT StringCompareW(_In_ LPCWSTR String1, _In_ LPCWSTR String2) { for (; *String1 == *String2; String1++, String2++) { diff --git a/VX-API/StringConcat.cpp b/VX-API/StringConcat.cpp index b063450..e39d92b 100644 --- a/VX-API/StringConcat.cpp +++ b/VX-API/StringConcat.cpp @@ -1,13 +1,13 @@ #include "StringManipulation.h" -PWCHAR StringConcatW(PWCHAR String, PWCHAR String2) +PWCHAR StringConcatW(_Inout_ PWCHAR String, _In_ PWCHAR String2) { StringCopyW(&String[StringLengthW(String)], String2); return String; } -PCHAR StringConcatA(PCHAR String, PCHAR String2) +PCHAR StringConcatA(_Inout_ PCHAR String, _In_ PCHAR String2) { StringCopyA(&String[StringLengthA(String)], String2); diff --git a/VX-API/StringCopy.cpp b/VX-API/StringCopy.cpp index de6214b..226c9de 100644 --- a/VX-API/StringCopy.cpp +++ b/VX-API/StringCopy.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR StringCopyA(PCHAR String1, PCHAR String2) +PCHAR StringCopyA(_Inout_ PCHAR String1, _In_ PCHAR String2) { PCHAR p = String1; @@ -9,7 +9,7 @@ PCHAR StringCopyA(PCHAR String1, PCHAR String2) return String1; } -PWCHAR StringCopyW(PWCHAR String1, PWCHAR String2) +PWCHAR StringCopyW(_Inout_ PWCHAR String1, _In_ PWCHAR String2) { PWCHAR p = String1; diff --git a/VX-API/StringFindSubstring.cpp b/VX-API/StringFindSubstring.cpp index 564e45a..dc54439 100644 --- a/VX-API/StringFindSubstring.cpp +++ b/VX-API/StringFindSubstring.cpp @@ -36,7 +36,7 @@ INT StringCompareStringRegionW(PWCHAR String1, PWCHAR String2, SIZE_T Count) return 0; } -PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2) +PCHAR StringFindSubstringA(_In_ PCHAR String1, _In_ PCHAR String2) { PCHAR pPointer = String1; DWORD Length = (DWORD)StringLengthA(String2); @@ -50,7 +50,7 @@ PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2) return NULL; } -PWCHAR StringFindSubstringW(PWCHAR String1, PWCHAR String2) +PWCHAR StringFindSubstringW(_In_ PWCHAR String1, _In_ PWCHAR String2) { PWCHAR pPointer = String1; DWORD Length = (DWORD)StringLengthW(String2); diff --git a/VX-API/StringLength.cpp b/VX-API/StringLength.cpp index d80295b..0960bac 100644 --- a/VX-API/StringLength.cpp +++ b/VX-API/StringLength.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -SIZE_T StringLengthA(LPCSTR String) +SIZE_T StringLengthA(_In_ LPCSTR String) { LPCSTR String2; @@ -9,7 +9,7 @@ SIZE_T StringLengthA(LPCSTR String) return (String2 - String); } -SIZE_T StringLengthW(LPCWSTR String) +SIZE_T StringLengthW(_In_ LPCWSTR String) { LPCWSTR String2; diff --git a/VX-API/StringLocateChar.cpp b/VX-API/StringLocateChar.cpp index 52c62f1..fcbec3e 100644 --- a/VX-API/StringLocateChar.cpp +++ b/VX-API/StringLocateChar.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR StringLocateCharA(PCHAR String, INT Character) +PCHAR StringLocateCharA(_Inout_ PCHAR String, _In_ INT Character) { do { @@ -12,7 +12,7 @@ PCHAR StringLocateCharA(PCHAR String, INT Character) return NULL; } -PWCHAR StringLocateCharW(PWCHAR String, INT Character) +PWCHAR StringLocateCharW(_Inout_ PWCHAR String, _In_ INT Character) { do { diff --git a/VX-API/StringManipulation.h b/VX-API/StringManipulation.h index 2a68fa7..7e52939 100644 --- a/VX-API/StringManipulation.h +++ b/VX-API/StringManipulation.h @@ -1,35 +1,35 @@ #pragma once #include "Internal.h" -PCHAR CaplockStringA(PCHAR Ptr); -PWCHAR CaplockStringW(PWCHAR Ptr); -PVOID CopyMemoryEx(PVOID Destination, CONST PVOID Source, SIZE_T Length); -VOID ZeroMemoryEx(PVOID Destination, SIZE_T Size); -PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size); -PWCHAR SecureStringCopyW(PWCHAR String1, LPCWSTR String2, SIZE_T Size); -INT StringCompareA(LPCSTR String1, LPCSTR String2); -INT StringCompareW(LPCWSTR String1, LPCWSTR String2); -PWCHAR StringConcatW(PWCHAR String, PWCHAR String2); -PCHAR StringConcatA(PCHAR String, PCHAR String2); -PCHAR StringCopyA(PCHAR String1, PCHAR String2); -PWCHAR StringCopyW(PWCHAR String1, PWCHAR String2); -PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2); -PWCHAR StringFindSubstringW(PWCHAR String1, PWCHAR String2); -SIZE_T StringLengthA(LPCSTR String); -SIZE_T StringLengthW(LPCWSTR String); -PCHAR StringLocateCharA(PCHAR String, INT Character); -PWCHAR StringLocateCharW(PWCHAR String, INT Character); -PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring); -PWCHAR StringRemoveSubstringW(PWCHAR String, CONST PWCHAR Substring); -PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character); -PWCHAR StringTerminateStringAtCharW(PWCHAR String, INT Character); -PCHAR StringTokenA(PCHAR String, CONST PCHAR Delim); -PWCHAR StringTokenW(PWCHAR String, CONST PWCHAR Delim); +PCHAR CaplockStringA(_In_ PCHAR Ptr); +PWCHAR CaplockStringW(_In_ PWCHAR Ptr); +PVOID CopyMemoryEx(_Inout_ PVOID Destination, _In_ CONST PVOID Source, _In_ SIZE_T Length); +VOID ZeroMemoryEx(_Inout_ PVOID Destination, _In_ SIZE_T Size); +PCHAR SecureStringCopyA(_Inout_ PCHAR String1, _In_ LPCSTR String2, _In_ SIZE_T Size); +PWCHAR SecureStringCopyW(_Inout_ PWCHAR String1, _In_ LPCWSTR String2, _In_ SIZE_T Size); +INT StringCompareA(_In_ LPCSTR String1, _In_ LPCSTR String2); +INT StringCompareW(_In_ LPCWSTR String1, _In_ LPCWSTR String2); +PWCHAR StringConcatW(_Inout_ PWCHAR String, _In_ PWCHAR String2); +PCHAR StringConcatA(_Inout_ PCHAR String, _In_ PCHAR String2); +PCHAR StringCopyA(_Inout_ PCHAR String1, _In_ PCHAR String2); +PWCHAR StringCopyW(_Inout_ PWCHAR String1, _In_ PWCHAR String2); +PCHAR StringFindSubstringA(_In_ PCHAR String1, _In_ PCHAR String2); +PWCHAR StringFindSubstringW(_In_ PWCHAR String1, _In_ PWCHAR String2); +SIZE_T StringLengthA(_In_ LPCSTR String); +SIZE_T StringLengthW(_In_ LPCWSTR String); +PCHAR StringLocateCharA(_Inout_ PCHAR String, _In_ INT Character); +PWCHAR StringLocateCharW(_Inout_ PWCHAR String, _In_ INT Character); +PCHAR StringRemoveSubstringA(_Inout_ PCHAR String, _In_ CONST PCHAR Substring); +PWCHAR StringRemoveSubstringW(_Inout_ PWCHAR String, _In_ CONST PWCHAR Substring); +PCHAR StringTerminateStringAtCharA(_Inout_ PCHAR String, _In_ INT Character); +PWCHAR StringTerminateStringAtCharW(_Inout_ PWCHAR String, _In_ INT Character); +PCHAR StringTokenA(_In_ PCHAR String, _In_ CONST PCHAR Delim); +PWCHAR StringTokenW(_In_ PWCHAR String, _In_ CONST PWCHAR Delim); VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length); VOID CharArrayToByteArrayW(PWCHAR Char, PBYTE Byte, DWORD Length); -VOID RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString); -VOID RtlInitEmptyUnicodeString(PUNICODE_STRING UnicodeString, PWCHAR Buffer, USHORT BufferSize); -SIZE_T CharStringToWCharString(PWCHAR Destination, PCHAR Source, SIZE_T MaximumAllowed); -SIZE_T WCharStringToCharString(PCHAR Destination, PWCHAR Source, SIZE_T MaximumAllowed); -VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length); -VOID ByteArrayToCharArrayW(PWCHAR Destination, PBYTE Source, DWORD Length); \ No newline at end of file +VOID RtlInitUnicodeString(_Inout_ PUNICODE_STRING DestinationString, _In_ PCWSTR SourceString); +VOID RtlInitEmptyUnicodeString(_Inout_ PUNICODE_STRING UnicodeString, _In_ PWCHAR Buffer, _In_ USHORT BufferSize); +SIZE_T CharStringToWCharString(_Inout_ PWCHAR Destination, _In_ PCHAR Source, _In_ SIZE_T MaximumAllowed); +SIZE_T WCharStringToCharString(_Inout_ PCHAR Destination, _In_ PWCHAR Source, _In_ SIZE_T MaximumAllowed); +VOID ByteArrayToCharArrayA(_Inout_ PCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length); +VOID ByteArrayToCharArrayW(_Inout_ PWCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length); \ No newline at end of file diff --git a/VX-API/StringRemoveSubstring.cpp b/VX-API/StringRemoveSubstring.cpp index abee2ab..d947390 100644 --- a/VX-API/StringRemoveSubstring.cpp +++ b/VX-API/StringRemoveSubstring.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring) +PCHAR StringRemoveSubstringA(_Inout_ PCHAR String, _In_ CONST PCHAR Substring) { DWORD Length = (DWORD)StringLengthA(Substring); PCHAR pPointer = String; @@ -14,7 +14,7 @@ PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring) return String; } -PWCHAR StringRemoveSubstringW(PWCHAR String, CONST PWCHAR Substring) +PWCHAR StringRemoveSubstringW(_Inout_ PWCHAR String, _In_ CONST PWCHAR Substring) { DWORD Length = (DWORD)StringLengthW(Substring); PWCHAR pPointer = String; diff --git a/VX-API/StringTerminateStringAtChar.cpp b/VX-API/StringTerminateStringAtChar.cpp index 965b516..9fd0c76 100644 --- a/VX-API/StringTerminateStringAtChar.cpp +++ b/VX-API/StringTerminateStringAtChar.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character) +PCHAR StringTerminateStringAtCharA(_Inout_ PCHAR String, _In_ INT Character) { DWORD Length = (DWORD)StringLengthA(String); @@ -16,7 +16,7 @@ PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character) return NULL; } -PWCHAR StringTerminateStringAtCharW(PWCHAR String, INT Character) +PWCHAR StringTerminateStringAtCharW(_Inout_ PWCHAR String, _In_ INT Character) { DWORD Length = (DWORD)StringLengthW(String); diff --git a/VX-API/StringToken.cpp b/VX-API/StringToken.cpp index efcf889..2a0620a 100644 --- a/VX-API/StringToken.cpp +++ b/VX-API/StringToken.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -PCHAR StringTokenA(PCHAR String, CONST PCHAR Delim) +PCHAR StringTokenA(_In_ PCHAR String, _In_ CONST PCHAR Delim) { PCHAR Last; PCHAR SpanP, Token; @@ -46,7 +46,7 @@ CONTINUE: } -PWCHAR StringTokenW(PWCHAR String, CONST PWCHAR Delim) +PWCHAR StringTokenW(_In_ PWCHAR String, _In_ CONST PWCHAR Delim) { PWCHAR Last; PWCHAR SpanP, Token; diff --git a/VX-API/VX-API.vcxproj b/VX-API/VX-API.vcxproj index 902a3c0..1582559 100644 --- a/VX-API/VX-API.vcxproj +++ b/VX-API/VX-API.vcxproj @@ -153,7 +153,7 @@ - + @@ -199,13 +199,13 @@ - + @@ -230,6 +230,9 @@ + + + diff --git a/VX-API/VX-API.vcxproj.filters b/VX-API/VX-API.vcxproj.filters index 4a90111..aa6df70 100644 --- a/VX-API/VX-API.vcxproj.filters +++ b/VX-API/VX-API.vcxproj.filters @@ -222,7 +222,7 @@ Source Files\Windows API Helper Functions\Helper Functions - + Source Files\Windows API Helper Functions\Helper Functions @@ -312,9 +312,6 @@ Source Files\Windows API Helper Functions\Evasion - - Source Files\String Manipulation - Source Files\Windows API Helper Functions\Cryptography Related @@ -342,8 +339,11 @@ Source Files\Windows API Helper Functions\Evasion - - Source Files\Windows API Helper Functions\Malicious Capabilities + + Source Files\String Manipulation\String Conversion + + + Source Files\Windows API Helper Functions\Error Handling @@ -357,4 +357,7 @@ Header Files + + + \ No newline at end of file diff --git a/VX-API/WCharStringToCharString.cpp b/VX-API/WCharStringToCharString.cpp index 9214e22..c6286ce 100644 --- a/VX-API/WCharStringToCharString.cpp +++ b/VX-API/WCharStringToCharString.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -SIZE_T WCharStringToCharString(PCHAR Destination, PWCHAR Source, SIZE_T MaximumAllowed) +SIZE_T WCharStringToCharString(_Inout_ PCHAR Destination, _In_ PWCHAR Source, _In_ SIZE_T MaximumAllowed) { INT Length = (INT)MaximumAllowed; diff --git a/VX-API/Win32Helper.h b/VX-API/Win32Helper.h index a023d06..0d636bb 100644 --- a/VX-API/Win32Helper.h +++ b/VX-API/Win32Helper.h @@ -18,6 +18,7 @@ NTSTATUS GetLastNtStatusFromTeb(VOID); VOID SetLastErrorInTeb(_In_ DWORD ErrorCode); VOID SetLastNtStatusInTeb(_In_ NTSTATUS Status); DWORD Win32FromHResult(_In_ HRESULT Result); +DWORD RtlNtStatusToDosErrorViaImport(_In_ NTSTATUS Status); //cryptography related DWORD HashStringDjb2A(_In_ PCHAR String); diff --git a/VX-API/ZeroMemoryEx.cpp b/VX-API/ZeroMemoryEx.cpp index 723422b..c8bd3ad 100644 --- a/VX-API/ZeroMemoryEx.cpp +++ b/VX-API/ZeroMemoryEx.cpp @@ -1,6 +1,6 @@ #include "StringManipulation.h" -VOID ZeroMemoryEx(PVOID Destination, SIZE_T Size) +VOID ZeroMemoryEx(_Inout_ PVOID Destination, _In_ SIZE_T Size) { PULONG Dest = (PULONG)Destination; SIZE_T Count = Size / sizeof(ULONG);