管控孩子電腦軟件是一款用于管控上網(wǎng)課的孩子電腦程序,在之前的版本上編譯了exe執(zhí)行程序,為了簡化,只編譯了一個孩子電腦的server端,以及一個家長端的控制端,當然,也可以把控制端放在孩子電腦上,一并執(zhí)行!
軟件介紹
程序的組成
1.1 本程序server端
server的daemon端,也即是ChildGuard.exe,默認監(jiān)聽在8888端口。
運行時,會申請管理員身份運行,無管理權(quán)限會失敗。
由于其申請會申請windows開機啟動等一系列木馬常用行為,會被360認為是木馬之類。
需要讓360放行,并添加信任。
如果不放心exe程序,請下載對應的源碼,自行編譯
由于其會嘗試調(diào)用電腦攝像頭抓拍,有時會被360攔截,有時不會(說明360這個功能不靠譜啊,真攔截時,攔不住)
請在360安全衛(wèi)士,“設置”-->“安全防護中心”-->設置“免打擾模式”和去掉“魔法攝像頭”
ChildGuard其會釋放出WatchDog.exe程序,并將它注冊成為一個開機自啟動的WatchDogC的服務。
WatchDogC的服務,會根據(jù)WatchDog.ini里面的配置,來定期輪詢啟動的ChildGuard.exe是否活著,沒有活著的話,嘗試啟動它。
這樣可以保證ChildGuard.exe即使被殺,WatchDogC服務會自動再拉起一個ChildGuard.exe程序
執(zhí)行完后,重啟下電腦,重啟后,netstat -ano|findstr 8888
驗證確認ChildGuard.exe已經(jīng)可以自動啟動,監(jiān)聽在了8888端口
1.2 本程序的client端
客戶端部分,有幾個:
1.2.1 ChildControl.exe控制部分
這個程序放在家長電腦上運行,或者放置在孩子電腦上運行
放置在家長的電腦上運行,記得修改ChildControl.ini里面的孩子電腦ip地址
它負責死循環(huán),每30s檢查一下孩子pc的狀態(tài):
①獲得當前運行的是什么程序,程序的標題是什么
②如果當前的前臺程序在黑名單,那么kill它
③檢查360瀏覽器的標題,含有相關(guān)關(guān)鍵字,kill它
④檢查騰訊視頻是否存在,kill它
⑤每30s抓拍一次電腦屏幕,以及攝像頭抓拍一次
⑥每30s抓一端10s的麥克風錄音
⑦黑名單的開啟時間段:比如設置成晚上或者周末,可以使用黑名單的程序,其他時間可以
如果設置了啟動時自動隱藏,下次想能夠操作,請先修改ChildControl.ini里面的hide參數(shù),設置為0
1.2.2 rpc_cmd.exe是命令行cli部分
這個可以放在我的電腦上運行:
>rpc_cmd.exe
checking host=stanleypc,port=8888
http://stanleypc:8888>help
func=s.help()
['now', 'md5sum', 'wf', 'rf', 'my_exec', 'killProcess', 'getProcess', 'getActiveProcName', 'cpu_usage', 'mem_usage', 'dimm_info', 'msg', 'msgImm', 'get_path', 'tts', 'net_info', 'is_admin', 'GetSystemPowerStatus', 'uptime', 'create_time', 'username', 'disk_c_usage', 'disk_io_counters', 'net_io_counters', 'snapScreen', 'snapCam', 'snapMerge', 'snapAudio', 'll', 'exit', 'help', 'version']
http://stanleypc:8888>version
func=s.version()
v0.8.6.20200410
http://stanleypc:8888>tts(別玩游戲啦,快做作業(yè)!)
tts這個用得多,主要是會在它屏幕上顯示一個對話框,上面有你發(fā)過去的文字,然后會在他電腦上,語音播報一下這段文字
功能介紹
程序當前支持的功能:
now:取得當前孩子pc的時間
md5sum:給定文件名,返回對應的md5值(用于校驗文件比對)
wf: 寫data給到指定文件
rf: 讀文件內(nèi)容
my_exec : 執(zhí)行指定的dos命令,返回標準輸出的內(nèi)容,和錯誤輸出的內(nèi)容
'killProcess', 給定pid,殺進程
'getProcess', 不加參數(shù),返回所有進程信息;加pid返回pid進程信息;加caption信息,返回caption的進程信息
'getActiveProcName', 返回當前前臺的進程信息
'cpu_usage', 返回當前cpu利用率
'mem_usage', 返回當前內(nèi)存利用率
'dimm_info',返回當前物理內(nèi)存條情況
'msg', 發(fā)指定的文本消息給孩子的電腦屏幕,并等待孩子點“確定”
'msgImm',發(fā)指定的文本消息給孩子的電腦屏幕,不等孩子點,直接返回
'get_path',獲得當孩子pc上ChildGuard.exe運行所在目錄
'tts',發(fā)指定的文本消息給孩子的電腦屏幕,并語音播報給消息內(nèi)容
'net_info',返回孩子pc上的網(wǎng)絡信息內(nèi)容
'is_admin', 判斷ChildGuard.exe是否是以管理員模式運行的
'GetSystemPowerStatus',判斷電池電量等信息,方便今后的其他應急程序準備
'uptime', 獲得電腦的運行時間
'create_time',獲得ChildGuard.exe的運行時間
'username', 獲得當前ChildGuard.exe是以哪個用戶運行的
'disk_c_usage', 獲得c盤的利用率
'disk_io_counters', 獲得當前磁盤的io情況,建議間隔運行2次,取差值÷間隔時間,獲得io流量
'net_io_counters', 獲得網(wǎng)絡io情況
'snapScreen',抓電腦屏幕
'snapCam', 抓攝像頭拍照
'snapMerge', 抓電腦屏幕并抓攝像頭拍照,然后把兩者拼接到一個圖片上
'snapAudio',抓電腦的麥克風錄音一段指定時長(默認10s)
'll',類似linux的ls -l的輸出信息
待完善支持功能
1、熱更新
2、獲得微信訪問指定網(wǎng)址的內(nèi)容。
目前GetForegroundWindow獲得窗口句柄
再GetWindowText用窗口句柄獲得標題,
用GetWindowThreadProcessId獲得pid
用WMI接口用pid獲得命令行信息
基本能覆蓋各個瀏覽器標題內(nèi)容,滿足了大部分需求。
但如果用微信打開的網(wǎng)頁鏈接,或者小程序之類的,這個標題text或者頁面內(nèi)容獲得不到。
還在嘗試別的思路,捕獲這個信息
3、防被殺
目前孩子小,還不會任務管理器,將來可能就會了。
要考慮病毒方式雙進程互動
4、目前用的是xmlrpc.server.SimpleXMLRPCServer,還沒有身份驗證機制,內(nèi)網(wǎng)使用還好,不建議映射端口掛公網(wǎng)
使用說明
補充下使用技巧
1、ChildControl.ini中的輪詢間隔
設置為30s,目前來看是折中后,比較合適的。
性能和及時性上,都可以保障
2、snap的文件太多了,list會耗時太長,
這個需要定期清理下
寫了這個archive_snap_pic.py程序,可以定期清理
3、snap后的照片分析
analyze_pic.py程序
用孩子電腦攝像頭抓拍了照片,可以用opencv簡單判斷下幾個狀態(tài):
a、筆記本電腦合上了;b、孩子離開座位,沒在電腦前;c、孩子坐在電腦前
目前還在研究opencv的玩法,大致只實現(xiàn)了上述的幾個內(nèi)容
4、源碼方式執(zhí)行:
需要依賴的幾個包:
python.exe -m pip install pyinstaller PyQt5 opencv-python pywin32 Pillow baidu-aip psutil pygame pydub
去網(wǎng)站
找到對應自己電腦版本的PyAudio模塊,下載下來,然后安裝它
python.exe -m pip install PyAudioxxxxx.whl