一個老MP3播放器的修改 (8千字)
標 題:一個老MP3播放器的修改 (8千字)
發信人:slangmgh [發短訊息]
時 間:2003-08-19 12:23:22
詳細資訊:
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]
========================================================================
相關文章
- MP3 to EXE v 2.6破解手記 (8千字)2001-09-08
- 一個Java反彙編器的修改 (7千字)2015-11-15Java
- Mp3 播放器 (程式+原始碼)2008-07-14播放器原始碼
- 轉貼:破解時間限制的老文章(一) (2千字)2000-10-23
- 破解MP3隨身聽! (3千字)2002-03-28
- 一個老程式猿的焦慮2017-10-12
- 一個老程式猿的分享42017-11-04
- 發一個XX零戶統管8。01版的破解!
(3千字)2015-11-15
- 加密MP3光碟破解手記 (1千字)2000-08-02加密
- 轉貼一個,linux 解密,www.zoudan.com (8千字)2001-04-14Linux解密
- 一個老程式猿的焦慮32019-02-22
- 一個“老”程式設計師的思考2016-10-27程式設計師
- 一個老程式猿的焦慮22017-10-14
- 一個老師的理解,這就是OOP2009-01-08OOP
- 九、 一個簡單的播放器(各自同步)2019-04-10播放器
- 剛才和幾個老師去喝酒,太急了,現在連下載地址寫上,完整些。 (8千字)2001-05-08
- 《EASY MP3 2.2》的註冊碼破解 高手莫入! (2千字)2001-05-05
- 睡不著,帖一個:aspr程式的脫殼修復體會
(8千字)2015-11-15
- VB黑客程式的暴破(修改)一例 (9千字)2003-02-06黑客
- 一個BAT老程式設計師的忠告!2018-12-31BAT程式設計師
- 一個老程式設計師的建議2012-07-05程式設計師
- iOS8 自定義鈴聲 mp32015-04-02iOS
- 分享一個功能很全的視訊播放器2019-03-04播放器
- ArtVideoPlayer:一個靈活的視訊播放器2018-08-06IDE播放器
- AVFoundation | 封裝一個好用的視訊播放器2018-04-08封裝播放器
- Ati DVD播放器的安裝檢測 (4千字)2002-09-21播放器
- 修改指標法破解VB程式-Fast PC Linker-III (8千字)2001-06-29指標AST
- winxp總管破解筆記(一) (8千字)2002-10-07筆記
- 如何破解Multimedia Builder MP3 4.7b (7千字)2001-10-04UI
- 一個高自由度的Flutter 視訊播放器2020-01-15Flutter播放器
- 索尼NW-WS413 MP3播放器:游泳時也能聽音樂2016-08-15播放器
- 請教banq老師一個repository的問題2011-04-10
- 一個老程式設計師的小小經驗(轉)2011-03-01程式設計師
- 修改一個列表中的一個單詞小技巧筆記2017-11-23筆記
- Redis 修改過期 key 的一個坑2023-05-18Redis
- crackcode程式碼分享筆記(一) (8千字)2001-08-09筆記
- Java 程式的破解方法 (8千字)2002-08-15Java
- 我的破解心得(8) (2千字)2001-03-13