원격 DLL 주입 C#
14203 단어 dll
1: using System; 2: using System.Collections.Generic; 3: using System.ComponentModel; 4: using System.Data; 5: using System.Diagnostics; 6: using System.Drawing; 7: using System.Linq; 8: using System.Runtime.InteropServices; 9: using System.Text; 10: using System.Windows.Forms; 11: 12: namespace hooktest01 13: { 14: public partial class Form1 : Form 15: { 16: [DllImport("kernel32.dll")] 17: public static extern int VirtualAllocEx(IntPtr hwnd, Int32 lpaddress, int size, int type, Int32 tect); 18: [DllImport("kernel32.dll")] 19: public static extern Boolean WriteProcessMemory(IntPtr hwnd, int baseaddress, string buffer, int nsize, int filewriten); 20: [DllImport("kernel32.dll")] 21: public static extern int GetProcAddress(int hwnd, string lpname); 22: [DllImport("kernel32.dll")] 23: public static extern int GetModuleHandleA(string name); 24: [DllImport("kernel32.dll")] 25: public static extern IntPtr CreateRemoteThread(IntPtr hwnd, int attrib, int size, int address, int par, int flags, int threadid); 26: [DllImport("kernel32.dll")] 27: public static extern Int32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds); 28: [DllImport("kernel32.dll")] 29: public static extern Boolean VirtualFree(IntPtr lpAddress, Int32 dwSize, Int32 dwFreeType); 30: Process pname; 31: UInt32 INFINITE = 0xFFFFFFFF; 32: Int32 PAGE_EXECUTE_READWRITE = 0x40; 33: Int32 MEM_COMMIT = 0x1000; 34: Int32 MEM_RESERVE = 0x2000; 35: Int32 MEM_RELEASE = 0x8000; 36: Int32 AllocBaseAddress; 37: IntPtr hwnd; 38: string dllname; 39: Int32 Pid; 40: Boolean ok; 41: Int32 loadaddr; 42: IntPtr ThreadHwnd; 43: 44: 45: public Form1() 46: { 47: InitializeComponent(); 48: } 49: 50: private void button1_Click(object sender, EventArgs e) 51: { 52: try 53: { 54: if (textBox1.Text == "" || textBox1.Text == null) 55: { 56: MessageBox.Show("Pid is null"); return; 57: } 58: if (textBox2.Text == "" || textBox2.Text == null) 59: { 60: MessageBox.Show("dll name is null"); return; 61: } 62: Pid = Int32.Parse(textBox1.Text); 63: dllname = textBox2.Text; 64: } 65: catch(Exception error) 66: { 67: MessageBox.Show(error.Message); return; 68: } 69: try 70: { 71: pname = Process.GetProcessById(Pid); 72: hwnd = pname.Handle; 73: } 74: catch(Exception error) 75: { // pid ; 76: MessageBox.Show (error.Message); return; 77: } 78: AllocBaseAddress= VirtualAllocEx(hwnd, 0, dllname.Length + 1, MEM_COMMIT+ MEM_RESERVE, PAGE_EXECUTE_READWRITE); 79: if (AllocBaseAddress == 0) 80: { 81: MessageBox.Show("virtualallocex fail"); return; 82: } 83: ok=WriteProcessMemory(hwnd, AllocBaseAddress, dllname, dllname.Length + 1,0); 84: if (!ok) 85: { 86: MessageBox.Show("writeprocessmemory fail"); return; 87: } 88: loadaddr = GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); 89: if (loadaddr == 0) 90: { // LoadLibraryA 91: MessageBox.Show("get loadlibraryA fail"); return; 92: } 93: ThreadHwnd=CreateRemoteThread(hwnd, 0, 0, loadaddr, AllocBaseAddress,0, 0); 94: if (ThreadHwnd ==IntPtr.Zero) 95: { 96: MessageBox.Show("createremotethread fail"); return; 97: } 98: 99: 100: WaitForSingleObject(ThreadHwnd, INFINITE); 101: MessageBox.Show("ok ,you can check now!!!"); 102: VirtualFree(hwnd, 0, MEM_RELEASE); 103: // ; 104: ProcessModuleCollection pmodule = pname.Modules; 105: foreach (ProcessModule processm in pmodule) 106: { 107: listBox1.Items.Add(processm.FileName); 108: } 109: pname.Dispose(); 110: } 111: // 112: 113: } 114: } .csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.