-
-
[旧帖] [讨论][讨论]HOOK窗口类并改类名 0.00雪花
-
发表于: 2012-12-8 17:25 1508
-
正常窗口创建之前要注册窗口:RegisterClassA (RegisterClassW)\RegisterClassExA
(RegisterClassExW).其实 RegisterClassA (RegisterClassW)被后面2个函数替代了。现在用CreateProcess启动计算器后立即挂起,HOOK计算器中RegisterClassExW(IDA查看计算器是用此函数注册窗口类);由于该函数参数都是常量指针CONST WNDCLASSEXW *lpwcx。我HOOK函数内 WNDCLASSEXW *lpmywc=(WNDCLASSEXW *)lpwcx;将我定义的参数指针指向目标结构,然后对结构体中的字段类名进行修改:lpmywc->lpszClassName ="test"。具体我的HOOK伪代码过程如下:
ATOM myRegisterClassEx(//我的HOOK函数
CONST WNDCLASSEX *lpwcx // class data
)
{
WNDCLASSEXW *lpmywc=(WNDCLASSEXW *)lpwcx;
lpmywc->lpszClassName ="test";//只修改类名
return RegisterClassExW(lpmywc);//返回原函数继续执行并得到返回值
实战效果:在任务管理器中可以看见实例进程,但是计算器主窗口没有创建成功,无窗口显示。
原因有如下:
1、注册窗口类后,窗口创建CreateWindow函数第一个参数传进来的就是被修改的类名,可能是编译器优化了,该函数参数不总是从内存原址取的类名,因此我该的类名它就没有真正取到,而创建的窗口类名和注册窗口类类名不一致,只有实例运行,而那窗口不显示就理所当然了。
2、窗口过程函数被破坏?好像没有道理哦,貌似没有破坏之处啊,无解~待验证;
3、如果是第1种情况,那就还要HOOK创建窗口函数CreateWindow(一般情况下,模态窗口另议),当然还有其他很多情况,请大牛给个思路。谢谢看雪,给我力量!
(RegisterClassExW).其实 RegisterClassA (RegisterClassW)被后面2个函数替代了。现在用CreateProcess启动计算器后立即挂起,HOOK计算器中RegisterClassExW(IDA查看计算器是用此函数注册窗口类);由于该函数参数都是常量指针CONST WNDCLASSEXW *lpwcx。我HOOK函数内 WNDCLASSEXW *lpmywc=(WNDCLASSEXW *)lpwcx;将我定义的参数指针指向目标结构,然后对结构体中的字段类名进行修改:lpmywc->lpszClassName ="test"。具体我的HOOK伪代码过程如下:
ATOM myRegisterClassEx(//我的HOOK函数
CONST WNDCLASSEX *lpwcx // class data
)
{
WNDCLASSEXW *lpmywc=(WNDCLASSEXW *)lpwcx;
lpmywc->lpszClassName ="test";//只修改类名
return RegisterClassExW(lpmywc);//返回原函数继续执行并得到返回值
实战效果:在任务管理器中可以看见实例进程,但是计算器主窗口没有创建成功,无窗口显示。
原因有如下:
1、注册窗口类后,窗口创建CreateWindow函数第一个参数传进来的就是被修改的类名,可能是编译器优化了,该函数参数不总是从内存原址取的类名,因此我该的类名它就没有真正取到,而创建的窗口类名和注册窗口类类名不一致,只有实例运行,而那窗口不显示就理所当然了。
2、窗口过程函数被破坏?好像没有道理哦,貌似没有破坏之处啊,无解~待验证;
3、如果是第1种情况,那就还要HOOK创建窗口函数CreateWindow(一般情况下,模态窗口另议),当然还有其他很多情况,请大牛给个思路。谢谢看雪,给我力量!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]如此防进程多开 6585
- [讨论][讨论]HOOK窗口类并改类名 1509
- [求助]拿RA2作逆向练手 1506
看原图
赞赏
雪币:
留言: