Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Cách gọi hàm từ dll đã được injection vào tiến trình khác?

  1. #1
    Ngày gia nhập
    05 2010
    Bài viết
    347

    Mặc định Cách gọi hàm từ dll đã được injection vào tiến trình khác?

    Em chào các anh.
    Em có đoạn code này để inject dll vào 1 process khác nhưng không biết cách gọi(thử mãi mà không được)

    Visual C# Code:
    1. [DllImport("kernel32")]
    2.         public static extern IntPtr CreateRemoteThread(
    3.           IntPtr hProcess,
    4.           IntPtr lpThreadAttributes,
    5.           uint dwStackSize,
    6.           UIntPtr lpStartAddress, // raw Pointer into remote process
    7.           IntPtr lpParameter,
    8.           uint dwCreationFlags,
    9.           out IntPtr lpThreadId
    10.         );
    11.  
    12.         [DllImport("kernel32.dll")]
    13.         public static extern IntPtr OpenProcess(
    14.             UInt32 dwDesiredAccess,
    15.             Int32 bInheritHandle,
    16.             Int32 dwProcessId
    17.             );
    18.  
    19.         [DllImport("kernel32.dll")]
    20.         public static extern Int32 CloseHandle(
    21.         IntPtr hObject
    22.         );
    23.  
    24.         [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
    25.         static extern bool VirtualFreeEx(
    26.             IntPtr hProcess,
    27.             IntPtr lpAddress,
    28.             UIntPtr dwSize,
    29.             uint dwFreeType
    30.             );
    31.  
    32.         [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
    33.         public static extern UIntPtr GetProcAddress(
    34.             IntPtr hModule,
    35.             string procName
    36.             );
    37.  
    38.         [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
    39.         static extern IntPtr VirtualAllocEx(
    40.             IntPtr hProcess,
    41.             IntPtr lpAddress,
    42.             uint dwSize,
    43.             uint flAllocationType,
    44.             uint flProtect
    45.             );
    46.  
    47.         [DllImport("kernel32.dll")]
    48.         static extern bool WriteProcessMemory(
    49.             IntPtr hProcess,
    50.             IntPtr lpBaseAddress,
    51.             string lpBuffer,
    52.             UIntPtr nSize,
    53.             out IntPtr lpNumberOfBytesWritten
    54.         );
    55.  
    56.         [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    57.         public static extern IntPtr GetModuleHandle(
    58.             string lpModuleName
    59.             );
    60.  
    61.         [DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
    62.         internal static extern Int32 WaitForSingleObject(
    63.             IntPtr handle,
    64.             Int32 milliseconds
    65.             );
    66.  
    67.         public Int32 GetProcessId(String proc)
    68.         {
    69.             Process[] ProcList;
    70.             ProcList = Process.GetProcessesByName(proc);
    71.             return ProcList[0].Id;
    72.         }
    73.         public void InjectDLL(IntPtr hProcess, String strDLLName)
    74.         {
    75.             IntPtr bytesout;
    76.  
    77.             // Length of string containing the DLL file name +1 byte padding
    78.             Int32 LenWrite = strDLLName.Length + 1;
    79.             // Allocate memory within the virtual address space of the target process
    80.             IntPtr AllocMem = (IntPtr)VirtualAllocEx(hProcess, (IntPtr)null, (uint)LenWrite, 0x1000, 0x40); //allocation pour WriteProcessMemory
    81.  
    82.             // Write DLL file name to allocated memory in target process
    83.             WriteProcessMemory(hProcess, AllocMem, strDLLName, (UIntPtr)LenWrite, out bytesout);
    84.             // Function pointer "Injector"
    85.             UIntPtr Injector = (UIntPtr)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    86.  
    87.             if (Injector == null)
    88.             {
    89.                 MessageBox.Show(" Injector Error! \n ");
    90.                 // return failed
    91.                 return;
    92.             }
    93.  
    94.             // Create thread in target process, and store handle in hThread
    95.             IntPtr hThread = (IntPtr)CreateRemoteThread(hProcess, (IntPtr)null, 0, Injector, AllocMem, 0, out bytesout);
    96.            
    97.             // Make sure thread handle is valid
    98.             if (hThread == null)
    99.             {
    100.                 //incorrect thread handle ... return failed
    101.                 MessageBox.Show(" hThread [ 1 ] Error! \n ");
    102.                 return;
    103.             }
    104.             UIntPtr Call = GetProcAddress(hThread, "Call");
    105.             // Time-out is 10 seconds...
    106.             int Result = WaitForSingleObject(hThread, 10 * 1000);
    107.             // Check whether thread timed out...
    108.             if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)
    109.             {
    110.                 /* Thread timed out... */
    111.                 MessageBox.Show(" hThread [ 2 ] Error! \n ");
    112.                 // Make sure thread handle is valid before closing... prevents crashes.
    113.                 if (hThread != null)
    114.                 {
    115.                     //Close thread in target process
    116.                     CloseHandle(hThread);
    117.                 }
    118.                 return;
    119.             }
    120.             // Sleep thread for 1 second
    121.             Thread.Sleep(1000);
    122.             // Clear up allocated space ( Allocmem )
    123.             VirtualFreeEx(hProcess, AllocMem, (UIntPtr)0, 0x8000);
    124.             // Make sure thread handle is valid before closing... prevents crashes.
    125.             if (hThread != null)
    126.             {
    127.                 //Close thread in target process
    128.                 CloseHandle(hThread);
    129.             }
    130.             // return succeeded
    131.             return;
    132.         }
    133. private void button1_Click(object sender, EventArgs e)
    134.         {
    135.             String strDLLName = @"C:\Users\Nguyen\Documents\Visual Studio 2012\Projects\MyDll\MyDll\bin\MyDll.dll";
    136.             String strProcessName = "notepad";
    137.  
    138.             Int32 ProcID = GetProcessId(strProcessName);
    139.             if (ProcID >= 0)
    140.             {
    141.                 IntPtr hProcess = (IntPtr)OpenProcess(0x1F0FFF, 1, ProcID);
    142.                 if (hProcess == null)
    143.                 {
    144.                     MessageBox.Show("OpenProcess() Failed!");
    145.                     return;
    146.                 }
    147.                 else
    148.                     InjectDLL(hProcess, strDLLName);
    149.             }
    150.         }
    Có bác nào đã từng làm được việc này giúp em với.
    Em xin cảm ơn

  2. #2
    Ngày gia nhập
    10 2009
    Nơi ở
    gầm cầu
    Bài viết
    156

    chủ đề nhạy cảm thế Process khác đã viết hoàn chỉnh thì inject thêm Dll cho nó chạy từ đúng thành sai ah` . Giỡn thôi cái này diễn đàn mình có vài bài nhưng viết ngôn ngữ C++ khó hiểu quá
    đợi các cao thủ viết C# vậy

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    347

    up. Có bác nào có thê giúp em không, em cảm ơn nhiều

Các đề tài tương tự

  1. Code trang login tránh được lỗi injection?
    Gửi bởi daogiatien trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 13
    Bài viết cuối: 09-05-2012, 10:46 PM
  2. Dùng ASP.NET liệu có bị SQL Injection từ bên ngoài
    Gửi bởi anhduongtalents trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 28-10-2011, 06:46 PM
  3. SQL Injection in .NET | Tìm hiểu về Injection in .NET
    Gửi bởi nthung trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 3
    Bài viết cuối: 08-12-2008, 11:30 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn