a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

使用C#調(diào)用系統(tǒng)API實(shí)現(xiàn)內(nèi)存注入的代碼

2020-01-24 03:43:10
字體:
供稿:網(wǎng)友
復(fù)制代碼 代碼如下:

//首先導(dǎo)入命名空間
using System.Runtime.InteropServices;
/// <summary>
/// 在指定進(jìn)程的虛擬地址空間中保留或開辟一段區(qū)域..除非MEM_RESET被使用,否則將該內(nèi)存區(qū)域初始化為0.
/// </summary>
/// <param name="process">需要在其中分配空間的進(jìn)程的句柄.這個(gè)句柄必須擁有PROCESS_VM_OPERATION訪問權(quán)限</param>
/// <param name="pAddress">想要獲取的地址區(qū)域.一般用NULL自動(dòng)分配</param>
/// <param name="size">要分配的內(nèi)存大小.字節(jié)單位.注意實(shí)際分 配的內(nèi)存大小是頁內(nèi)存大小的整數(shù)倍</param>
/// <param name="type">內(nèi)存分配的類型</param>
/// <param name="protect">內(nèi)存頁保護(hù)</param>
/// <returns>執(zhí)行成功就返回分配內(nèi)存的首地址,失敗返回0。</returns>
[DllImport("kernel32.dll")] //聲明API函數(shù)
public static extern int VirtualAllocEx(IntPtr process, int pAddress, int size, int type, int protect);
/// <summary>
/// 寫入某一進(jìn)程的內(nèi)存區(qū)域。入口區(qū)必須可以訪問,否則操作將失敗
/// </summary>
/// <param name="process">進(jìn)程句柄</param>
/// <param name="baseAddress">要寫的內(nèi)存首地址</param>
/// <param name="buffer">指向要寫的數(shù)據(jù)的指針(數(shù)據(jù)當(dāng)前存放地址)。</param>
/// <param name="nSize">要寫入的字節(jié)數(shù)。</param>
/// <param name="lpNumberOfBytesWritten">實(shí)際數(shù)據(jù)的長度</param>
/// <returns>非零表示成功,零表示失敗</returns>
[DllImport("kernel32.dll")]
public static extern int WriteProcessMemory(IntPtr process, int baseAddress, string buffer, int nSize, int lpNumberOfBytesWritten);
/// <summary>
/// 檢索指定的動(dòng)態(tài)鏈接庫(DLL)中的輸出庫函數(shù)地址
/// </summary>
/// <param name="hModule"> DLL模塊句柄 包含此函數(shù)的DLL模塊的句柄。LoadLibrary或者GetModuleHandle函數(shù)可以返回此句柄。</param>
/// <param name="lpProcName">函數(shù)名 包含函數(shù)名的以NULL結(jié)尾的字符串,或者指定函數(shù)的序數(shù)值。如果此參數(shù)是一個(gè)序數(shù)值,它必須在一個(gè)字的底字節(jié),高字節(jié)必須為0。</param>
/// <returns>調(diào)用成功,返回DLL中的輸出函數(shù)地址,調(diào)用失敗,返回0。得到進(jìn)一步的錯(cuò)誤信息,調(diào)用函數(shù)GetLastError。</returns>
[DllImport("kernel32.dll")]
public static extern int GetProcAddress(int hModule, string lpProcName);
/// <summary>
/// 獲取一個(gè)應(yīng)用程序或動(dòng)態(tài)鏈接庫的模塊句柄
/// </summary>
/// <param name="moduleName">指定模塊名,這通常是與模塊的文件名相同的一個(gè)名字</param>
/// <returns>如執(zhí)行成功成功,則返回模塊句柄。零表示失敗</returns>
[DllImport("kernel32.dll")]
public static extern int GetModuleHandleA(string moduleName);
/// <summary>
/// 創(chuàng)建一個(gè)在其它進(jìn)程地址空間中運(yùn)行的線程(也稱:創(chuàng)建遠(yuǎn)程線程).
/// </summary>
/// <param name="process">目標(biāo)進(jìn)程的句柄</param>
/// <param name="threadAttributes">指向線程的安全描述結(jié)構(gòu)體的指針,一般設(shè)置為0,表示使用默認(rèn)的安全級(jí)別</param>
/// <param name="stackSize">線程堆棧大小,一般設(shè)置為0,表示使用默認(rèn)的大小,一般為1M</param>
/// <param name="startAddress">線程函數(shù)的地址</param>
/// <param name="parameter">傳給線程函數(shù)的參數(shù)</param>
/// <param name="creationFlags">線程的創(chuàng)建方式(0表示線程創(chuàng)建后立即運(yùn)行 CREATE_SUSPENDED 0x00000004以掛起方式創(chuàng)建 創(chuàng)建不會(huì)運(yùn)行,直到調(diào)用 ResumeThread函數(shù))</param>
/// <param name="threadid">指向所創(chuàng)建線程句柄的指針,如果創(chuàng)建失敗,該參數(shù)為0</param>
/// <returns>如果調(diào)用成功,返回新線程句柄,失敗返回0</returns>
[DllImport("kernel32.dll")]
public static extern int CreateRemoteThread(IntPtr process, int threadAttributes, int stackSize, int startAddress, int parameter, int creationFlags, int threadid);

復(fù)制代碼 代碼如下:

/// <summary>
/// 根據(jù)進(jìn)程名稱獲取進(jìn)程
/// </summary>
/// <param name="ProcessName">進(jìn)程名稱</param>
/// <returns></returns>
public Process GetProcessByName(string ProcessName)
{
//取得所有進(jìn)程
Process[] pname = Process.GetProcesses();
//遍歷進(jìn)程
foreach (Process name in pname)
{
//如果查找到進(jìn)程名稱 返回
if (name.ProcessName.ToLower().IndexOf(ProcessName) != -1)
return name;
}
return null;
}

復(fù)制代碼 代碼如下:

public void killDll()
{
string dllName = "c://text.dll";
int dlllength = dllName.Length + 1;
//這里以記事本為例
Process processName = GetProcessByName("notepad");
//如果查找到記事本進(jìn)程,那么下面開始注入
if (processName != null)
{
//申請(qǐng)內(nèi)存空間,執(zhí)行成功就返回分配內(nèi)存的首地址,不成功就是0。
int baseaddress = VirtualAllocEx(processName.Handle, 0, dlllength, 4096, 4);
if (baseaddress == 0)
{
MessageBox.Show("申請(qǐng)內(nèi)存空間失敗!");
return;
}
//寫內(nèi)存
int result = WriteProcessMemory(processName.Handle, baseaddress, dllName, dlllength, 0);
if (result == 0)
{
MessageBox.Show("寫內(nèi)存失敗!");
return;
}
//取得loadlibarary在kernek32.dll地址
int procAddress = GetProcAddress(GetModuleHandleA("Kernel32"), "LoadLibraryA");
if (procAddress == 0)
{
MessageBox.Show("無法取得函數(shù)的入口點(diǎn)!");
return;
}
//創(chuàng)建遠(yuǎn)程線程。
result = CreateRemoteThread(processName.Handle, 0, 0, 0, baseaddress, 0, 0);
if (result == 0)
{
MessageBox.Show("創(chuàng)建遠(yuǎn)程線程失敗!");
return;
}
else
MessageBox.Show("已成功注入dll!");
}
}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品一区二区三区在线 | 91午夜在线 | 日韩超级毛片 | 国产成人av一区二区 | 超级乱淫片国语对白免费视频 | 久久精品一 | 日韩大片 | 久久精品网 | 日韩欧美中文字幕在线视频 | 日日操av | 成人福利网 | 欧美日韩综合精品 | 国产黄色大片网站 | 欧美一区二区在线视频 | 青青久草在线 | 久久久精彩视频 | 国产精品资源在线 | 国产成人久久 | 欧美精品国产精品 | 91麻豆精品国产91久久久资源速度 | 中文字幕视频在线 | 国外成人在线视频网站 | 色精品 | 精品国产一区二区在线 | 国产成人午夜 | 日本久久精品视频 | 国内精品视频一区国产 | 精品亚洲一区二区三区 | 99在线国产 | 2020国产在线 | 久久精品在线观看视频 | 99精品欧美一区二区三区综合在线 | 中文字幕日韩一区二区三区 | 国产一级片 | 盗摄精品av一区二区三区 | 黄色在线网站 | 亚洲中出| 黄色在线网站 | 四虎在线看片 | 国产精品视屏 | 成人精品视频99在线观看免费 |