逆向---注入方式给应用程序添加菜单

原理:通过修改注入表的方式将我们自己的dll中的菜单及响应添加到应用中去,实现我们想要的功能。

1、注入dll编写

这里是通过 Stud_PE工具将dll注入到目标程序中去的

1.1 dll中添加导出函数

Stud_PE添加到目标程序是需要添加导出函数,因此这里添加一个导出函数,没有实际功能。
jtfz.cpp
void test()
{
AfxMessageBox(“加载成功!”);
}
在def中添加导出项
在这里插入图片描述

1.2 dll中添加菜单

参照孙鑫老师的《VC++深入详讲》实现
尝试过在dll中新建一个菜单资源,然后NewMenu.LoadMenuA(IDR_MENU1)这样的方式去实现但是失败了,所以参照孙鑫老师的方式来做。
在Resource.h文件中添加 资源代码的定义
#define IDM_M1 10001
#define IDM_M2 10002
#define IDM_M3 10003
cpp文件中添加
CMenu NewMenu;
NewMenu.CreateMenu();
HMENU hMenu=GetMenu(hWnd);//hWnd就是目标程序窗口的hwnd句柄
::AppendMenuA(hMenu, MF_POPUP, (UINT)NewMenu.m_hMenu, “九天辅助”);
NewMenu.AppendMenuA(MF_STRING, IDM_M1, “Hello1”);
NewMenu.AppendMenuA(MF_STRING, IDM_M2, “Hello2”);
NewMenu.AppendMenuA(MF_STRING, IDM_M3, “Hello3”);
MyMenu = NewMenu.m_hMenu;
NewMenu.Detach();
SetMenu(hWnd, hMenu);//打开程序会立即显示菜单,不加SetMenu会在鼠标移动到菜单之后显示

1.3 dll中菜单响应的实现

对菜单按钮的响应通过目标窗口的子类化实现,就是通过GetWindowLong 传入 GWL_WNDPROC 参数获取目标函数的消息处理函数的地址,然后通过SetWndowLong 传入我们自己的消息处理函数的地址,我们的函数中对WM_COMMAND消息进行处理,如果wParam是我们的菜单项的ID就做响应。

//新回调函数
LRESULT CALLBACK NewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值