




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第在C#程序中注入惡意DLL的方法詳解目錄一、背景二、實(shí)現(xiàn)原理1.基本思路2.案例演示3.自定義注入三:總結(jié)
一、背景
前段時(shí)間在訓(xùn)練營上課的時(shí)候就有朋友提到一個(gè)問題,為什么Windbg附加到C#程序后,程序就處于中斷狀態(tài)了?它到底是如何實(shí)現(xiàn)的?其實(shí)簡而言之就是線程的遠(yuǎn)程注入,這一篇就展開說一下。
二、實(shí)現(xiàn)原理
1.基本思路
WinDbg在附加進(jìn)程的時(shí)候,會(huì)注入一個(gè)線程到C#進(jìn)程中,注入成功后,會(huì)執(zhí)行一個(gè)DbgBreakPoint()函數(shù),其實(shí)就是int3,這時(shí)候CPU就會(huì)執(zhí)行3號(hào)中斷函數(shù),將當(dāng)前進(jìn)程的所有線程進(jìn)行暫停,文字不好理解的話,畫一個(gè)圖大概就是這樣。
口說無憑,接下來用上一個(gè)簡單案例演示一下。
2.案例演示
首先寫一個(gè)簡單的C#程序,不斷的輸出時(shí)間和標(biāo)號(hào),代碼如下:
internal
class
Program
{
static
void
Main(string[]
args)
{
for
(int
i
=
0;
i
10000;
i++)
{
Console.WriteLine($"{DateTime.Now},i={i}");
Thread.Sleep(1000);
}
}
}
把程序跑起來后,使用WinDbg附加,你可以發(fā)現(xiàn)Command自動(dòng)切換到了8號(hào)線程,通過k命令可以看到最上面是一個(gè)int3中斷,截圖如下:
這里就有一個(gè)想法了,既然WinDbg可以注入,為何我的程序就注入不得呢?既然我的程序可以注入,那就可以做一些我想做的事情。
3.自定義注入
有了自定義注入的想法,接下來的實(shí)現(xiàn)步驟大概是這樣的。
注入一個(gè)線程到C#程序中。讓程序加載一個(gè)dll文件。在dll中做一些我想做的業(yè)務(wù)邏輯。
接下來新建一個(gè)C++的動(dòng)態(tài)鏈接庫,在DLLMain入口函數(shù)的DLL_PROCESS_ATTACH事件中寫一個(gè)printf函數(shù),如果在C#程序中輸出來了,就算成功注入了,參考代碼如下:
#include
Windows.h
#include
stdio.h
BOOL
APIENTRY
DllMain(HMODULE
hModule,
DWORD
ul_reason_for_call,
LPVOID
lpReserved
switch
(ul_reason_for_call)
case
DLL_PROCESS_ATTACH:
printf("
總部,總部,我已經(jīng)成功打入內(nèi)部!ul_reason_for_call=%d\n",
ul_reason_for_call);
break;
return
TRUE;
要被加載的MyInject.dll已經(jīng)構(gòu)建完畢,接下來就用Win32API的CreateRemoteThread()實(shí)現(xiàn)遠(yuǎn)程注入,但注入之前需要做三件事情。
獲取C#程序的進(jìn)程句柄。在C#進(jìn)程中申請(qǐng)一塊內(nèi)存空間,存放加載的path路徑。調(diào)用LoadLibraryW函數(shù)在C#進(jìn)程中實(shí)現(xiàn)dll加載。
過程有了,新建一個(gè)C++控制臺(tái)程序ConsoleApplication1.exe,整體的參考代碼如下:
#include
iostream
#include
Windows.h
#include
stdio.h
#include
stdlib.h
#include
Tlhelp32.h
DWORD
GetPid(const
WCHAR*
szName)
HANDLE
hprocessSnap
=
NULL;
PROCESSENTRY32
pe32
=
{
0
};
hprocessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
pe32.dwSize
=
sizeof(PROCESSENTRY32);
if
(Process32First(hprocessSnap,
pe32))
do
{
if
(!wcscmp(szName,
pe32.szExeFile))
{
return
(int)pe32.th32ProcessID;
}
while
(Process32Next(hprocessSnap,
pe32));
else
CloseHandle(hprocessSnap);
return
0;
int
main()
const
wchar_t*
path
=
L"D:\\net6\\ConsoleApp1\\x64\\Debug\\MyInject.dll";
//要注入的dll文件地址
//1.
獲取進(jìn)程ID
DWORD
procID
=
GetPid(L"ConsoleApp4.exe");
//2.
獲取進(jìn)程句柄
HANDLE
hProcess
=
OpenProcess(PROCESS_ALL_ACCESS,
FALSE,
procID);
//3.
在目標(biāo)進(jìn)程中開辟一塊空間
LPVOID
pRemoteAdress
=
VirtualAllocEx(hProcess,
NULL,
wcslen(path)
*
2,
MEM_COMMIT,
PAGE_READWRITE);
//4.
將
path
寫入到這塊空間中
BOOL
bRet
=
WriteProcessMemory(hProcess,
pRemoteAdress,
path,
wcslen(path)
*
2,
NULL);
//5.
讓目標(biāo)線程調(diào)用
LoadLibraryW
加載我們注入的
dll
HMODULE
hModule
=
GetModuleHandle(L"kernel32.dll");
LPTHREAD_START_ROUTINE
dwLoadAddr
=
(LPTHREAD_START_ROUTINE)GetProcAddress(hModule,
"LoadLibraryW");
HANDLE
hThread
=
CreateRemoteThread(
hProcess,
NULL,
(LPTHREAD_START_ROUTINE)dwLoadAddr,
pRemoteAdress,
NULL,
NULL
//6.函數(shù)執(zhí)行完后,釋放這塊空間。
WaitForSingleObject(hThread,
-1);
VirtualFreeEx(hProcess,
pRemoteAdress,
1,
MEM_DECOMMIT);
system("pause");
return
0;
}
萬事具備,接下來我們將ConsoleApplication1.exe啟動(dòng),可以成功觀察到ConsoleApp4.exe上已經(jīng)注入成功的輸出,截圖如下:
三:總結(jié)
這就是對(duì)Win
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市車庫抵押擔(dān)保合同模板
- 老師上課介紹課件
- 財(cái)務(wù)分析財(cái)務(wù)控制模型合同
- DJ音樂節(jié)特邀嘉賓聘用合同
- 企業(yè)文化標(biāo)志設(shè)計(jì)及推廣實(shí)施合同
- 商務(wù)會(huì)議會(huì)務(wù)培訓(xùn)與指導(dǎo)合同
- 村級(jí)三員考試題庫及答案
- 美術(shù)老師課件介紹
- 防雷安全管理制度(責(zé)任制)
- 危廢庫日常檢查記錄表
- GB/T 11177-1989無機(jī)膠粘劑套接壓縮剪切強(qiáng)度試驗(yàn)方法
- GB 28755-2012簡易升降機(jī)安全規(guī)程
- 鈷領(lǐng)域:華友鈷業(yè)企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 內(nèi)容參考zipc教程
- FZ/T 43022-2011莨綢工藝飾品
- 基金投資管理系統(tǒng)O32用戶手冊-股指期貨套保系統(tǒng)
- 機(jī)械原理課程設(shè)計(jì)-自動(dòng)打印機(jī)設(shè)計(jì)說明書
- 冰山模型提出者麥克利蘭教授6族勝任力分析模型
- 建設(shè)工程消防設(shè)計(jì)審查申報(bào)表
- 江西省中考語文備考及答題技巧——語文考點(diǎn)及答題策略-人教版初中九年級(jí)全冊語文素材
- 成立生物安全委員會(huì)及工作制度管理辦法和職責(zé)
評(píng)論
0/150
提交評(píng)論