您好,登錄后才能下訂單哦!
DLL注入工具(遠程線程技術和簡單的MFC CListCtrl控件知識)、
DLL文件已經(jīng)編寫好、測試程序也很簡單、現(xiàn)在就是解決將DLL注入到目標進程中、、
這里采用遠程線程注入技術、、本來WIN32控制臺就可以、、為了學習下MFC就做了一個簡單的MFC框架去實現(xiàn)注入、、
DLL注入工具大概是這樣:
1 枚舉出所有進程(沒做到實時不過添加了一個刷新按鈕)、、
2 實現(xiàn)對所選中進程注入DLL、、
工具截圖如下:
下面結合代碼記錄、、
首先運行此工具、得到當前所有進程、、、使用CreateToolhelp32Snapshot函數(shù)、、
先在初始化的函數(shù)中將列表框的風格初始化好、、
DWORD ListStyle;
ListStyle=::GetWindowLong(m_List.m_hWnd,GWL_STYLE); //獲得窗口風格
ListStyle|=LVS_REPORT | LVS_SHOWSELALWAYS | LVS_EDITLABELS;
SetWindowLong(m_List.m_hWnd,GWL_STYLE,ListStyle);
ListStyle=m_List.GetExtendedStyle(); // CListCtrl m_List ;
ListStyle|=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; //高亮網(wǎng)格
m_List.SetExtendedStyle (ListStyle);
m_List.SetTextColor (RGB(0,0,0)); //字體顏色
m_List.SetTextBkColor (RGB(128,252,0)); //字體背景顏色
初始化列表框后開始獲取進程填充到列表中、、、先添加好 列 名稱、、
CRect RectList;
m_List.GetWindowRect (&RectList); //得List窗口的尺寸放于RectList中、、
m_List.InsertColumn(0,"序號",LVCFMT_CENTER,100);// RectList.Width()
m_List.InsertColumn(1,"進程名稱",LVCFMT_LEFT,180);
m_List.InsertColumn(2,"進程ID",LVCFMT_LEFT,RectList.Width()-299);
SetWindowText("Windows當前所有進程");//程序主窗口的名稱、、
獲取所有進程的代碼、、
char itoc[5];
CString s;
int i=0;
HANDLE Hsnap = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
for (BOOL bNext = Process32First(Hsnap,&PE32); bNext; bNext = Process32Next(Hsnap,&PE32))
{
sprintf(itoc,"%d",i); //將int轉成char[]; 序號1、2、3、、、
m_List.InsertItem(i,itoc); //向第i行寫入itoc、、
s.Format("%s",PE32.szExeFile); //將char[]轉換為Cstring 進程名字、、
m_List.SetItemText(i,1,s);//向第i行第1列寫入s、、
sprintf(itoc,"%d",PE32.th42ProcessID);//將DWORD 轉成char[]; 進程ID
m_List.SetItemText(i,2,itoc);// 向第i行第2列寫入itoc、、
i++;
}
CString total;
total.Format("%d",m_List.GetItemCount());//獲取行數(shù)代表進程數(shù)、、格式化到total中、
SetDlgItemText(IDC_Total2,total); // 給文本框賦值Cstring類型數(shù)據(jù)、、SetDlgItemText 即界面 左下角的框框、、
CloseHandle(Hsnap); //關閉句柄、
現(xiàn)在所有進程已經(jīng)得到、、接下來就是對其中選中的某一進程進行注入工作、、
首先給列表框添加消息、、雙擊即可、、
而在此消息中我們要得到被選中的那一行所在的進程的ID、也就是那一行第二列的數(shù)據(jù)、
void CMyDllInjectDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
bMouseDown = true; //這個變量是用來判斷用戶是否選中沒選中則不可進行操作、還可以用函數(shù)GetItemState判斷是否選中
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR;
// NM_LISTVIEW這個結構有以下成員(NMHDRhdr; int iItem; int iSubItem; UINT uNewState;
//UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam;);
//轉換為NM_LISTVIEW*類型、、獲取選中的行號列號(這里我們不需要列號肯定是獲取第二列)
CString csID = m_List.GetItemText (pNMListView->iItem,2); //得到被選中的行的對應的進程ID
iID = atoi(csID); //CString到int 將ID轉成int類型的全局變量、、
ProcessName = m_List.GetItemText (pNMListView->iItem,1); //得到進程名字、用于本進程不結束自己、(為HOOK OpenProcess 醞釀一下)
*pResult = 0; //將指針pResult所指位置的內容置0 函數(shù)自動生成的以免指針沒有初始化、、
}
好了 進程ID 得到了 接下來 就可以實現(xiàn)對此進程 進行注入了
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。