進別人機器後,最害怕和機主同時線上,他會輕而易舉發現你,所以我都是用個監控機主畫面的玩意,也能滿足一下偷窺的獵奇心理。但是杯具的是,radmin太容易被殺了,不光radmin,任何一個福士化的監控程式都會輕而易舉被殺,弄了好多殼都沒用。
於是費了一番折騰把這個功能做到自己幾年前做的那個遠程監控中,終於,不會被殺了。
我那個遠程監控是remoting的服務,之前日誌寫過。
好處是,功能可以後隨時做隨時改,功能和服務分離
即服務中只有保護帳號保護帳號許可權保護終端服務監視防火牆規則保護自身免中止等這些不大會變化的固有功能
又加了一個自動檢查更新。
然後就是一個空的代理類,裡面只有一個返回遠程對象和執行遠程方法的代碼。
大量的實際功能是本地的一個dll類庫,隨時改隨時寫都可,串連遠程服務的時候,在遠程服務調用這個本地dll,那麼這個本地的dll就順著remoting通道跑到遠端記憶體中了,然後本地反射裡面的方法,那麼就實現了遠程執行本地用
每次連都要傳輸這個dll嗎?是,.net的優勢體現出來了,就是個頭小,dll裡一大堆一大堆亂七八糟的東西,編譯出來仍然幾十k。
其他的功能比如進程、檔案、執行什麼的,都可以在這個dll操作,只有遠程監控不行,因為服務是localsystem賬戶運行,用或者發送鍵盤滑鼠合著是發到system使用者而不是administrator
所以,必須在administrator下運行一個進程才能監控administrator,那麼怎麼讓administrator運行進程呢,又不知道他密碼,好在有個createprocessasuser api,以使用者的token運行而不是密碼,又好在localsystem可以免費取到所有登入使用者的token,那麼O(∩_∩)O
就這樣那個dll默默地釋放了一個exe到某目錄,這個exe在administrator不知不覺中以他的身份後台運行了,為我傳來了他的螢幕,為我執行了mouse_event keybd_event等。createprocessasuser有個參數可以讓程式後台運行不顯示。
這個exe應該是console程式而不是winform,如果是winform的,那麼alt+tab好像能看到。
但是無論是console還是winform,進程管理器都能看到,有個方法說是可以在工作管理員隱藏,是c#的,但是我想別這麼麻煩了,我起了一個很像微軟進程的名字,而且殺軟又不報毒,運行又不顯示,誰會一直盯著工作管理員看呢,要是真遇上警惕性這麼高的人,那麼想什麼辦法都會被他發現。
這裡發現了一個問題,釋放這個exe的時候,最好避開system32和windows目錄,因為最起碼360就警示了,也不要是放到temp下,因為有的殺軟看到temp下運行程式也會警示,所以,可以釋放到program files下其他安裝程式的目錄中,起個什麼名字呢,最好不要叫svchost.exe,這屬於“偽裝windows進程”,一些殺軟認為這是“病毒行為”所以會警示,其實windows進程有很多,比如有個tcpsrv,那麼可以起個udpsrv之類的嘛,這又不會被警示又難以分辨。
這個exe一定要周身被try catch包裹起來,即使莫名其妙退出也不能讓他彈出錯誤提示,這可是在administrator帳號下啟動並執行,出錯就會在他案頭上顯示出來。多加try catch,程式可不死。
缺點,用截屏的api效率不高,傳送回來的時候,最好的當然是bmp,但是個頭太巨大了,其次是png,也是很巨大,我試了一下我的案頭1680*1050的win7特效全開,主題是裡約大冒險,api截了這一張圖,用png儲存,4兆多,所以還是用jpg儲存吧,那個只有400多k,還可以接受,如果還嫌大,那麼就得調jpg的品質了,或者直接gif,gif倒是小了,可是那效果也太慘不忍睹了。那麼可不可以壓縮一下或者有個什麼方法只傳送改變之類的呢,這個就太麻煩了,而且cpu直線上升就得不償失了。
對了有人說截屏的api截不到視頻和類似的浮動快顯視窗,但是我試著案頭的一切都可以截啊,就像print screen鍵一樣,無論是media player裡播放的視頻還是浮動視窗還是透明視窗,還是IME的那個菜單,還有滑鼠,都能截下,只有dx遊戲沒實驗過,但是media player是開著dx加速的啊,難道和遊戲的還不一樣?不知道怎麼回事。
radmin截不到滑鼠和IME快顯功能表,這個太討厭了,輸入文字的時候看不到選擇的列表,只能靠猜。但是api可以截到。
是不是在system下可以直接截取任意使用者的螢幕而不需要在該使用者身份下運行程式呢,這方面資料沒找到,網上連個問的都沒有,我試了一下,在administrator下把getdesktopwindow或者getwindowdc的handle傳給system下的進程,截了是黑屏,非得在該使用者下運行一程式才行。
remoting的效率太低了,本來我是想用戶端只remoting到伺服器和那個dll通訊,那個dll和exe通訊,dll充當中轉站,但是這樣效率低的嚇人,並不是cpu和記憶體上升,而是remoting的網路傳輸部分一件事來來回回好多次,造成延遲的厲害,我試了一下通過這種方法,伺服器只能一秒鐘傳個1、2張圖的樣子。
所以就得改進一下,那個exe,反向連結到我的機器的某連接埠,過防火牆了,過路由器了。速度上來了。
機器是內網,remoting服務端,要upnp一下,得到外網ip,寫到machinename。
upnp網上有一個例子,其實很簡單,就是發一個broadcast廣播,udp的,這樣同一內網段的路由器就會返回給你他的ip和upnp映射的連接埠,我的這個di-504m是1780連接埠,別的路由器不一定是這個連接埠,然後就tcp 192.168.0.1:1780發過去一個指令過去,這個指令最常用的就是添加映射刪除映射更新映射,然後接受返回,看看成功沒,就這麼簡單,通訊都是固定的xml格式。
這樣內網自動對應,內網變外網了。
可以加上錄音,用directsound或winmm.dll截取聲音傳過來,可以截麥克風的和擴音器的都行,傳回來。
截網路攝影機?我進入的機器,也不少了,到現在沒發現一個有網路攝影機的,都是伺服器。他們連音效卡都沒有,或者關閉。
現在做了檔案系統操作部分,進程操作部分,遠程cmd,和螢幕監控部分了,其他的像註冊表還有什麼的,以後慢慢做吧,伺服器端不用動,本地改那個dll就行了,remoting這方面真是挺方便啊。
對了,並不限於console登入的administrator,終端服務登入的使用者也一樣可以監控,都是同樣的方法,query出token來,然後讓他運行。
radmin可以完全替代了。而且最重要的是免殺。
就是介面醜了一點。
其實他有防火牆的,只是他剛升級完,表徵圖緩衝有點問題,所以右下角沒顯示出來。
他們是東九區,比咱快1小時。