firemail
标题: 进程注入器增强版 V1.0 源码 [打印本页]
作者: Qter 时间: 2021-5-2 11:10
标题: 进程注入器增强版 V1.0 源码
本帖最后由 Qter 于 2021-5-2 11:14 编辑
进程注入器 V1.0
InjectDll.rar
(712.3 KB, 下载次数: 0)
进程注入器增强版 V1.0 源码 .docx
(227.72 KB, 下载次数: 0)
界面简单漂亮,可以直观的查看注入的情况。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml5160\wps1.jpg
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml5160\wps2.jpg
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml5160\wps3.jpg
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml5160\wps4.jpg
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml5160\wps5.jpg
DLL工程的代码简单,只是弹出一些提示信息。
当DLL加载到目标进程时,弹出"DLL已进入目标进程。",
当从目标进程中卸载DLL,弹出"DLL已从目标进程卸载。"。
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
switch ( fdwReason )
{
case DLL_PROCESS_ATTACH:
{
MessageBox( NULL,"DLL已进入目标进程。", _T("信息"), MB_ICONINFORMATION );
}
break;
case DLL_PROCESS_DETACH:
{
MessageBox( NULL, "DLL已从目标进程卸载。", _T("信息"), MB_ICONINFORMATION );
}
break;
}
return TRUE;
}
在InjectDLl工程中,注入和卸载DLL。
你可以查看进程的模块,来判断注入是否成功,也可以根据弹出的信息来判断。
//枚举进程
void CInjectDllDlg::EnumProcess()
{
m_processList.DeleteAllItems();
HANDLE handle;
PROCESSENTRY32 peInfo;
peInfo.dwSize=sizeof(PROCESSENTRY32);
handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
bool result=Process32First(handle,&peInfo);//在使用Process32First前必须给peInfo设置它的dwSize
int i=0;
while(result)
{
CString PID;
PID.Format("%i",peInfo.th32ProcessID);//Format,将DWORD转化为CString
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, peInfo.th32ProcessID);
char szProcessName[MAX_PATH];
memset(szProcessName,0,MAX_PATH);//加了后szProcessName后面没有烦人的烫烫烫烫烫烫
GetModuleFileNameEx(hProcess,NULL,szProcessName,MAX_PATH);
if (strcmp(szProcessName,"")==0||strcmp(szProcessName,"?")==0)
{
strcpy(szProcessName,"[系统]");//美观,不会出现“”,“?”
}
m_processList.InsertItem(i,"");
m_processList.SetItemText(i,0,PID);
m_processList.SetItemText(i,1,peInfo.szExeFile);
m_processList.SetItemText(i,2,szProcessName);
i++;
result=Process32Next(handle,&peInfo);
}
}
//获取选中的进程列表中进程的PID,PID作为注入、卸载时的传入参数
DWORD CInjectDllDlg::GetSelectPID()
{
POSITION pos =m_processList.GetFirstSelectedItemPosition();
if (NULL==pos)
{
MessageBox("请先选中一条记录!", "操作错误");
}
int index=m_processList.GetNextSelectedItem(pos);
//m_processList.SetItemState(index,LVIS_SELECTED,LVIS_SELECTED);//选中某行
char PID[10]="";
m_processList.GetItemText(index,0,PID,10);
dwProcessID=atoi(PID);
return dwProcessID;
}
本帖隐藏的内容
//根据选中的进程列表中进程的PID来枚举模块
void CInjectDllDlg::OnClickListProcess(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
GetSelectPID();
GetModuleByPID(dwProcessID);
}
//根据进程PID获取模块
void CInjectDllDlg::GetModuleByPID(DWORD dwID)
{
m_moduleList.DeleteAllItems();
CString strModulePath;
CString strModuleName;
CString strModuleAddr;
BOOL bFound=FALSE;
int number=0;
HANDLE hModuleSnap=NULL;
MODULEENTRY32 me32={0};
hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwID);
if (hModuleSnap==INVALID_HANDLE_VALUE)
{
return;
}
me32.dwSize=sizeof(MODULEENTRY32);
bool bRet=Module32First(hModuleSnap,&me32);
while (bRet)//不喜欢do while
{
strModuleAddr.Format("0X%x",me32.modBaseAddr);
strModuleName.Format("%s",me32.szModule);
strModulePath.Format("%s",me32.szExePath);
m_moduleList.InsertItem(number,"");
m_moduleList.SetItemText(number,0,strModuleAddr);
m_moduleList.SetItemText(number,1,strModuleName);
m_moduleList.SetItemText(number,2,strModulePath);
number++;
bRet=Module32Next(hModuleSnap,&me32);
}
CloseHandle (hModuleSnap);
}
//注入进程
void CInjectDllDlg::OnIniect()
{
// TODO: Add your control notification handler code here
char DllPath[255];
GetCurrentDirectory(sizeof(DllPath),DllPath);//得到程序自身路径
strcat(DllPath,"\\DLL.dll");//得到DLL带路径文件名
RemoteLoadLibrary(dwProcessID,DllPath);
}
//从进程中卸载注入的DLL
void CInjectDllDlg::OnDetach()
{
// TODO: Add your control notification handler code here
char DllPath[255];
GetCurrentDirectory(sizeof(DllPath),DllPath);//得到程序自身路径
strcat(DllPath,"\\DLL.dll");//得到DLL带路径文件名
RemoteFreeLibrary(dwProcessID,DllPath);
}
//刷新,查看进程的模块中是否存在要注入的DLL
void CInjectDllDlg::OnRefresh()
{
// TODO: Add your control notification handler code here
EnumProcess();
GetModuleByPID(dwProcessID);
}
void CInjectDllDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
下次有机会发个简易的gh0st 3.6的卸载工具的源码,是将代码直接写入目标进程的内存空间来注入。
欢迎光临 firemail (http://firemail.wang:8088/) |
Powered by Discuz! X3 |