-
-
[分享][讨论]也来调戏SkinSharp
-
发表于: 2011-10-29 00:23 6485
-
目前见到最好用的轻量级换肤库就要数SkinSharp了,一键换肤而且体积很小,效果也很不错。
开源的duilib虽然看着很强大,但是不能一键换肤,不支持对MFC程序换肤等诸多不便。
上次看了“『原创』调戏 SkinSharp”: http://bbs.pediy.com/showthread.php?t=132247,
能够不用释放dll就能使用其功能,觉得挺好的。
但是这样做有两点不足,第一:稳定性和兼容性有待考究;第二:严重误报。
其实还有一种方法,就是使用静态库。但是skinsharp作者的静态库是出售的,并不免费提供。
于是就下载了个dll2lib来转换之,dll2lib提供了一个很好的思想:既然功能都在dll里面,那么一定能够生成一个静态库最终链接到exe中。
注:这里说的不是网上说的那个DUMPBIN,LIB生成导入库的,这里是生产静态库。
以下说说详细步骤:
1)下载dll2lib:http://www.binary-soft.com/download.htm
2)下载SkinSharp,http://www.skinsharp.com/htdocs/tar/SkinH_VC.rar
3)对SkinH.dll脱壳,壳是upx的,我试了304以上版本的upx.exe都能脱之。
4)使用dll2lib转换脱壳后的SkinH.dll,“Link Options”中去掉“-defaultlib:LIBC”。
转换LOG:
完了会生产SkinH.lib和SkinH_supp.h文件。
5)打开Demo\SkinSharpDemo中的SkinSharpDemo.dsw项目,这里要稍作修改项目属性,
修改“MFC 使用”为“在共享 DLL 中使用 MFC”,“代码生产”为“多线程调试 DLL (/MDd)”,Release版本为“多线程调试 DLL (/MD)”。
添加头文件SkinH_supp.h包含,修改链接库为上一步生产的SkinH.lib。
6)在代码CSkinSharpDemoApp::InitInstance()中添加:
上面的SKINH_DllMain调用是为了让shinsharp进行初始化处理,因为原来的初始化代码是在DllMain中完成的。
7)编译,成功后运行SkinH_VC\Bin下的SkinSharpDemo.exe,效果图:
但是后面就运行出错了,后来分析了很久也没找到原因,也就是在SKINH_DllMain中调用初始化代码里面出错的,估计与第4步骤中的景观有关系:
Warning 13: Invalid address reference(00000000) found. If the DLL has been compressed or encrypted, please uncompress or decrypt it before converting.
8)OD载入SkinSharpDemo.exe,找到弹出MessgeBox的相关代码,发现一个对call调用异常。
可以看出
修改后重新运行SkinSharpDemo.exe,效果图:
是dll2lib的试用提示,紧接着就出错了:
我最终还是没能修复好,猜测很可能是在dll2lib转换那一步出的问题,但是网上又找不到相关的工具转行dll到lib。
我把代码什么的放在附件里,大家一起研究下吧,希望能够更进一步!
SkinH_VC.rar
开源的duilib虽然看着很强大,但是不能一键换肤,不支持对MFC程序换肤等诸多不便。
上次看了“『原创』调戏 SkinSharp”: http://bbs.pediy.com/showthread.php?t=132247,
能够不用释放dll就能使用其功能,觉得挺好的。
但是这样做有两点不足,第一:稳定性和兼容性有待考究;第二:严重误报。
其实还有一种方法,就是使用静态库。但是skinsharp作者的静态库是出售的,并不免费提供。
于是就下载了个dll2lib来转换之,dll2lib提供了一个很好的思想:既然功能都在dll里面,那么一定能够生成一个静态库最终链接到exe中。
注:这里说的不是网上说的那个DUMPBIN,LIB生成导入库的,这里是生产静态库。
以下说说详细步骤:
1)下载dll2lib:http://www.binary-soft.com/download.htm
2)下载SkinSharp,http://www.skinsharp.com/htdocs/tar/SkinH_VC.rar
3)对SkinH.dll脱壳,壳是upx的,我试了304以上版本的upx.exe都能脱之。
4)使用dll2lib转换脱壳后的SkinH.dll,“Link Options”中去掉“-defaultlib:LIBC”。
转换LOG:
Start conversion. Preparing for the conversion... Convert DLL file into object files... Warning 13: Invalid address reference(00000000) found. If the DLL has been compressed or encrypted, please uncompress or decrypt it before converting. Bind object files to static library files. Conversion finished.
完了会生产SkinH.lib和SkinH_supp.h文件。
5)打开Demo\SkinSharpDemo中的SkinSharpDemo.dsw项目,这里要稍作修改项目属性,
修改“MFC 使用”为“在共享 DLL 中使用 MFC”,“代码生产”为“多线程调试 DLL (/MDd)”,Release版本为“多线程调试 DLL (/MD)”。
添加头文件SkinH_supp.h包含,修改链接库为上一步生产的SkinH.lib。
6)在代码CSkinSharpDemoApp::InitInstance()中添加:
// Initialize the library SKINH_DllMain(GetModuleHandle(NULL), DLL_PROCESS_ATTACH, NULL); SkinH_Attach();
上面的SKINH_DllMain调用是为了让shinsharp进行初始化处理,因为原来的初始化代码是在DllMain中完成的。
7)编译,成功后运行SkinH_VC\Bin下的SkinSharpDemo.exe,效果图:
但是后面就运行出错了,后来分析了很久也没找到原因,也就是在SKINH_DllMain中调用初始化代码里面出错的,估计与第4步骤中的景观有关系:
Warning 13: Invalid address reference(00000000) found. If the DLL has been compressed or encrypted, please uncompress or decrypt it before converting.
8)OD载入SkinSharpDemo.exe,找到弹出MessgeBox的相关代码,发现一个对call调用异常。
0045556E E8 32080100 call [B]00465DA5[/B]
[COLOR="Red"][/COLOR] [COLOR="Red"]00465C64[/COLOR]| 50 | push eax |这里才应该是函数头 00465C65| 51 | push ecx | 00465C66| 52 | push edx | 00465C67| 53 | push ebx | 00465C68| 54 | push esp | 00465C69| 55 | push ebp | 00465C6A| 56 | push esi | 00465C6B| 57 | push edi | 00465C6C| 33C0 | xor eax, eax | 00465C6E| BF 1C1B4800 | mov edi, 00481B1C | 00465C73| 8107 4B5F606A | add dword ptr [edi], 6A605F4B | 00465C79| 8187 04000000 175D6C65| add dword ptr [edi+4], 656C5D17 | 00465C83| 8187 08000000 5A6B6066| add dword ptr [edi+8], 66606B5A | 00465C8D| 8187 0C000000 6517606A| add dword ptr [edi+C], 6A601765 | 00465C97| 8187 10000000 175E5C65| add dword ptr [edi+10], 655C5E17 | 00465CA1| 8187 14000000 5C69586B| add dword ptr [edi+14], 6B58695C | 00465CAB| 8187 18000000 5C5B1759| add dword ptr [edi+18], 59175B5C | 00465CB5| 8187 1C000000 70175865| add dword ptr [edi+1C], 65581770 | 00465CBF| 8187 20000000 176C6569| add dword ptr [edi+20], 69656C17 | 00465CC9| 8187 24000000 5C5E606A| add dword ptr [edi+24], 6A605E5C | 00465CD3| 8187 28000000 6B5C695C| add dword ptr [edi+28], 5C695C6B | 00465CDD| 8187 2C000000 5B176D5C| add dword ptr [edi+2C], 5C6D175B | 00465CE7| 8187 30000000 696A6066| add dword ptr [edi+30], 66606A69 | 00465CF1| 8187 34000000 6517665D| add dword ptr [edi+34], 5D661765 | 00465CFB| 8187 38000000 173B4343| add dword ptr [edi+38], 43433B17 | 00465D05| 8187 3C000000 176B6617| add dword ptr [edi+3C], 17666B17 | 00465D0F| 8187 40000000 43605918| add dword ptr [edi+40], 18596043 | 00465D19| 8187 44000000 04010401| add dword ptr [edi+44], 1040104 | 00465D23| 8187 48000000 4B661769| add dword ptr [edi+48], 6917664B | 00465D2D| 8187 4C000000 5C5E606A| add dword ptr [edi+4C], 6A605E5C | 00465D37| 8187 50000000 6B5C6917| add dword ptr [edi+50], 17695C6B | 00465D41| 8187 54000000 70666C69| add dword ptr [edi+54], 696C6670 | 00465D4B| 8187 58000000 175A6667| add dword ptr [edi+58], 67665A17 | 00465D55| 8187 5C000000 7017665D| add dword ptr [edi+5C], 5D661770 | 00465D5F| 8187 60000000 173B4343| add dword ptr [edi+60], 43433B17 | 00465D69| 8187 64000000 176B6617| add dword ptr [edi+64], 17666B17 | 00465D73| 8187 68000000 43605923| add dword ptr [edi+68], 23596043 | 00465D7D| 8187 6C000000 1767635C| add dword ptr [edi+6C], 5C636717 | 00465D87| 8187 70000000 586A5C17| add dword ptr [edi+70], 175C6A58 | 00465D91| 8187 74000000 6D606A60| add dword ptr [edi+74], 606A606D | 00465D9B| 8187 78000000 6B310401| add dword ptr [edi+78], 104316B | [COLOR="Red"]00465DA5[/COLOR]| 8187 7C000000 006E6E6E| add dword ptr [edi+7C], 6E6E6E00 |函数却从这里调进,肯定不对 00465DAF| 8187 80000000 25596065| add dword ptr [edi+80], 65605925 | 00465DB9| 8187 84000000 58697024| add dword ptr [edi+84], 24706958 | 00465DC3| 8187 88000000 6A665D6B| add dword ptr [edi+88], 6B5D666A | 00465DCD| 8187 8C000000 255A6664| add dword ptr [edi+8C], 64665A25 | 00465DD7| 8187 90000000 2666695B| add dword ptr [edi+90], 5B696626 | 00465DE1| 8187 94000000 5C69255F| add dword ptr [edi+94], 5F25695C | 00465DEB| 8187 98000000 6B640401| add dword ptr [edi+98], 104646B | 00465DF5| 8187 9C000000 6669175A| add dword ptr [edi+9C], 5A176966 | 00465DFF| 8187 A0000000 66656B58| add dword ptr [edi+A0], 586B6566 | 00465E09| 8187 A4000000 5A6B3104| add dword ptr [edi+A4], 4316B5A | 00465E13| 8187 A8000000 01006A58| add dword ptr [edi+A8], 586A0001 | 00465E1D| 8187 AC000000 635C6A37| add dword ptr [edi+AC], 376A5C63 | 00465E27| 8187 B0000000 59606558| add dword ptr [edi+B0], 58656059 | 00465E31| 8187 B4000000 6970246A| add dword ptr [edi+B4], 6A247069 | 00465E3B| 8187 B8000000 665D6B25| add dword ptr [edi+B8], 256B5D66 | 00465E45| 66:8187 BC000000 5A66 | add word ptr [edi+BC], 665A | 00465E4E| 8087 BE000000 64 | add byte ptr [edi+BE], 64 | 00465E55| 80BF C0000000 00 | cmp byte ptr [edi+C0], 0 | 00465E5C| 74 07 | je short 00465E65 | 00465E5E| B8 01000000 | mov eax, 1 | 00465E63| EB 19 | jmp short 00465E7E | 00465E65| C687 C0000000 01 | mov byte ptr [edi+C0], 1 | 00465E6C| 57 | push edi | 00465E6D| 68 30200000 | push 2030 | 00465E72| 6A 00 | push 0 | 00465E74| 57 | push edi | 00465E75| 6A 00 | push 0 | 00465E77| FF15 1C464800 | call dword ptr [<&USER32.MessageBoxA>] |USER32.MessageBoxA 00465E7D| 5F | pop edi | 00465E7E| 83E0 01 | and eax, 1 | 00465E81| B9 BF000000 | mov ecx, 0BF | 00465E86| B0 09 | mov al, 9 | 00465E88| FC | cld | 00465E89| F3:AA | rep stos byte ptr es:[edi] | 00465E8B| 5F | pop edi | 00465E8C| 5E | pop esi | 00465E8D| 5D | pop ebp | 00465E8E| 5C | pop esp | 00465E8F| 5B | pop ebx | 00465E90| 5A | pop edx | 00465E91| 59 | pop ecx | 00465E92| 58 | pop eax | 00465E93| C3 | retn |
可以看出
0045556E E8 32080100 call [B]00465DA5[/B]应该是:
0045556E E8 32080100 call [B]00465C64[/B]
修改后重新运行SkinSharpDemo.exe,效果图:
是dll2lib的试用提示,紧接着就出错了:
我最终还是没能修复好,猜测很可能是在dll2lib转换那一步出的问题,但是网上又找不到相关的工具转行dll到lib。
我把代码什么的放在附件里,大家一起研究下吧,希望能够更进一步!
SkinH_VC.rar
赞赏
他的文章
- [分享]安卓开发与分析者的利器--安卓右键工具1.2 15870
- [分享]安卓开发与分析者的利器--安卓右键工具 8046
- [讨论]看雪安全卫士 vs 360安全卫士 速度围观!!! 9364
- [注意]360开机助手惊天bug 4026
- [分享][推荐]一款通过移动头部控制鼠标移动的软件 4586
谁下载
clide2000
china
prince
jfaumt
breezer
llpplplp
lordxp
eunt
manbug
sisess
yijun8354
wxq
yjd
斩天
bootdisk
五德转移
swqswq
asd
dico
logkiller
sampaal
网络游侠
passenger
xiaoming
dtcser
redberet
zhenghw
hacknr
kingyan
剑宗
xPLK
dtkalaok
loveqqc
hmilywen
江南人
hiber
OildFish
aosemp
qihui
SnowRen
escript
Diabloking
bobowu
xrainfir
weiguoqiu
tfzxyinhao
shangde
huangkez
yszj
XPoy
yangxingyu
kweaner
AASSMM
caocunt
vblank
leeone
cdty
maomaolk
iceway
芳草碧连
leafwqs
rzsy
howerson
tiany
ejoywx
流氓刚
huiguai
败笔七号
网络风尘
toyuk
starrysky
达文西
hsluoyz
MTrickster
ProgmBoy
鹿剑
xed
bycon
zaas
yueyunjiu
pipipig
yangjh
tokiii
风下
shush
linshushun
yxuenong
wicmd
sysercn
lalaland
lkytal
inception
格鲁
freedying
shuax
bedmoon
wangjieest
Kisesy
死神队长
谁下载
clide2000
china
prince
jfaumt
breezer
llpplplp
lordxp
eunt
manbug
sisess
yijun8354
wxq
yjd
斩天
bootdisk
五德转移
swqswq
asd
dico
logkiller
sampaal
网络游侠
passenger
xiaoming
dtcser
redberet
zhenghw
hacknr
kingyan
剑宗
xPLK
dtkalaok
loveqqc
hmilywen
江南人
hiber
OildFish
aosemp
qihui
SnowRen
escript
Diabloking
bobowu
xrainfir
weiguoqiu
tfzxyinhao
shangde
huangkez
yszj
XPoy
yangxingyu
kweaner
AASSMM
caocunt
vblank
leeone
cdty
maomaolk
iceway
芳草碧连
leafwqs
rzsy
howerson
tiany
ejoywx
流氓刚
huiguai
败笔七号
网络风尘
toyuk
starrysky
达文西
hsluoyz
MTrickster
ProgmBoy
鹿剑
xed
bycon
zaas
yueyunjiu
pipipig
yangjh
tokiii
风下
shush
linshushun
yxuenong
wicmd
sysercn
lalaland
lkytal
inception
格鲁
freedying
shuax
bedmoon
wangjieest
Kisesy
死神队长
谁下载
clide2000
china
prince
jfaumt
breezer
llpplplp
lordxp
eunt
manbug
sisess
yijun8354
wxq
yjd
斩天
bootdisk
五德转移
swqswq
asd
dico
logkiller
sampaal
网络游侠
passenger
xiaoming
dtcser
redberet
zhenghw
hacknr
kingyan
剑宗
xPLK
dtkalaok
loveqqc
hmilywen
江南人
hiber
OildFish
aosemp
qihui
SnowRen
escript
Diabloking
bobowu
xrainfir
weiguoqiu
tfzxyinhao
shangde
huangkez
yszj
XPoy
yangxingyu
kweaner
AASSMM
caocunt
vblank
leeone
cdty
maomaolk
iceway
芳草碧连
leafwqs
rzsy
howerson
tiany
ejoywx
流氓刚
huiguai
败笔七号
网络风尘
toyuk
starrysky
达文西
hsluoyz
MTrickster
ProgmBoy
鹿剑
xed
bycon
zaas
yueyunjiu
pipipig
yangjh
tokiii
风下
shush
linshushun
yxuenong
wicmd
sysercn
lalaland
lkytal
inception
格鲁
freedying
shuax
bedmoon
wangjieest
Kisesy
死神队长
看原图
赞赏
雪币:
留言: