首页
社区
课程
招聘
[求助]SkinSharp的两个小bug
发表于: 2011-11-26 11:31 5871

[求助]SkinSharp的两个小bug

2011-11-26 11:31
5871
这贴不知道该发到求助区还是发到这里,犹豫半天,最终,还是。。。

SkinSharp是一款换肤软件,很是小巧实用。只是,最近发现两个小BUG(算BUG吧?)
1.只支持RichEdit1.0,RichEdit2.0及之后的版本都不支持
2.不支持AnimateWindow函数,也就是动画窗口

于是,调试了一下,发现RichEdit的BUG似乎很好解决,如下:

对GetClassNameA下断,运行到这里断下:
10019380    50             push    eax                        ; 窗口类名返回到这里
10019381    51             push    ecx
10019382    FF15 90610210  call    dword ptr [10026190]       ; user32.GetClassNameA
10019388    8B56 0C        mov     edx, dword ptr [esi+C]
1001938B    8B0D D8A80210  mov     ecx, dword ptr [1002A8D8]
10019391    8D4424 0C      lea     eax, dword ptr [esp+C]
10019395    52             push    edx
10019396    50             push    eax
10019397    E8 E4F9FFFF    call    10018D80                   ; 跟进去

往下走,到这里:
10018E43  68 2CA40210 push    1002A42C        ;窗口类名"RICHEDIT"
10018E48  56          push    esi             ;"RICHEDIT","RICHEDIT20A","RICHEDIT50W",RichEdit起码有这三种类名
10018E49  FFD7        call    edi             ;比较
10018E4B  83C4 08     add     esp, 8
10018E4E  85C0        test    eax, eax
10018E50  75 18       jnz     short 10018E6A  ;比较的结果当然就是,除了1.0,其他版本概不支持

解决方法:在SkinH_Attach之后,勾住这里:call 10018D80。把高版本的类名替换成"RICHEDIT"就可以了。

至于第二个问题,主要是因为作者没有处理两个消息:

WM_PRINT 和 WM_PRINTCLIENT

两个消息的wParam就是HDC,用这个句柄重画皮肤就可以了。

我只会做简单的事情,至于脱壳、直接修改DLL这种复杂的事还是留给其他人去做吧。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 159
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个……貌似不应该算作是BUG的吧?
2011-11-28 10:20
0
游客
登录 | 注册 方可回帖
返回
//