史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 多媒體影音轉檔燒錄技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-12, 03:32 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 一個老MP3 Streaming Audio Player播放器的修改

Streaming Audio Player (SAP) v0.9是一個較老的MP3播放器,2000年7月份發佈的。但其中的DJ功能我確非常喜歡,並且佔用資源小,界面也非常漂亮,而且支持動畫。不過在使用的時候發現幾個不方便的地方,就修改了一下:
1. 當設定成DJ模式的時候,如果停止播放,在按Play,系統不會
繼續播放。

解決方法:
用Ollydbg開啟SAP.EXE,搜尋ShuffleMaster,經過分析後發現
ShuffleMaster為[436488],當該值為1時就是ShuffleMaster模式。
設定在該位址讀時中斷,並且在DJ模式下按Play,程式碼如下:

0040F945 |> 8B0D 88644300 MOV ECX, [436488]
0040F94B |. 85C9 TEST ECX, ECX
0040F94D |. 7E 0B JLE SHORT sap.0040F95A ; 如果不是DJ模式跳轉
0040F94F |. 51 PUSH ECX
0040F950 |. E8 6BAB0000 CALL sap.0041A4C0
0040F955 |. 83C4 04 ADD ESP, 4
0040F958 |. 5E POP ESI ; USER32.77D43FBE
0040F959 |. C3 RETN
0040F95A |> 8B0D 8C644300 MOV ECX, [43648C]
0040F960 |. 83F9 01 CMP ECX, 1
0040F963 |. 75 0A JNZ SHORT sap.0040F96F
0040F965 |. 8A88 68030000 MOV CL, [EAX+368]
0040F96B |. 84C9 TEST CL, CL
0040F96D |. 74 15 JE SHORT sap.0040F984
0040F96F |> 8B0D 8C644300 MOV ECX, [43648C]

在位址0040F94D處判斷如果不是DJ模式則跳轉,是DJ模式就使用
41A4C0,然後返回。檢視41A4C0的程式碼發現是新增一個新的線程,
顯然這個線程是用於DJ的,而40F95A以下的程式碼則是來開始播放
的,因而很簡單,將40F958和40F959的程式碼NOP掉即可。

2. 系統在最小化到SysTray的時候顯示ICON不對
解決方法:
用Ollydbg開啟SAP.EXE,搜尋函數Shell_NotifyIconA的使用,到如下
程式碼:
0040A500 /$ 8B4424 04 MOV EAX, [ESP+4] ; sap.004107E4
0040A504 |. 83EC 58 SUB ESP, 58
0040A507 |. 8B4C24 64 MOV ECX, [ESP+64] ; ntdll.77F8CF62
0040A50B |. 53 PUSH EBX ; USER32.GetMessageA
0040A50C |. 894424 08 MOV [ESP+8], EAX
0040A510 |. 56 PUSH ESI ; USER32.WaitMessage
0040A511 |. 894C24 10 MOV [ESP+10], ECX
0040A515 |. 57 PUSH EDI ; USER32.PeekMessageA
0040A516 |. 8B7424 74 MOV ESI, [ESP+74]
0040A51A |. 8B4424 78 MOV EAX, [ESP+78]
0040A51E |. 897424 20 MOV [ESP+20], ESI ; USER32.WaitMessage
0040A522 |. 85C0 TEST EAX, EAX
0040A524 |. C74424 0C 58000>MOV DWORD PTR [ESP+C], 58
0040A52C |. C74424 18 07000>MOV DWORD PTR [ESP+18], 7
0040A534 |. C74424 1C 64800>MOV DWORD PTR [ESP+1C], 8064
0040A53C |. 74 10 JE SHORT sap.0040A54E
0040A53E |. 6A 40 PUSH 40 ; /n = 40 (64.)
0040A540 |. 50 PUSH EAX ; |String2 = "H"
0040A541 |. 8D4424 2C LEA EAX, [ESP+2C] ; |
0040A545 |. 50 PUSH EAX ; |String1 = 003C53E0
0040A546 |. FF15 18254500 CALL [<&KERNEL32.lstrcpynA>] ; \lstrcpynA
0040A54C |. EB 05 JMP SHORT sap.0040A553
0040A54E |> C64424 24 00 MOV BYTE PTR [ESP+24], 0
0040A553 |> 8D4424 0C LEA EAX, [ESP+C]
0040A557 |. 8B4C24 6C MOV ECX, [ESP+6C]
0040A55B |. 50 PUSH EAX
0040A55C |. 51 PUSH ECX
0040A55D |. FF15 1C264500 CALL [<&SHELL32.Shell_NotifyIconA>] ; SHELL32.Shell_NotifyIconA
0040A563 |. 8BF8 MOV EDI, EAX
0040A565 |. 85F6 TEST ESI, ESI ; USER32.WaitMessage
0040A567 |. 74 07 JE SHORT sap.0040A570
0040A569 |. 56 PUSH ESI ; /hIcon = 77D43FB2
0040A56A |. FF15 A0264500 CALL [<&USER32.DestroyIcon>] ; \DestroyIcon
0040A570 |> 8BC7 MOV EAX, EDI ; USER32.PeekMessageA
0040A572 |. 5F POP EDI ; USER32.77D43FBE
0040A573 |. 5E POP ESI ; USER32.77D43FBE
0040A574 |. 5B POP EBX ; USER32.77D43FBE
0040A575 |. 83C4 58 ADD ESP, 58
0040A578 \. C3 RETN

經查,該函數在下面的程式碼中被使用:
0040A580 /$ 53 PUSH EBX
0040A581 |. A1 B0604300 MOV EAX, [4360B0]
0040A586 |. 56 PUSH ESI
0040A587 |. 57 PUSH EDI
0040A588 |. 8B78 0C MOV EDI, [EAX+C]
0040A58B |. 6A FA PUSH -6 ; /Index = GWL_HINSTANCE
0040A58D |. 57 PUSH EDI ; |hWnd = NULL
0040A58E |. FF15 64264500 CALL [<&USER32.GetWindowLongA>] ; \GetWindowLongA
0040A594 |. 8BF0 MOV ESI, EAX
0040A596 |. 6A 00 PUSH 0
0040A598 |. 6A 00 PUSH 0
0040A59A |. 68 57040000 PUSH 457
0040A59F |. 6A 00 PUSH 0
0040A5A1 |. 57 PUSH EDI
0040A5A2 |. E8 59FFFFFF CALL SAP.0040A500
0040A5A7 |. 83C4 14 ADD ESP, 14
0040A5AA |. 68 4C504300 PUSH SAP.0043504C ; ASCII "SAP"
0040A5AF |. 6A 65 PUSH 65 ; /RsrcName = 101.
0040A5B1 |. 56 PUSH ESI ; |hInst = 00000024
0040A5B2 |. FF15 88264500 CALL [<&USER32.LoadIconA>] ; \LoadIconA
0040A5B8 |. 50 PUSH EAX
0040A5B9 |. 68 57040000 PUSH 457
0040A5BE |. 6A 01 PUSH 1
0040A5C0 |. 57 PUSH EDI
0040A5C1 |. E8 3AFFFFFF CALL SAP.0040A500
0040A5C6 |. 83C4 14 ADD ESP, 14
0040A5C9 |. 5F POP EDI ; kernel32.77E7EB69
0040A5CA |. 5E POP ESI ; kernel32.77E7EB69
0040A5CB |. 5B POP EBX ; kernel32.77E7EB69
0040A5CC \. C3 RETN

經過跟蹤後發現使用GetWindowLongA返回的hInstance為0,而不是
正在的句柄,所以將該程式碼改成如下:
0040A58B |. 6A 00 PUSH 0 ; /pModule = NULL
0040A58D |. 90 NOP ; |
0040A58E |. FF15 C8254500 CALL [<&KERNEL32.GetModuleHandleA>] ; \GetModuleHandleA

通過GetModuleHandle來獲取句柄就可以了。

3. 還有,在設定成Auto Hide模式時,當滑鼠移到各個角落的時候,會自動顯示,
這些功能很煩,所以需要把它去掉。搜尋Auto Hide的程式碼發現是通過SetTimer
實現的,程式碼如下:
0041C86F |. 6A 00 PUSH 0
0041C871 |. 6A FF PUSH -1
0041C873 |. 51 PUSH ECX
0041C874 |. FFD6 CALL ESI ; USER32.SetWindowPos
0041C876 |. 6A 00 PUSH 0 ; /Timerproc = NULL
0041C878 |. 8B0D B0604300 MOV ECX, [4360B0] ; |
0041C87E |. 68 2C010000 PUSH 12C ; |Timeout = 300. ms
0041C883 |. 6A 00 PUSH 0 ; |TimerID = 0
0041C885 |. 8B51 0C MOV EDX, [ECX+C] ; |
0041C888 |. 52 PUSH EDX ; |hWnd = 7FFE0304
0041C889 |. FF15 B0264500 CALL [<&USER32.SetTimer>] ; \SetTimer
0041C88F |> A1 BC604300 MOV EAX, [4360BC]

為簡單起見,直接將程式碼41C876跳轉到41C88F如下:
0041C876 /EB 17 JMP SHORT sap.0041C88F
0041C878 |. |8B0D B0604300 MOV ECX, [4360B0] ; |
0041C87E |. |68 2C010000 PUSH 12C ; |Timeout = 300. ms
0041C883 |. |6A 00 PUSH 0 ; |TimerID = 0
0041C885 |. |8B51 0C MOV EDX, [ECX+C] ; |
0041C888 |. |52 PUSH EDX ; |hWnd = 7FFE0304
0041C889 |. |FF15 B0264500 CALL [<&USER32.SetTimer>] ; \SetTimer
0041C88F |> \A1 BC604300 MOV EAX, [4360BC]
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
聆聽天籟之音──DVD-AUDIO全接觸 psac 多媒體影音轉檔燒錄技術文件 1 2005-04-17 01:37 PM
Cubase SX 2.0 的52條實用功能提示! psac 系統 & 硬體安裝及故障判斷技術文件 2 2004-01-22 04:13 PM
Helix Producer 9.2指令式命令執行 psac 多媒體影音轉檔燒錄技術文件 1 2003-08-02 05:15 AM


所有時間均為台北時間。現在的時間是 02:49 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1