西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識(shí) → 自己寫代碼讓pps影音退出之前結(jié)束PPSAP進(jìn)程

自己寫代碼讓pps影音退出之前結(jié)束PPSAP進(jìn)程

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:jiangjing時(shí)間:2011/12/23 1:26:37字體大。A-A+

作者:jiangjing點(diǎn)擊:386次評(píng)論:0次標(biāo)簽: pps

  • 類型:系統(tǒng)工具大。2.8M語言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

無聊的時(shí)候看電影,一般用pps的人不少,但是對(duì)于只有2G內(nèi)存的本本來講,任何程序占用多余的內(nèi)存,都是屬于奢侈的事情,所以這次對(duì)pps的進(jìn)程分析了一下,啟動(dòng)pps只有一個(gè)主進(jìn)程[PPStream.exe],在看電影的過程中,會(huì)多啟動(dòng)一個(gè)進(jìn)程[PPSAP.exe],最受不了的就是,pps退出后,PPSAP進(jìn)程一直霸占著內(nèi)存,不釋放,人家不釋放,咱得動(dòng)點(diǎn)邪惡的念頭.

描述: 
  ppstream每次啟動(dòng)都會(huì)另開一個(gè)進(jìn)程“網(wǎng)絡(luò)加速器”(ppsap.exe) , 
  (1) 每次開機(jī)都會(huì)自動(dòng)運(yùn)行(可手動(dòng)禁止), 
  (2) 退出ppstream之后會(huì)繼續(xù)存在, 
  (3) 可手動(dòng)在任務(wù)管理器里結(jié)束, 
  (4) 自動(dòng)訪問網(wǎng)絡(luò)。也就是說,即使你退出ppstream了,你的電腦還在為其他觀看者提供網(wǎng)絡(luò)流量。占用一定帶寬 。
以上描述來源百度百科,可以用網(wǎng)絡(luò)流量監(jiān)控軟件,試試,退出后該進(jìn)程是否還會(huì)上傳數(shù)據(jù),

1:占內(nèi)存
2:占帶寬

這次diy的目的是,在退出PPStream.exe的時(shí)候,也把ppsap.exe進(jìn)程干掉,
為了簡寫代碼,用PostMessage來關(guān)閉該進(jìn)程.

PostMessage 函數(shù)說明:
 函數(shù)功能:該函數(shù)將一個(gè)消息放入(寄送)到與指定窗口創(chuàng)建的線程相聯(lián)系消息隊(duì)列里,不等待線程處理消息就返回,是異步消息模式。消息隊(duì)列里的消息通過調(diào)用GetMessage和PeekMessage取得。 
  函數(shù)原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 
  參數(shù) 
  hWnd:其窗口程序接收消息的窗口的句柄?扇∮刑囟êx的兩個(gè)值: 
  HWND_BROADCAST:消息被寄送到系統(tǒng)的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口。消息不被寄送到子窗口。 
  NULL:此函數(shù)的操作和調(diào)用參數(shù)dwThread設(shè)置為當(dāng)前線程的標(biāo)識(shí)符PostThreadMessage函數(shù)一樣。 
  Msg:指定被寄送的消息。 
  wParam:指定附加的消息特定的信息。 
  IParam:指定附加的消息特定的信息。 
  返回值:如果函數(shù)調(diào)用成功,返回非零值:如果函數(shù)調(diào)用失敗,返回值是零。若想獲得更多的錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。

為了關(guān)閉該進(jìn)程,先要獲取到hWnd,
使用FindWindow
HWND FindWindow 
  ( 
  LPCSTR lpClassName, 
  LPCSTR lpWindowName 
  );

lpClassName 
  指向一個(gè)以null結(jié)尾的、用來指定類名的字符串或一個(gè)可以確定類名字符串的原子。如果這個(gè)參數(shù)是一個(gè)原子,那么它必須是一個(gè)在調(diào)用此函數(shù)前已經(jīng)通過GlobalAddAtom函數(shù)創(chuàng)建好的全局原子。這個(gè)原子(一個(gè)16bit的值),必須被放置在lpClassName的低位字節(jié)中,lpClassName的高位字節(jié)置零。 
  如果該參數(shù)為null時(shí),將會(huì)尋找任何與lpWindowName參數(shù)匹配的窗口。 
  lpWindowName 
  指向一個(gè)以null結(jié)尾的、用來指定窗口名(即窗口標(biāo)題)的字符串。如果此參數(shù)為NULL,則匹配所有窗口名。

簡單介紹了一下這2個(gè)API,開始實(shí)戰(zhàn)了,先用FindWindow的lpWindowName ,使用VS自帶的工具,spy++,Ctrl+P快捷鍵,找到ppsap.exe進(jìn)程,發(fā)現(xiàn)標(biāo)題為[PPStream 網(wǎng)絡(luò)加速器]

用API大概可以這樣寫

::PostMessage(::FindWindow( NULL, "PPStream 網(wǎng)絡(luò)加速器") ,WM_CLOSE,0,0);

現(xiàn)在最關(guān)鍵的是將這句話翻譯為匯編,并加入到PPStream.exe里面,且在退出的時(shí)候走一下剛加的代碼就完成了.


第一,翻譯為匯編,用VC編譯一下.用od載入,把匯編的二進(jìn)制摳出來就行了
      如果熟悉匯編,也可以手動(dòng)寫
      以下用內(nèi)聯(lián)匯編寫,調(diào)試環(huán)境VC6.0

  CString tmp;
  tmp = "PPStream 網(wǎng)絡(luò)加速器";

  HMODULE hMod = LoadLibrary("user32.dll");
  FARPROC Find = GetProcAddress(hMod,"FindWindowA");
  FARPROC Post = GetProcAddress(hMod,"PostMessageA");
  __asm
  {
    mov ebx,tmp
    push ebx
    push 0
    call Find  ;調(diào)用FindWindowA
    push 0
    push 0
    push 16
    push eax   ;eax是FindWindow返回的結(jié)果
    call Post  ;調(diào)用PostMessageA
  }
  FreeLibrary(hMod);

用od載入PPStream.exe,找一段代碼,把對(duì)應(yīng)的匯編寫進(jìn)去,
最關(guān)鍵的問題就是怎么定位FindWindowA.PostMessageA的地址.
使用od的bpx hmemcpy命令,把調(diào)用的api都找出來,看看有沒有FindWindowA.PostMessageA的地址.
如果存在,就不用再找了,幸運(yùn)的是里面有這2個(gè)API地址.

接下來就是,找到退出的地方,一般程序退出使用的ExitProcess

--下面是本機(jī)上的
00631610     /E9 F0701100   jmp     00748709                         ;  ExitProcess //把這里改成上面新加匯編代碼地址,執(zhí)行完P(guān)ostMessage再跳回00631615

00631615  |. |FF75 08       push    dword ptr [ebp+8]
00631618  |. |E8 C8FFFFFF   call    006315E5
0063161D  |. |59            pop     ecx
0063161E  |. |FF75 08       push    dword ptr [ebp+8]                ; /ExitCode
00631621  \. |FF15 68937400 call    dword ptr [<&KERNEL32.ExitProces>; \ExitProcess


以下代碼是找了一段空白的地址,加入的關(guān)閉ppsap進(jìn)程功能,注意007486EA

00748709      6A 00         push    0
0074870B      6A 00         push    0
0074870D      6A 10         push    10
0074870F      68 EA867400   push    007486EA              //這個(gè)值就是存放"PPStream 網(wǎng)絡(luò)加速器",也就是FindWindow的參數(shù)

00748714      6A 00         push    0
00748716      FF15 7C987400 call    dword ptr [<&USER32.FindWindowA>>;  USER32.FindWindowA
0074871C      50            push    eax
0074871D      FF15 049A7400 call    dword ptr [<&USER32.PostMessageA>;  USER32.PostMessageA
00748723      90            nop
00748724      90            nop
00748725      90            nop
00748726      90            nop
00748727      8BFF          mov     edi, edi    //修復(fù)一下上面jmp占用的幾個(gè)字節(jié).
00748729      55            push    ebp
0074872A      8BEC          mov     ebp, esp
0074872C      90            nop
0074872D      90            nop
0074872E      90            nop
0074872F      90            nop
00748730      90            nop
00748731      90            nop
00748732      90            nop
00748733      90            nop
00748734      90            nop
00748735      90            nop
00748736      90            nop
00748737    ^ E9 D98EEEFF   jmp     00631615            //跳回原始ExitProcess的空間....


基本能達(dá)到目的了.
在退出pps窗口之后,ppsap進(jìn)程都會(huì)被干掉了.

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)