博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[00030]-[2015-09-26]-[00]-[DLL注入应用案例---修改任务管理器的实现]
阅读量:4960 次
发布时间:2019-06-12

本文共 3028 字,大约阅读时间需要 10 分钟。

案例需求:

学习了DLL注入的基础知识,需要通过一个简单的应用案例,来真正的实现DLL注入
注:为什么提倡使用DLL来实现远程进程的控制呢?因为DLL文件的编写相对规范和比较容易
操作,相对于纯粹的代码注入,因为纯粹的代码注入,需要考虑远程代码内存空间和本地进程
内存空间,这两个如果不好好思忖,就很容易出现,内存访问错误);本案例实现在任务管理
器上ListView添加两列显示;

实现策略:

【1】需要spy++工具来获取 任务对话框的标题以获取应用程序的句柄 获取任务管理器指定控
件的ID,以获取该控件的句柄。(有了句柄,基本上就可以对该控件进行操作了,当然了,
这也是需要在目标进程中,进行控件操作,若是在本地进程中进行控件操作,就会发生内存访
问错误);
【2】编写要实现指定功能的DLL,然后用DLL_Inject工具加载到目标进程中去

代码实现:

// TaskManager.cpp#include "StdAfx.h"#include 
#include
#include
#include "TaskManager.h"HWND hwndNetWorkList; // 任务管理器上面List控件的句柄typedef struct _TaskManagerDlgItem{ DWORD itemID; HWND hWnd;}TaskManagerDlgItem, *PTaskManagerDlgItem;BOOL CALLBACK _EnumChidCtlProc(HWND hWnd, LPARAM lParam){ PTaskManagerDlgItem pItem = (PTaskManagerDlgItem)lParam; if((DWORD)GetDlgCtrlID(hWnd) == pItem->itemID) { pItem->hWnd = hWnd; return FALSE; } return TRUE;}// 根据控件ID获取控件的窗口句柄HWND GetHWNDByID(DWORD nCtlId){ TaskManagerDlgItem item; item.itemID = nCtlId; item.hWnd = NULL; HWND hWndTaskManager = FindWindow((LPCTSTR)32770, "Windows 任务管理器"); if(hWndTaskManager == NULL) { MessageBox(NULL, "请先运行任务管理器!", "Info", MB_OK); return NULL; } EnumChildWindows(hWndTaskManager, _EnumChidCtlProc, (LPARAM)&item); return item.hWnd;}// 获取listView的列数int GetListCtlColmnCount(HWND hList){ int count = 0; char caption[MAX_PATH]; LVCOLUMN lvc; lvc.mask = LVCF_TEXT; lvc.cchTextMax = MAX_PATH; lvc.pszText = caption; for(int i = 0; i < 50; i++) { ZeroMemory(caption, sizeof(caption)); SendMessage(hList, LVM_GETCOLUMN, i, (long)&lvc); if(caption[0]==0 && caption[1]==0) { count = i; break; } } return count;}// 向listView控件插入两列void InsertColToListCtl(HWND hList){ int n = GetListCtlColmnCount(hList); LV_COLUMN colmn; ZeroMemory(&colmn, sizeof(LV_COLUMN)); colmn.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; colmn.fmt = LVCFMT_RIGHT; colmn.cx = 0x60; colmn.pszText = "下载"; SendMessage(hList, LVM_INSERTCOLUMN, n, (LPARAM)&colmn); colmn.pszText = "上传"; SendMessage(hList, LVM_INSERTCOLUMN, n+1, (LPARAM)&colmn);}void ModifyTaskManager(){ hwndNetWorkList = GetHWNDByID(2600); InsertColToListCtl(hwndNetWorkList);}
// TaskManager.h#ifndef _TASKMANAGER_H_#define _TASKMANAGER_H_void ModifyTaskManager();#endif
// MyDll.cpp#include "stdafx.h"#include "TaskManager.h"BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved                     ){    switch(ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:        // 一旦DLL文件加载 就初始执行一个函数 once Attach        ModifyTaskManager();        //MessageBox(NULL, "Hello, World !", "Info", MB_OK);        break;    case DLL_PROCESS_DETACH:        break;    case DLL_THREAD_ATTACH:        break;    case DLL_THREAD_DETACH:        break;    }    return TRUE;}

 

转载于:https://www.cnblogs.com/Auris/p/4840368.html

你可能感兴趣的文章
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>