|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 D4llower 于 2010-1-1 01:46 编辑
独乐乐不如众乐乐 —— 关于修改 WinRAR 3.91 默认主题工具栏图标尺寸的方法
应广大网友要求,增加64位版本修改方法!
喜欢修改 WinRAR 默认主题的朋友应该都尝试过修改 WinRAR 主程序,使其支持 48×48、32×32 尺寸的工具栏图标显示。但 WinRAR 更新到 3.90 版本后,因为使用了更新的编译器编译,导致之前版本的修改经验失效,原来的搜索特征已经找不到了。看到一些网友正为此而困惑,于是分析了一下新版本,发现了蛛丝马迹,特与大家分享下心得。
3.91版(32位)的修改方法与3.90版类似 (有兴趣可参考http://bbs.wmzhe.com/viewthread.php?tid=90844),这次的重点是64位版本。Enjoy it!
=====================================================================================
32位版本修改方法(以下是OllyDbg中的部分关键反汇编代码):
【主界面工具栏调整】:
00469120 /$ 81EC 80060000 sub esp,680
00469126 |. A1 90034C00 mov eax,dword ptr ds:[4C0390]
0046912B |. 33C4 xor eax,esp
0046912D |. 898424 7C060000 mov dword ptr ss:[esp+67C],eax
00469134 |. 53 push ebx
00469135 |. 8BD9 mov ebx,ecx
00469137 |. 8B03 mov eax,dword ptr ds:[ebx]
00469139 |. 85C0 test eax,eax
0046913B |. 74 0D je short WinRAR.0046914A
0046913D |. 50 push eax ; /hWnd
0046913E |. FF15 AC154B00 call dword ptr ds:[<&USER32.Destr>; \DestroyWindow
00469144 |. C703 00000000 mov dword ptr ds:[ebx],0
0046914A |> 6A 01 push 1
0046914C |. 68 D0424B00 push WinRAR.004B42D0 ; ASCII "ViewMain"
00469151 |. 68 C0174B00 push WinRAR.004B17C0 ; ASCII "General\Toolbar"
00469156 |. E8 A5D2FEFF call WinRAR.00456400
0046915B |. 85C0 test eax,eax
0046915D |. 0F84 1F040000 je WinRAR.00469582
00469163 |. 6A 01 push 1
00469165 |. 68 50204B00 push WinRAR.004B2050 ; ASCII "LargeButtons"
0046916A |. 68 C0174B00 push WinRAR.004B17C0 ; ASCII "General\Toolbar"
0046916F |. E8 8CD2FEFF call WinRAR.00456400
00469174 |. 6A 01 push 1
00469176 |. 68 44204B00 push WinRAR.004B2044 ; ASCII "ButtonsText"
0046917B |. 85C0 test eax,eax
0046917D |. 68 C0174B00 push WinRAR.004B17C0 ; ASCII "General\Toolbar"
......
......
0046923D |. BE 30000000 mov esi,30 ; 将“大按钮”工具栏图标宽度0x30(10进制即48)放入ESI。
00469242 |. 8D7E F4 lea edi,dword ptr ds:[esi-C] ; 将“大按钮”工具栏图标高度[ESI-C]=0x30-0xC=0x24(10进制即36)放入EDI,
; 所以可改成 lea edi,dword ptr ds:[esi]
00469245 |.^ EB CB jmp short WinRAR.00469212
00469247 |> BE 18000000 mov esi,18 ; 将“小按钮”工具栏图标宽度0x18(10进制即24)放入ESI,
; 所以可改成 mov esi,20
0046924C |. 8BFE mov edi,esi ; 将“小按钮”工具栏图标高度ESI放入EDI。
......
......
【“搜索结果”工具栏调整】:
注意:需要配合调整“CMDWNDFIND”对话框的部分控件的尺寸及位置,
比如“ToolbarWindow32”高度改为48,“SysListView32”距离上方改为52、高度改为146。
0048A8A0 . 81EC 2C080000 sub esp,82C
0048A8A6 . A1 90034C00 mov eax,dword ptr ds:[4C0390]
0048A8AB . 33C4 xor eax,esp
0048A8AD . 898424 28080000 mov dword ptr ss:[esp+828],eax
0048A8B4 . 53 push ebx
0048A8B5 . 55 push ebp
0048A8B6 . 8BAC24 3C080000 mov ebp,dword ptr ss:[esp+83C]
0048A8BD . 56 push esi
0048A8BE . 8BB424 48080000 mov esi,dword ptr ss:[esp+848]
0048A8C5 . 57 push edi
0048A8C6 . 8BBC24 40080000 mov edi,dword ptr ss:[esp+840]
0048A8CD . 897C24 2C mov dword ptr ss:[esp+2C],edi
0048A8D1 . 897424 28 mov dword ptr ss:[esp+28],esi
0048A8D5 . 83FD 4E cmp ebp,4E ; Switch (cases 5..111)
0048A8D8 . 0F87 F7010000 ja WinRAR.0048AAD5
0048A8DE . 0F84 8B010000 je WinRAR.0048AA6F
0048A8E4 . 83FD 05 cmp ebp,5
0048A8E7 . 0F84 CB000000 je WinRAR.0048A9B8
0048A8ED . 83FD 10 cmp ebp,10
0048A8F0 . 0F85 56080000 jnz WinRAR.0048B14C
0048A8F6 . 6A 66 push 66 ; /ControlID = 66 (102.); Case 10 (WM_CLOSE) of switch 0048A8D5
0048A8F8 . 57 push edi ; |hWnd
0048A8F9 . FF15 40164B00 call dword ptr ds:[<&USER32.GetDl>; \GetDlgItem
0048A8FF . 8B2D 9C154B00 mov ebp,dword ptr ds:[<&USER32.Se>; USER32.SendMessageA
0048A905 . 6A 00 push 0 ; /lParam = 0
0048A907 . 6A 00 push 0 ; |wParam = 0
0048A909 . 8BD8 mov ebx,eax ; |
0048A90B . 68 1D100000 push 101D ; |Message = MSG(101D)
0048A910 . 53 push ebx ; |hWnd
0048A911 . FFD5 call ebp ; \SendMessageA
0048A913 . 50 push eax
0048A914 . 68 6C564B00 push WinRAR.004B566C ; ASCII "ResColWidth0"
0048A919 . 68 78554B00 push WinRAR.004B5578 ; ASCII "Interface\FindFiles"
0048A91E . E8 7DB9FCFF call WinRAR.004562A0
0048A923 . 6A 00 push 0 ; /lParam = 0
0048A925 . 6A 01 push 1 ; |wParam = 1
0048A927 . 68 1D100000 push 101D ; |Message = MSG(101D)
0048A92C . 53 push ebx ; |hWnd
0048A92D . FFD5 call ebp ; \SendMessageA
0048A92F . 50 push eax
0048A930 . 68 5C564B00 push WinRAR.004B565C ; ASCII "ResColWidth1"
0048A935 . 68 78554B00 push WinRAR.004B5578 ; ASCII "Interface\FindFiles"
0048A93A . E8 61B9FCFF call WinRAR.004562A0
0048A93F . 6A 00 push 0 ; /lParam = 0
0048A941 . 6A 02 push 2 ; |wParam = 2
0048A943 . 68 1D100000 push 101D ; |Message = MSG(101D)
0048A948 . 53 push ebx ; |hWnd
0048A949 . FFD5 call ebp ; \SendMessageA
0048A94B . 50 push eax
0048A94C . 68 4C564B00 push WinRAR.004B564C ; ASCII "ResColWidth2"
0048A951 . 68 78554B00 push WinRAR.004B5578 ; ASCII "Interface\FindFiles"
0048A956 . E8 45B9FCFF call WinRAR.004562A0
......
......
0048AD22 . C74424 18 30000000 mov dword ptr ss:[esp+18],30 ; 将工具栏图标宽度0x30(10进制即48)放入[ESP+18]。
0048AD2A . C74424 20 24000000 mov dword ptr ss:[esp+20],24 ; 将工具栏图标高度0x24(10进制即36)放入[ESP+20],
; 所以可改成 mov dword ptr ss:[esp+20],30
......
......
假设您对使用OllyDbg调试软件并不熟悉,也可以使用16进制编辑器(例如 UltraEdit 或 WinHex)打开“WinRAR.exe”主程序,进行如下Hex搜索替换操作:
◆搜索“8D 7E F4”,替换成“8D 3E 90”
◆搜索“BE 18 00 00 00”,替换成“BE 20 00 00 00”
◆搜索“C7 44 24 20 24 00 00 00”,替换成“C7 44 24 20 30 00 00 00”
=====================================================================================
64位版本修改方法(以下是WinDbg中的部分关键反汇编代码):
【主界面工具栏调整】:
00000001`400693a8 48895c2410 mov qword ptr [rsp+10h],rbx
00000001`400693ad 48896c2418 mov qword ptr [rsp+18h],rbp
00000001`400693b2 4889742420 mov qword ptr [rsp+20h],rsi
00000001`400693b7 57 push rdi
00000001`400693b8 4154 push r12
00000001`400693ba 4155 push r13
00000001`400693bc 4156 push r14
00000001`400693be 4157 push r15
00000001`400693c0 4881ec10070000 sub rsp,710h
00000001`400693c7 488b0502650600 mov rax,qword ptr [WinRAR+0xcf8d0 (00000001`400cf8d0)]
00000001`400693ce 4833c4 xor rax,rsp
00000001`400693d1 4889842400070000 mov qword ptr [rsp+700h],rax
00000001`400693d9 488bd9 mov rbx,rcx
00000001`400693dc 488b09 mov rcx,qword ptr [rcx]
00000001`400693df 33ff xor edi,edi
00000001`400693e1 88542462 mov byte ptr [rsp+62h],dl
00000001`400693e5 483bcf cmp rcx,rdi
00000001`400693e8 7409 je WinRAR+0x693f3 (00000001`400693f3)
00000001`400693ea ff1578d70400 call qword ptr [WinRAR+0xb6b68 (00000001`400b6b68)]
00000001`400693f0 48893b mov qword ptr [rbx],rdi
00000001`400693f3 488d356edd0400 lea rsi,[WinRAR+0xb7168 (00000001`400b7168)]
00000001`400693fa 488d150f250500 lea rdx,[WinRAR+0xbb910 (00000001`400bb910)]
00000001`40069401 41b801000000 mov r8d,1
00000001`40069407 488bce mov rcx,rsi
00000001`4006940a e8d5dbfeff call WinRAR+0x56fe4 (00000001`40056fe4)
00000001`4006940f 3bc7 cmp eax,edi
00000001`40069411 0f8431040000 je WinRAR+0x69848 (00000001`40069848)
00000001`40069417 488d1572f00400 lea rdx,[WinRAR+0xb8490 (00000001`400b8490)]
00000001`4006941e 41b801000000 mov r8d,1
00000001`40069424 488bce mov rcx,rsi
00000001`40069427 e8b8dbfeff call WinRAR+0x56fe4 (00000001`40056fe4)
00000001`4006942c 488d154df00400 lea rdx,[WinRAR+0xb8480 (00000001`400b8480)]
00000001`40069433 41b801000000 mov r8d,1
00000001`40069439 3bc7 cmp eax,edi
00000001`4006943b 488bce mov rcx,rsi
00000001`4006943e 410f95c7 setne r15b
00000001`40069442 e89ddbfeff call WinRAR+0x56fe4 (00000001`40056fe4)
......
......
00000001`400694ef be30000000 mov esi,30h ; 将“大按钮”工具栏图标宽度0x30(10进制即48)放入 ESI。
00000001`400694f4 8d6ef4 lea ebp,[rsi-0Ch] ; 将“大按钮”工具栏图标高度[RSI-0C]=0x30-0xC=0x24(10进制即36)放入 EBP,
; 所以可改成 lea ebp,[rsi]
00000001`400694f7 eb11 jmp WinRAR+0x6950a (00000001`4006950a)
00000001`400694f9 be18000000 mov esi,18h ; 将“小按钮”工具栏图标宽度0x18(10进制即24)放入 ESI,
; 所以可改成 mov esi,20
00000001`400694fe 8bee mov ebp,esi ; 将“小按钮”工具栏图标高度 ESI 放入 EBP。
......
......
【“搜索结果”工具栏调整】:
注意:需要配合调整“CMDWNDFIND”对话框的部分控件的尺寸及位置,
比如“ToolbarWindow32”高度改为48,“SysListView32”距离上方改为52、高度改为146。
00000001`4008cc54 4055 push rbp
00000001`4008cc56 56 push rsi
00000001`4008cc57 57 push rdi
00000001`4008cc58 4154 push r12
00000001`4008cc5a 4155 push r13
00000001`4008cc5c 4156 push r14
00000001`4008cc5e 4157 push r15
00000001`4008cc60 4881ecc0080000 sub rsp,8C0h
00000001`4008cc67 488b05622c0400 mov rax,qword ptr [WinRAR+0xcf8d0 (00000001`400cf8d0)]
00000001`4008cc6e 4833c4 xor rax,rsp
00000001`4008cc71 48898424b0080000 mov qword ptr [rsp+8B0h],rax
00000001`4008cc79 8bc2 mov eax,edx
00000001`4008cc7b 4d8be1 mov r12,r9
00000001`4008cc7e 4c898c24e0000000 mov qword ptr [rsp+0E0h],r9
00000001`4008cc86 83e805 sub eax,5
00000001`4008cc89 4d8bf0 mov r14,r8
00000001`4008cc8c 4c89842480000000 mov qword ptr [rsp+80h],r8
00000001`4008cc94 89542470 mov dword ptr [rsp+70h],edx
00000001`4008cc98 488be9 mov rbp,rcx
00000001`4008cc9b 48898c24d0000000 mov qword ptr [rsp+0D0h],rcx
00000001`4008cca3 0f84b5080000 je WinRAR+0x8d55e (00000001`4008d55e)
00000001`4008cca9 83e80b sub eax,0Bh
00000001`4008ccac 0f84bc070000 je WinRAR+0x8d46e (00000001`4008d46e)
00000001`4008ccb2 83e83e sub eax,3Eh
00000001`4008ccb5 0f844c070000 je WinRAR+0x8d407 (00000001`4008d407)
00000001`4008ccbb 2dc2000000 sub eax,0C2h
00000001`4008ccc0 be01000000 mov esi,1
00000001`4008ccc5 0f84f5000000 je WinRAR+0x8cdc0 (00000001`4008cdc0)
00000001`4008cccb 3bc6 cmp eax,esi
00000001`4008cccd 0f851d070000 jne WinRAR+0x8d3f0 (00000001`4008d3f0)
00000001`4008ccd3 833d96f0050000 cmp dword ptr [WinRAR+0xebd70 (00000001`400ebd70)],0
00000001`4008ccda 7529 jne WinRAR+0x8cd05 (00000001`4008cd05)
00000001`4008ccdc 488b3d7d320600 mov rdi,qword ptr [WinRAR+0xeff60 (00000001`400eff60)]
00000001`4008cce3 ff154fa00200 call qword ptr [WinRAR+0xb6d38 (00000001`400b6d38)]
......
......
00000001`4008cf70 41bf30000000 mov r15d,30h ; 将工具栏图标宽度0x30(10进制即48)放入 r15d。
00000001`4008cf76 4c8d442444 lea r8,[rsp+44h]
00000001`4008cf7b 488d54244c lea rdx,[rsp+4Ch]
00000001`4008cf80 488d0d995f0600 lea rcx,[WinRAR+0xf2f20 (00000001`400f2f20)]
00000001`4008cf87 458d77f4 lea r14d,[r15-0Ch] ; 将工具栏图标高度[R15-0C]=0x30-0xC=0x24(10进制即36)放入 r14d,
; 所以可改成 lea r14d, [r15]
......
......
假设您对使用WinDbg调试软件并不熟悉,也可以使用16进制编辑器(例如 UltraEdit 或 WinHex)打开“WinRAR.exe”主程序,进行如下Hex搜索替换操作:
◆搜索“8D 6E F4”,替换成“8D 2E 90”
◆搜索“BE 18 00 00 00”,替换成“BE 20 00 00 00”
◆搜索“45 8D 77 F4”,替换成“45 8D 77 00”
=====================================================================================
保存修改后的主程序,运行一下试试,看看是不是工具栏文字与图标间的距离明显增高了?
再用资源编辑软件,调整好上面提到的“CMDWNDFIND”对话框的部分控件的尺寸及位置。
运行修改后的主程序,点击主界面工具栏的“查找”按钮,随便搜索些什么,看看弹出的“搜索结果”对话框的工具栏显示是否正常。
假设顺利完成了上述操作,那么恭喜您,已经修改成功了,呵呵。
剩下的工作就是使用您喜欢的资源去配套更新默认的位图、图标等了^_^
感兴趣的朋友不妨尝试一下,定制您自己喜欢的WinRAR默认皮肤主题。
您也可以到 http://bbs.wmzhe.com/redirect.php?tid=101751 下载我修改好的美化默认皮肤的版本(不带其它皮肤),作为模板进行再加工。预祝大家都能制作出自己的个性版本^_^
D4llower,2010.01
|
|