首页
社区
课程
招聘
[原创]给程序加一个按钮
发表于: 2020-7-22 11:12 8844

[原创]给程序加一个按钮

2020-7-22 11:12
8844

有时候我们会觉得某个已经编译好了的程序的功能不是那么完美,我们想要再添加一些额外的功能,但是我们又没有源码,不方便直接进行修改重编译打包,这时候我们就可以考虑给程序添加一个新功能的按钮了...

思路很简单,无非就是利用子类化技术,直接编写DLL,然后注入到程序当中去,虽然就一句话但是具体的工作还是比较多,这里我就通过给植物大战僵尸程序为例子仔细说说...

因为我们主要目的是添加一个按钮功能,使用这里主要用到的函数是CreateWindow)...

Syntax:

通过这个函数我们可以创建一个按钮,主要的参数是hWndParent,这个参数表示父窗口句柄,我们可以用FindWindow函数来获取,例如:

子类化就是用来改变或者扩展一个已存在的窗口的行为、而不用重新开发的有效途径,这是我们添加按钮,给予按钮处理事件的能力的主要方法,主要方法就是通过GetWindowLong()获取窗口旧的消息处理函数(OldWindowProc),然后通过SetWindowLong()设置新的消息处理函数(NewWndProc),进行需要进行的消息处理,其他的交给旧的消息处理函数:

新的消息处理函数中只需要写我们感兴趣的消息,比如这里我们只关心按键增加阳光的功能,其余我们没有写的消息处理通过CallWindowProc函数交给原来的消息处理函数处理:

这样我们的按键就有相应消息的能力了,剩下的就是完善dll,然后编写dll注入代码了;

基本步骤是:

dll注入的代码确实网上确实到处都是,我这里直接贴出参考,用的是CreateRemoteThread的方法;

12

Source.def:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (9)
雪    币: 3204
活跃值: (5429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错
2020-7-22 13:46
0
雪    币: 12502
活跃值: (3053)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
精彩,不过有个疑问,就是这样写界面太费劲,不知可否把qt的dll注入进去,现实qt的窗口?
2020-7-22 23:29
0
雪    币: 3181
活跃值: (1796)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
挺好的方法
2020-7-23 15:11
0
雪    币: 164
活跃值: (1823)
能力值: ( LV11,RANK:185 )
在线值:
发帖
回帖
粉丝
5
学习了
2020-7-23 17:12
0
雪    币: 5188
活跃值: (3427)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习
2020-7-24 13:03
0
雪    币: 3878
活跃值: (3663)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
绘制+快捷键方便 
2020-7-25 05:59
0
雪    币: 30
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
学习学习
2020-8-5 08:22
0
雪    币: 6124
活跃值: (4656)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
白菜大哥 精彩,不过有个疑问,就是这样写界面太费劲,不知可否把qt的dll注入进去,现实qt的窗口?
qt的绘制逻辑是封闭的,注入dll以后处理绘制逻辑需要修改qt的源代码,比较复杂。
2020-8-15 19:25
0
雪    币: 1067
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark
2020-9-2 21:31
0
游客
登录 | 注册 方可回帖
返回
//