C#의 DLL 주입
                                            
 13373 단어  dll
                    
          [DllImport("kernel32.dll")]
          public static extern int VirtualAllocEx(IntPtr hwnd, int lpaddress, int size, int type, int tect);
          [DllImport("kernel32.dll")]
          public static extern int WriteProcessMemory(IntPtr hwnd, int baseaddress, string buffer, int nsize, int filewriten );
          [DllImport("kernel32.dll")]
          public static extern int GetProcAddress(int hwnd, string lpname);
          [DllImport("kernel32.dll")]
          public static extern int GetModuleHandleA(string name);
          [DllImport("kernel32.dll")]
          public static extern int CreateRemoteThread(IntPtr hwnd, int attrib, int size, int address, int par, int flags, int threadid);C#성명 API는 비교적 복잡하다. 비위탁 관리 dll을 호출하기 때문에 Dll Import를 사용하여 비위탁 관리 dll을 호출해야 한다. 그의 속성은 여기서 말할 필요가 없다. 인터넷에 소개가 많아서 찾아볼 수 있다. 그러나 c# 자신의 동적 링크 라이브러리를 호출하는 것은 매우 편리하다. 직접 인용을 추가하면 ok이다. dll을 호출할 때 사용할 인용은 using System이다.Runtime.InteropServices;이것은 덧붙이는 것을 잊지 마라. 다음은 만들어진 모든 코드이다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace dllinject
{
      public partial class Form1 : Form
      {
          [DllImport("kernel32.dll")] //  API  
          public static extern int VirtualAllocEx(IntPtr hwnd, int lpaddress, int size, int type, int tect);
          [DllImport("kernel32.dll")]
          public static extern int WriteProcessMemory(IntPtr hwnd, int baseaddress, string buffer, int nsize, int filewriten );
          [DllImport("kernel32.dll")]
          public static extern int GetProcAddress(int hwnd, string lpname);
          [DllImport("kernel32.dll")]
          public static extern int GetModuleHandleA(string name);
          [DllImport("kernel32.dll")]
          public static extern int CreateRemoteThread(IntPtr hwnd, int attrib, int size, int address, int par, int flags, int threadid);
          public Form1()
          {
              InitializeComponent();
          }
  
          private void button1_Click(object sender, EventArgs e)
          {
              int ok1;
              //int ok2;
              //int hwnd;
              int baseaddress;
              int temp=0;
              int hack;
              int yan;
              string dllname;
              dllname = "c:\\dll.dll";
              int dlllength;
              dlllength = dllname.Length + 1;
              Process[] pname = Process.GetProcesses(); //      
              foreach (Process name in pname) //    
              {
                  //MessageBox.Show(name.ProcessName.ToLower());
                  if (name.ProcessName.ToLower().IndexOf("notepad") != -1) //     ,        
                  {
                    
                      baseaddress = VirtualAllocEx(name.Handle, 0, dlllength , 4096, 4); //      
                      if (baseaddress == 0) //  0     ,    
                      {
                          MessageBox.Show("        !!");
                          Application.Exit();
                      }
                      ok1 = WriteProcessMemory(name.Handle, baseaddress, dllname, dlllength, temp); //   
                      if (ok1 == 0)
                      {
                        
                              MessageBox.Show("     !!");
                              Application.Exit();
                        }
                        hack = GetProcAddress(GetModuleHandleA("Kernel32"), "LoadLibraryA"); //  loadlibarary kernek32.dll  
                        if (hack == 0)
                        {
                            MessageBox.Show("          !!");
                            Application.Exit();
                        }
                        yan = CreateRemoteThread(name.Handle, 0, 0, hack, baseaddress, 0, temp); //      。
                        if (yan == 0)
                        {
                            MessageBox.Show("        !!");
                            Application.Exit();
                        }
                        else
                        {
                            MessageBox.Show("     dll!!");
                        }
  
                  }
  
              }
  
          }
      }이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.