自动内存驻留程序Word格式.docx

上传人:b****5 文档编号:16448464 上传时间:2022-11-23 格式:DOCX 页数:25 大小:1.29MB
下载 相关 举报
自动内存驻留程序Word格式.docx_第1页
第1页 / 共25页
自动内存驻留程序Word格式.docx_第2页
第2页 / 共25页
自动内存驻留程序Word格式.docx_第3页
第3页 / 共25页
自动内存驻留程序Word格式.docx_第4页
第4页 / 共25页
自动内存驻留程序Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

自动内存驻留程序Word格式.docx

《自动内存驻留程序Word格式.docx》由会员分享,可在线阅读,更多相关《自动内存驻留程序Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

自动内存驻留程序Word格式.docx

//

#include"

stdafx.h"

#defineDEF_DLL_PORT_declspec(dllexport)

DllProcess.h"

#include<

tchar.h>

#ifdef_MANAGED

#pragmamanaged(push,off)

BOOL__stdcallMyCreateProcess(

LPCTSTRlpApplicationName,

LPTSTRlpCommandLine,

LPSECURITY_ATTRIBUTESlpProcessAttributes,

LPSECURITY_ATTRIBUTESlpThreadAttributes,

BOOLbInheritHandles,

DWORDdwCreationFlags,

LPVOIDlpEnvironment,

LPCTSTRlpCurrentDirectory,

LPSTARTUPINFOlpStartupInfo,

LPPROCESS_INFORMATIONlpProcessInformation

{

returnTRUE;

}

BOOLAPIENTRYDllMain(HMODULEhModule,

DWORDul_reason_for_call,

LPVOIDlpReserved

switch(ul_reason_for_call)

{

caseDLL_PROCESS_ATTACH:

MessageBox(NULL,_T("

注入成功·

·

~!

"

),0,0);

//自己想要运行的程序

//·

//·

//…………………

break;

caseDLL_PROCESS_DETACH:

卸载成功``````````````````````~!

}

#pragmamanaged(pop)

//源程序代码:

1.MFCEnter.h

//MFCEnter.h:

PROJECT_NAME应用程序的主头文件

#ifndef__AFXWIN_H__

#error"

在包含此文件之前包含“stdafx.h”以生成PCH文件"

resource.h"

//主符号

//CMFCEnterApp:

//有关此类的实现,请参阅MFCEnter.cpp

classCMFCEnterApp:

publicCWinApp

public:

CMFCEnterApp();

//重写

public:

virtualBOOLInitInstance();

//实现

DECLARE_MESSAGE_MAP()

};

externCMFCEnterApptheApp;

2.MFCEnterDlg.h

//MFCEnterDlg.h:

头文件

afxwin.h"

Tlhelp32.h>

afxcmn.h"

Psapi.h>

//路径函数的库

#pragmacomment(lib,"

Kernel32.lib"

Psapi.lib"

//CMFCEnterDlg对话框

classCMFCEnterDlg:

publicCDialog

//构造

CMFCEnterDlg(CWnd*pParent=NULL);

//标准构造函数

//对话框数据

enum{IDD=IDD_MFCENTER_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

//DDX/DDV支持

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

afx_msgvoidOnBnClickedEnter();

CEditm_ediProcessID;

CEditm_edtDllPath;

afx_msgvoidOnBnClickedGetdllPath();

afx_msgvoidOnBnClickedUnist();

afx_msgvoidGetToolShot();

afx_msgvoidInitList();

CListCtrlm_ListProcess;

afx_msgvoidOnBnClickedOpenprocess();

afx_msgvoidOnNMClickListProcess(NMHDR*pNMHDR,LRESULT*pResult);

afx_msgvoidOnNMDblclkListProcess(NMHDR*pNMHDR,LRESULT*pResult);

3.MFCEnter.cpp

//MFCEnter.cpp:

定义应用程序的类行为。

MFCEnter.h"

MFCEnterDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

//CMFCEnterApp

BEGIN_MESSAGE_MAP(CMFCEnterApp,CWinApp)

ON_COMMAND(ID_HELP,&

CWinApp:

:

OnHelp)

END_MESSAGE_MAP()

//CMFCEnterApp构造

CMFCEnterApp:

CMFCEnterApp()

//TODO:

在此处添加构造代码,

//将所有重要的初始化放置在InitInstance中

//唯一的一个CMFCEnterApp对象

CMFCEnterApptheApp;

//CMFCEnterApp初始化

BOOLCMFCEnterApp:

InitInstance()

//如果一个运行在WindowsXP上的应用程序清单指定要

//使用ComCtl32.dll版本6或更高版本来启用可视化方式,

//则需要InitCommonControlsEx()。

否则,将无法创建窗口。

INITCOMMONCONTROLSEXInitCtrls;

InitCtrls.dwSize=sizeof(InitCtrls);

//将它设置为包括所有要在应用程序中使用的

//公共控件类。

InitCtrls.dwICC=ICC_WIN95_CLASSES;

InitCommonControlsEx(&

InitCtrls);

CWinApp:

InitInstance();

AfxEnableControlContainer();

//标准初始化

//如果未使用这些功能并希望减小

//最终可执行文件的大小,则应移除下列

//不需要的特定初始化例程

//更改用于存储设置的注册表项

应适当修改该字符串,

//例如修改为公司或组织名

SetRegistryKey(_T("

应用程序向导生成的本地应用程序"

));

CMFCEnterDlgdlg;

m_pMainWnd=&

dlg;

INT_PTRnResponse=dlg.DoModal();

if(nResponse==IDOK)

//TODO:

在此处放置处理何时用“确定”来关闭

//对话框的代码

elseif(nResponse==IDCANCEL)

在此放置处理何时用“取消”来关闭

//由于对话框已关闭,所以将返回FALSE以便退出应用程序,

//而不是启动应用程序的消息泵。

returnFALSE;

4.MFCEnterDlg.cpp

//MFCEnterDlg.cpp:

实现文件

//用于应用程序“关于”菜单项的CAboutDlg对话框

classCAboutDlg:

CAboutDlg();

enum{IDD=IDD_ABOUTBOX};

CAboutDlg:

CAboutDlg():

CDialog(CAboutDlg:

IDD)

voidCAboutDlg:

DoDataExchange(CDataExchange*pDX)

CDialog:

DoDataExchange(pDX);

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

CMFCEnterDlg:

CMFCEnterDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMFCEnterDlg:

IDD,pParent)

m_hIcon=AfxGetApp()->

LoadIcon(IDR_MAINFRAME);

voidCMFCEnterDlg:

DDX_Control(pDX,IDC_PROCESS_ID,m_ediProcessID);

DDX_Control(pDX,IDC_DLL_PATH,m_edtDllPath);

DDX_Control(pDX,IDC_LIST_PROCESS,m_ListProcess);

BEGIN_MESSAGE_MAP(CMFCEnterDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDC_ENTER,&

OnBnClickedEnter)

ON_BN_CLICKED(IDC_GETDLL_PATH,&

OnBnClickedGetdllPath)

ON_BN_CLICKED(IDC_UNIST,&

OnBnClickedUnist)

ON_BN_CLICKED(IDC_OPENPROCESS,&

OnBnClickedOpenprocess)

//ON_NOTIFY(HDN_ITEMDBLCLICK,0,&

OnHdnItemdblclickListProcess)

//ON_NOTIFY(LVN_COLUMNCLICK,IDC_LIST_PROCESS,&

OnLvnColumnclickListProcess)

ON_NOTIFY(NM_CLICK,IDC_LIST_PROCESS,&

OnNMClickListProcess)

ON_NOTIFY(NM_DBLCLK,IDC_LIST_PROCESS,&

OnNMDblclkListProcess)

//CMFCEnterDlg消息处理程序

BOOLCMFCEnterDlg:

OnInitDialog()

OnInitDialog();

//将“关于...”菜单项添加到系统菜单中。

//IDM_ABOUTBOX必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX&

0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<

0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->

AppendMenu(MF_SEPARATOR);

AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

//设置此对话框的图标。

当应用程序主窗口不是对话框时,框架将自动

//执行此操作

SetIcon(m_hIcon,TRUE);

//设置大图标

SetIcon(m_hIcon,FALSE);

//设置小图标

在此添加额外的初始化代码

InitList();

//除非将焦点设置到控件,否则返回TRUE

OnSysCommand(UINTnID,LPARAMlParam)

if((nID&

0xFFF0)==IDM_ABOUTBOX)

CAboutDlgdlgAbout;

dlgAbout.DoModal();

else

CDialog:

OnSysCommand(nID,lParam);

//如果向对话框添加最小化按钮,则需要下面的代码

//来绘制该图标。

对于使用文档/视图模型的MFC应用程序,

//这将由框架自动完成。

OnPaint()

if(IsIconic())

CPaintDCdc(this);

//用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,reinterpret_cast<

WPARAM>

(dc.GetSafeHdc()),0);

//使图标在工作矩形中居中

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&

rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//绘制图标

dc.DrawIcon(x,y,m_hIcon);

OnPaint();

//当用户拖动最小化窗口时系统调用此函数取得光标显示。

HCURSORCMFCEnterDlg:

OnQueryDragIcon()

returnstatic_cast<

HCURSOR>

(m_hIcon);

OnBnClickedEnter()

在此添加控件通知处理程序代码

//获得目标进程句柄

//1.获得目标进程的ID

HANDLEhProcess=NULL;

HMODULEhDll=NULL;

HANDLEhRemoteThread=NULL;

CStringstrDllPath;

CStringstrProcessID;

DWORDdwID=0;

m_ediProcessID.GetWindowText(strProcessID);

dwID=_ttoi(strProcessID);

if(dwID<

=0)

MessageBox(_T("

进程ID有误~!

return;

//2.通过进程ID获得进程句柄

hProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|

PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ

FALSE,dwID);

if(NULL==hProcess)

进程句柄获取失败~!

//获得线程函数(LoadLibrary)的地址

//1.得到kernel32.dll的句柄

hDll=GetModuleHandle(_T("

Kernel32.dll"

if(NULL==hDll)

CloseHandle(hProcess);

获得线程函数句柄失败~!

//2.通过句柄获得函数的地址

#ifdef_UNICODE

LPTHREAD_START_ROUTINEfarProc=(LPTHREAD_START_ROUTINE)GetProcAddress(hDll,"

LoadLibraryW"

);

#else

LPTHREAD_START_ROUTINEfarProc=GetProcAddress(hDll,"

LoadLibraryA"

if(NULL==farProc)

获取进程函数失败~!

//3.获得动态链接库的路径,把他写入目标进程的内存中

m_edtDllPath.GetWindowText(strDllPath);

DWORDdwSize=(strDllPath.GetLength()+1)*sizeof(TCHAR);

//3.1在目标进程中申请空间

LPVOIDlpStart=VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);

if(NULL==lpStart)

CloseHandle(hProcess);

MessageBox(_T("

申请空间失败~!

return;

//3.2把动态链接库的地址写入申请的空间中

if(0==WriteProcessMemory(hProcess,lpStart,strDllPath,dwSize,NULL))

VirtualFreeEx(hProcess,lpStart,dwSize,MEM_COMMIT);

写入失败~!

//执行远程线程

hRemoteThread=CreateRemoteThread(hProcess,NULL,0,farProc,lpStart,0,NULL);

if(NULL==hRemoteThread)

int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1