首页
社区
课程
招聘
[旧帖] [讨论][讨论]HOOK窗口类并改类名 0.00雪花
发表于: 2012-12-8 17:25 1508

[旧帖] [讨论][讨论]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(一般情况下,模态窗口另议),当然还有其他很多情况,请大牛给个思路。谢谢看雪,给我力量!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//