很久沒有發表新貼了,這次不是演算法分析.而是一個小弟在實際應用當中遇到問題的解決方案! (10千字)
這次我要對付的軟體是一個比較好用的代理軟體(我不知道這樣文章要不要隱藏檔名稱),演算法大家已經分析很多次了,我就不再重複了.
我這裡來討論一個實際應用的問題:如果你想用別人的機器上網而又不想讓他輕易的發現(好像這樣的想法大家都有吧?).而這個軟體在啟動之後
會在工作列載入一個圖示,這樣就比較矛盾了啊!所以我才要解決他啊!
首先我們先來點思路:
要向系統托盤中加入和刪除圖示必須要用到SHELL32.Shell_NotifyIconA這個函式,也就是說當軟體啟動的時候一定是呼叫這個函式將自己的圖
標加入到系統托盤中;在關閉軟體的時候他也是呼叫這個函式將圖示刪除的.
我們來查一下WINAPI函式表來確定一下這個函式的使用方法和格式.
Const NIM_ADD = &H0//這個就是向托盤加入圖示的引數
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2//這個就是從托盤中刪除圖示的引數
Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4
Declare Function
Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage
As Long, lpData As
NOTIFYICONDATA) As Long
上面2個函式的引數一定要記下來下面有用啊!
我們用WINASM32來反彙編軟體,在函式中查詢SHELL32.Shell_NotifyIconA這個函式看看系統中是怎樣呼叫他的,雙擊幾次我們發現軟體一共有3
處呼叫這個函式.
我們先來分析一下這個軟體呼叫的這3處的作用:首先,軟體啟動會向系統的工作列中新增一個圖示;然後,要完成圖示的動畫作用(寫過程式的人
應該知道,做動畫比較簡單的方法就是來回切換圖示就可以完成了啊);最後,在退出軟體的時候要刪除工作列的圖示.大概就是這3處.
這只是初步分析了下面我們進行動態跟蹤:
為了分析清楚軟體是怎樣呼叫的就必須使用TRW2000或SICE動態跟蹤了,我們下BPX Shell_NotifyIconA 斷點,攔斷後用F12跳出看看軟體是如果
呼叫,和使用引數的!
首先來到下面:
這裡是軟體啟動時呼叫的地方
* Possible Reference
to String Resource ID=00114: "CCProxy"
|
:00408770 6A72
push 00000072
:00408772 51
push ecx
:00408773 C68424F424000005
mov byte ptr [esp+000024F4], 05
:0040877B E8C0890100
call 00421140
:00408780 83C408
add esp, 00000008
:00408783 50
push eax
:00408784 8D4C2414
lea ecx, dword ptr [esp+14]
:00408788 C68424F024000006
mov byte ptr [esp+000024F0], 06
:00408790 E818910300
call 004418AD
:00408795 8D4C2414
lea ecx, dword ptr [esp+14]
:00408799 C68424EC24000005 mov byte ptr [esp+000024EC],
05
:004087A1 E8CE8F0300 call
00441774
:004087A6 8B7C2410
mov edi, dword ptr [esp+10]
:004087AA 83C9FF
or ecx, FFFFFFFF
:004087AD 33C0
xor eax, eax
:004087AF 8D95F8090000 lea edx, dword
ptr [ebp+000009F8]
:004087B5 F2
repnz
:004087B6 AE
scasb
:004087B7 F7D1
not ecx
:004087B9
2BF9 sub
edi, ecx
:004087BB 53
push ebx
:004087BC 8BC1
mov eax, ecx
:004087BE 8BF7
mov esi, edi
:004087C0
8BFA mov
edi, edx
:004087C2 6A00
push 00000000//看到了嗎這裡是0
:004087C4 C1E902
shr ecx, 02 //這裡改沒有作用因為即使改了在下面
:004087C7 F3
repz //系統切換圖示時又會產生所以要改下面的
:004087C8
A5
movsd
:004087C9 8BC8
mov ecx, eax
:004087CB 83E103
and ecx, 00000003
:004087CE F3
repz
:004087CF A4
movsb
* Reference To: SHELL32.Shell_NotifyIconA, Ord:0079h//呼叫函式
|
:004087D0 FF1570E34400
Call dword ptr [0044E370]//呼叫過程成功返回1,失敗返回0
:004087D6 8D4C2410
lea ecx, dword ptr [esp+10]
:004087DA C68424EC24000002 mov byte ptr [esp+000024EC],
02
:004087E2 E88D8F0300 call
00441774
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
|:00408717(C)
|
:004087E7 55
push ebp
:004087E8 E803920100
call 004219F0
:004087ED 83C404
add esp, 00000004
:004087F0 8D4C241C lea
ecx, dword ptr [esp+1C]
:004087F4 51
push ecx
:004087F5 E878390300
call 0043C172
:004087FA 8B10
mov edx, dword ptr [eax]
:004087FC 8D44241C
lea eax, dword ptr [esp+1C]
* Possible StringData Ref from Data Obj
->"%H:%M:%S"
|
:00408800 68BCD64500
push 0045D6BC
:00408805 50
push eax
:00408806 8D4C242C
lea ecx, dword ptr [esp+2C]
:0040880A 8954242C
mov dword ptr [esp+2C], edx
:0040880E E872390300
call 0043C185
:00408813 50
push eax
:00408814 8D4C2424
lea ecx, dword ptr [esp+24]
* Possible StringData Ref from Data Obj
->" "
|
:00408818 6828D14500
push 0045D128
:0040881D 51
push ecx
:0040881E C68424F824000007 mov byte ptr [esp+000024F8],
07
:00408826 E8EC910300 call
00441A17
* Possible StringData Ref from Data Obj ->" "
|
:0040882B 6828D14500
push 0045D128
:00408830 8D542418
lea edx, dword ptr [esp+18]
:00408834 50
push eax
:00408835 52
push edx
:00408836 C68424F824000008
mov byte ptr [esp+000024F8], 08
:0040883E E860910300
call 004419A3
:00408843 8B00
mov eax, dword ptr [eax]
:00408845 8BCD
mov ecx, ebp
:00408847 50
push eax
--------------------------------------------------------------------------
這裡是形成動畫時的呼叫:
:00409669 8D542414
lea edx, dword ptr [esp+14]
* Possible Reference to String
Resource ID=00114: "CCProxy"
|
:0040966D
6A72 push
00000072
:0040966F 52
push edx
:00409670 C784243014000000000000 mov
dword ptr [esp+00001430], 00000000
:0040967B E8C07A0100
call 00421140
:00409680 83C408
add esp, 00000008
:00409683 50
push eax
:00409684 8D4C2414
lea ecx, dword ptr [esp+14]
:00409688 C684242C14000001
mov byte ptr [esp+0000142C], 01
:00409690 E818820300
call 004418AD
:00409695 8D4C2414
lea ecx, dword ptr [esp+14]
:00409699 C684242814000000 mov byte ptr [esp+00001428],
00
:004096A1 E8CE800300 call
00441774
:004096A6 8B7C2410
mov edi, dword ptr [esp+10]
:004096AA 83C9FF
or ecx, FFFFFFFF
:004096AD 33C0
xor eax, eax
:004096AF 8D95F8090000 lea edx, dword
ptr [ebp+000009F8]
:004096B5 F2
repnz
:004096B6 AE
scasb
:004096B7 F7D1
not ecx
:004096B9
2BF9 sub
edi, ecx
:004096BB 53
push ebx
:004096BC 8BC1
mov eax, ecx
:004096BE 8BF7
mov esi, edi
:004096C0
8BFA mov
edi, edx
:004096C2 6A00
push 00000000//這裡雖然也是0但這裡是為了形成動畫的時候呼叫的
:004096C4 C1E902
shr ecx, 02 //如果不想讓他顯示就改變引數就行了6A00->6A02
:004096C7 F3
repz
:004096C8 A5
movsd
:004096C9 8BC8
mov ecx, eax
:004096CB 83E103
and ecx, 00000003
:004096CE F3
repz
:004096CF A4
movsb
* Reference To: SHELL32.Shell_NotifyIconA,
Ord:0079h
|
:004096D0 8B3570E34400
mov esi, dword ptr [0044E370]
:004096D6
FFD6 call
esi
:004096D8 8B4D1C
mov ecx, dword ptr [ebp+1C]
* Possible StringData Ref from Data
Obj ->"CCProxy System Tray Icon Message"
|
:004096DB 68C8D64500 push
0045D6C8
:004096E0 C70358000000
mov dword ptr [ebx], 00000058
:004096E6 898DE4090000
mov dword ptr [ebp+000009E4], ecx
:004096EC C785E80900000A000000
mov dword ptr [ebp+000009E8], 0000000A
:004096F6 C785EC09000002000000
mov dword ptr [ebp+000009EC], 00000002
* Reference To: USER32.RegisterWindowMessageA,
Ord:0200h
|
:00409700 FF1578E54400
Call dword ptr [0044E578]
:00409706 8985F0090000
mov dword ptr [ebp+000009F0], eax
:0040970C
8B1564164600 mov edx, dword ptr [00461664]
---------------------------------------------------------------------------
這裡是軟體退出時,用來刪除圖示的函式呼叫部分!
:00409DAF 90
nop
:00409DB0 A1484B4600
mov eax, dword ptr [00464B48]
:00409DB5
56
push esi
:00409DB6 85C0
test eax, eax
:00409DB8 8BF1
mov esi, ecx
:00409DBA 750F
jne 00409DCB
:00409DBC
8D86E0090000 lea eax, dword ptr [esi+000009E0]
:00409DC2 50
push eax
:00409DC3 6A02
push 00000002//看看這裡和上面介紹的引數值進行一下比較
* Reference
To: SHELL32.Shell_NotifyIconA, Ord:0079h//呼叫函式
|
:00409DC5 FF1570E34400
Call dword ptr [0044E370]//呼叫如果成功則返回1
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00409DBA(C)
|
:00409DCB 8B0DA8164600
mov ecx, dword ptr [004616A8]
:00409DD1
E85A210000 call 0040BF30
:00409DD6 8B0DA8164600 mov ecx, dword
ptr [004616A8]
:00409DDC C7410400000000
mov [ecx+04], 00000000
:00409DE3 8BCE
mov ecx, esi
:00409DE5 C7059CD5450000000000
mov dword ptr [0045D59C], 00000000
:00409DEF E853410300
call 0043DF47
:00409DF4 5E
pop esi
:00409DF5
C3
ret
-------------------------------------------------------------------------
既然知道了這幾處呼叫的作用我們就來做一下修改,軟體在啟動的時候會向工作列加入一個圖示,改這裡行不行回答是不行.
為什麼?因為軟體在加入圖示之後會為了完成動畫作用繼續使用這個函式來切換圖示,所以即使你修改了啟動時的部分在切換
圖示的時候也還會產生,因此改一下生成動畫部分函式引數就行了啊!
查詢字串:8BC18BF78BFA6A00C1E902
改為: ........... 6A02......
這樣修改之後軟體啟動後就不會在工作列產生圖示了(遇到的問題解決了)
小弟第一次寫這樣的文章不免有思路和過程上的漏洞,請大家多多指點和幫助.
如果您有更好的方法請發郵件到powerboy_bcg@163.com
小弟先謝了!
相關文章
- MySQL實際應用中遇到的鎖問題薦2013-12-18MySql
- 報表為什麼會沒完沒了?怎麼解決這個問題?2020-07-16
- 請教一個技術問題,又沒有人遇到過這樣的需求?求分享解決方案2022-08-16
- 幽默:程式設計中困難的不是解決問題,而是確定要解決的問題 - Paul2021-03-12程式設計
- Kettle 在應用中遇到的一些問題和解決方法2008-07-19
- 程式碼實現中卡了很久的問題2019-03-26
- 使用ABAP併發程式設計解決一個實際應用場景中的效能瓶頸問題2020-08-31程式設計
- 程式設計師不是在編寫程式碼,而是在解決問題 - LanRaccoon2020-03-30程式設計師
- 並查集在實際問題中的應用2018-08-04並查集
- 小弟在struts+hibernate的開發中遇到難題。求救!!2004-06-03
- 不是缺少人才,而是面試過程有問題2013-03-17面試
- 大佬們幫小弟看看這個單列模式哪裡有問題,因為啟動瀏覽器會出現兩個,且第一個為 data,以前遇到過但是忘記解決方案了2024-04-16模式瀏覽器
- 有個很有趣的問題,當實體中不是以聚合而是以查詢的方式會出現什麼讓我們忽視的問題。2009-10-17
- 小弟請求各位師兄大哥一個面試遇到的問題2007-09-04面試
- 解決在IIS中沒有響應的程式2016-10-02
- 錄屏為什麼沒有聲音?解決這個問題可簡單了!2021-01-27
- 分享一次分析/解決支付應用效能問題的全過程2015-05-05
- 玩Deno遇到問題的解決方案2018-06-02
- 哪位是真正的大師?幫小弟解決這個問題,不勝感激2007-06-18
- 彭老師有一個問題一直困擾著我,找了很久都解決不了問題2004-08-25
- 有個關於會員頭像應用的問題困惑了很久,請banq和各位道友指教2010-06-01
- 在同一個類中呼叫另一個方法沒有觸發 Spring AOP 的問題2017-02-17Spring
- 解決Eclipse中配置中沒有server選項——tomcat配置中遇到的問題2017-03-04EclipseServerTomcat
- 一個小問題的解決方案2013-07-12
- 實際專案中遇到的問題2019-03-27
- 好用的Vue狀態管理模式:淺談Vuet在實際應用中解決的問題2019-01-21Vue模式
- 解決了一個PC的問題2005-02-03
- win10沒有剪貼簿如何解決_win10系統沒有剪貼簿的解決教程2020-04-15Win10
- 解決在使用Amoeba遇到的問題2013-10-23
- No debuggable processes(Android Studio沒有可除錯應用)問題解決方案2020-12-22Android除錯
- SQL超時解決方案-有時並不是設定問題2010-05-21SQL
- 【話題討論】犯愁的不是沒錢賺 而是如何拿下新專案2014-04-16
- 記一次跨域問題的解決方案2017-09-26跨域
- 做JAVA開發的同學一定遇到過的爆表問題,看這裡解決2018-10-11Java
- 應用動態規劃思想解決實際問題2017-04-01動態規劃
- 解決vi 在FC5中沒有高亮顯示的問題(轉)2007-08-10
- 父元素沒有被撐開塌陷問題解決方案2017-12-04
- 討論一個應用的解決方案2005-02-15