Exemple #1
0
    public static void RtlInitUnicodeString(ref STRUCTS.UNICODE_STRING DestinationString, [MarshalAs(UnmanagedType.LPWStr)] string SourceString)
    {
        // Craft an array for the arguments
        object[] funcargs =
        {
            DestinationString, SourceString
        };

        DynamicAPIInvoke(@"ntdll.dll", @"RtlInitUnicodeString", typeof(DELEGATES.RtlInitUnicodeString), ref funcargs);

        // Update the modified variables
        DestinationString = (STRUCTS.UNICODE_STRING)funcargs[0];
    }
Exemple #2
0
    /// <summary>
    /// Resolves LdrLoadDll and uses that function to load a DLL from disk.
    /// </summary>
    /// <author>Ruben Boonen (@FuzzySec)</author>
    /// <param name="DLLPath">The path to the DLL on disk. Uses the LoadLibrary convention.</param>
    /// <returns>IntPtr base address of the loaded module or IntPtr.Zero if the module was not loaded successfully.</returns>
    public static IntPtr LoadModuleFromDisk(string DLLPath)
    {
        STRUCTS.UNICODE_STRING uModuleName = new STRUCTS.UNICODE_STRING();
        RtlInitUnicodeString(ref uModuleName, DLLPath);

        IntPtr hModule = IntPtr.Zero;

        STRUCTS.NTSTATUS CallResult = LdrLoadDll(IntPtr.Zero, 0, ref uModuleName, ref hModule);
        if (CallResult != STRUCTS.NTSTATUS.Success || hModule == IntPtr.Zero)
        {
            return(IntPtr.Zero);
        }

        return(hModule);
    }
Exemple #3
0
    public static STRUCTS.NTSTATUS LdrLoadDll(IntPtr PathToFile, UInt32 dwFlags, ref STRUCTS.UNICODE_STRING ModuleFileName, ref IntPtr ModuleHandle)
    {
        // Craft an array for the arguments
        object[] funcargs =
        {
            PathToFile, dwFlags, ModuleFileName, ModuleHandle
        };

        STRUCTS.NTSTATUS retValue = (STRUCTS.NTSTATUS)DynamicAPIInvoke(@"ntdll.dll", @"LdrLoadDll", typeof(DELEGATES.RtlInitUnicodeString), ref funcargs);

        // Update the modified variables
        ModuleHandle = (IntPtr)funcargs[3];

        return(retValue);
    }