关于修改 WinRAR 3.91 默认主题工具栏图标尺寸的方法(含64位版)
本帖最后由 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:
0046912B|.33C4 xor eax,esp
0046912D|.898424 7C060000 mov dword ptr ss:,eax
00469134|.53 push ebx
00469135|.8BD9 mov ebx,ecx
00469137|.8B03 mov eax,dword ptr ds:
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:,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: ; 将“大按钮”工具栏图标高度=0x30-0xC=0x24(10进制即36)放入EDI,
; 所以可改成 lea edi,dword ptr ds:
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:
0048A8AB .33C4 xor eax,esp
0048A8AD .898424 28080000 mov dword ptr ss:,eax
0048A8B4 .53 push ebx
0048A8B5 .55 push ebp
0048A8B6 .8BAC24 3C080000 mov ebp,dword ptr ss:
0048A8BD .56 push esi
0048A8BE .8BB424 48080000 mov esi,dword ptr ss:
0048A8C5 .57 push edi
0048A8C6 .8BBC24 40080000 mov edi,dword ptr ss:
0048A8CD .897C24 2C mov dword ptr ss:,edi
0048A8D1 .897424 28 mov dword ptr ss:,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 30000000mov dword ptr ss:,30 ; 将工具栏图标宽度0x30(10进制即48)放入。
0048AD2A .C74424 20 24000000mov dword ptr ss:,24 ; 将工具栏图标高度0x24(10进制即36)放入,
; 所以可改成 mov dword ptr ss:,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 ,rbx
00000001`400693ad 48896c2418 mov qword ptr ,rbp
00000001`400693b2 4889742420 mov qword ptr ,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 4881ec10070000sub rsp,710h
00000001`400693c7 488b0502650600mov rax,qword ptr
00000001`400693ce 4833c4 xor rax,rsp
00000001`400693d1 4889842400070000 mov qword ptr ,rax
00000001`400693d9 488bd9 mov rbx,rcx
00000001`400693dc 488b09 mov rcx,qword ptr
00000001`400693df 33ff xor edi,edi
00000001`400693e1 88542462 mov byte ptr ,dl
00000001`400693e5 483bcf cmp rcx,rdi
00000001`400693e8 7409 je WinRAR+0x693f3 (00000001`400693f3)
00000001`400693ea ff1578d70400 call qword ptr
00000001`400693f0 48893b mov qword ptr ,rdi
00000001`400693f3 488d356edd0400lea rsi,
00000001`400693fa 488d150f250500lea rdx,
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 488d1572f00400lea rdx,
00000001`4006941e 41b801000000 mov r8d,1
00000001`40069424 488bce mov rcx,rsi
00000001`40069427 e8b8dbfeff call WinRAR+0x56fe4 (00000001`40056fe4)
00000001`4006942c 488d154df00400lea rdx,
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, ; 将“大按钮”工具栏图标高度=0x30-0xC=0x24(10进制即36)放入 EBP,
; 所以可改成 lea ebp,
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 4881ecc0080000sub rsp,8C0h
00000001`4008cc67 488b05622c0400mov rax,qword ptr
00000001`4008cc6e 4833c4 xor rax,rsp
00000001`4008cc71 48898424b0080000 mov qword ptr ,rax
00000001`4008cc79 8bc2 mov eax,edx
00000001`4008cc7b 4d8be1 mov r12,r9
00000001`4008cc7e 4c898c24e0000000 mov qword ptr ,r9
00000001`4008cc86 83e805 sub eax,5
00000001`4008cc89 4d8bf0 mov r14,r8
00000001`4008cc8c 4c89842480000000 mov qword ptr ,r8
00000001`4008cc94 89542470 mov dword ptr ,edx
00000001`4008cc98 488be9 mov rbp,rcx
00000001`4008cc9b 48898c24d0000000 mov qword ptr ,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 833d96f0050000cmp dword ptr ,0
00000001`4008ccda 7529 jne WinRAR+0x8cd05 (00000001`4008cd05)
00000001`4008ccdc 488b3d7d320600mov rdi,qword ptr
00000001`4008cce3 ff154fa00200 call qword ptr
......
......
00000001`4008cf70 41bf30000000 mov r15d,30h ; 将工具栏图标宽度0x30(10进制即48)放入 r15d。
00000001`4008cf76 4c8d442444 lea r8,
00000001`4008cf7b 488d54244c lea rdx,
00000001`4008cf80 488d0d995f0600lea rcx,
00000001`4008cf87 458d77f4 lea r14d, ; 将工具栏图标高度=0x30-0xC=0x24(10进制即36)放入 r14d,
; 所以可改成 lear14d,
......
......
假设您对使用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
页:
[1]