被黑客分分鐘玩死的微信聊天機器人

援交 雷鋒網按:本文作者傲客,i春秋授權雷鋒網獨傢首發。寫在前面微信作為時下最in最熱的移動端即時通訊App,把我們的工作和生活緊密聯系到瞭一起。一個腦洞大開的程序猿寫瞭用開源程序改瞭一個微信聊天機器人,並且在不斷調試中給它賦予瞭n多好玩的功能譬如防撤回信息之類。然後好死不死他在號稱白帽黑客歡喜地的“i春秋-信息安全魔法學院”微信群中做機器人的調試,於是分分鐘被兇殘的壞蛋們玩壞,這個小程序猿也被微信封號處理,結果頑強不息的程序員為瞭突破微信封鎖又做瞭很多逗逼嘗試……因為事情過於搞笑,雷鋒網(公眾號:雷鋒網)特意向i春秋學院約稿,把故事前因後果梳理出來。截圖比較多,但是高潮迭起,值得看完。以下是正文:前段時間用開源程序做瞭一個微信聊天機器人,放到i春秋魔法學院群裡做調試。然後被一群黑客玩壞瞭。但是整個過程還是比較好玩的,所以記錄下來這個事情的來龍去脈,不過提前聲明,這樣做是不對的,沒有考慮後果就貿然跑代碼測試也是不負責任的,尤其是你不知道黑客們會用什麼方法幫你測試,真的有封號的風險哦,請大傢不要學我!(真要測試也要用小號測試?)
起源——為啥要做這個死最近因為某些原因,想給自己找點事情幹填補空閑時間,前一段時間在Github上看到一個微信機器人的代碼,代碼鏈接:Urinx/WeixinBot,大致功能就是用python實現一個命令行版的微信,內置瞭兩個聊天機器人的API可以實現自動回復,但默認不開啟,於是打算試一下。程序跑起來大概就是這個樣子:微信掃碼登錄後:去小黃雞和小逗機器人API網站註冊兩個測試key,在代碼中找到自動回復的變量設置外送茶成true就可以實現消息自動回復,改好代碼運行,在群裡稍加引導,就被人們玩起來瞭。防撤回機器人原理群裡正玩著高興,我開始看代碼,消息監聽部分的代碼大致是這樣的:分類那麼細致,還有撤回消息,我果斷動起瞭做防撤回機器人的念頭,就是在有人撤回消息的時候用這個聊天機器人把撤回的消息原封不動地發回來,這個念頭出來後我就離作死越來越近瞭。有瞭上面代碼的基礎,撤回機器人的實現就不是難事瞭。最先解決最簡單的文字撤回,在第一個消息分類中加入代碼邏輯,將所有文字消息的文字和發信人緩存到一個字典中,形成這樣一個字典結構:

{某S: 各位表哥,有機會一起睡覺, 某客: 好啊好啊, 大叔: py交易}

當有人撤回時,程序執行到撤回分支中,用撤回的人去找剛才字典的key,取出字典中的value發送出去,拼接成如下代碼:

self.webwxsendmsg(“+celSrc+”撤回瞭消息,撤回的消息是:+self.msgdic.get(celSrc), msg[FromUserName])

其中celSrc是撤回人,比如大叔撤回瞭消息,那麼“celSrc”就是大叔,從字典中找到key為“大叔”的對象,對應的value就是“py交易”這樣再把消息發回到消息源中就實現瞭這樣的效果:“大叔”撤回瞭消息,撤回的消息是:py交易。其實這種寫法是有bug的,我先不說,可以在下面回復我,最好帶解決方案哦。調試過程我並沒有特別好的python功底(我是做.NET、前端和node.js的,不過我膽大,啥代碼都敢碰),而且手頭沒有python斷點調試工具,隻能通過print打印調試,並且犯二的用瞭自己的微信號調試,調試過程還算順利,很快就滿足瞭基本需求:看著代碼穩定運行瞭,我就去幹別的瞭,就在這時候被群友玩壞瞭:類似的超長消息發瞭十幾條左右被我發現瞭,馬上關閉瞭程序,但已經晚瞭,我被微信關瞭小黑屋……我意識到我沒有寫字數限制,導致群裡發多長的消息再撤回我都原封魚訊不動的發出來,構成炸群行為。記得我被封殺前的最後幾條消息就是說我要寫字數限制,然而微信並沒有給我這個改正的機會。鐵窗淚——微信小黑屋規則探索微信被封是啥滋味的?首先,發消息肯定沒戲。發個朋友圈通知下大傢吧,門都沒有。我基本與外界隔絕瞭聯系,放棄瞭任何希望,隻望老實改過,好好做人,就在這時,傲客(註:i春秋魔法學院微信群群主)給我發瞭個紅包,我發現我竟然可以正常搶紅包。紅包功能不受限制的話,我是不是可以利用一下?哈哈哈,機(dou)智(bi)的傲客,我發紅包他也發紅包。發現這個新大陸之後我至少可以用紅包簡單地跟我的微信好友溝通瞭,可以讓常聯系的人加我小號,不會以為我消失。我找到瞭封號後的溝通方式。感受與思考曾經在知乎上看到這樣一篇文章,一個俄羅斯程序員,生活在終端裡,隻要任何事情花費時間超過瞭90秒,他一定會寫一個腳本自動化實現。

比如工作日晚上九點之後這名程序員的運維服務器中還有正在運行的SSH進程,就會給妻子發一個今天加班的短信,並從文本庫中隨機選取一句加班理由。早上8點45分服務器中依然沒有活動的SSH進程會自動向BOSS發一封“今天我身體不適的”的郵件,並隨機附上一段請假理由。
還有一個老子要喝咖啡的腳本,這個腳本在執行之後,會先精確等候17秒,然後打開一個SSH進程,遠程連接到公司的咖啡機,然後傳送一堆代碼過去,咖啡機就會煮一份中杯半咖啡因的拿鐵咖啡,然後精確等待24秒後,再倒進咖啡杯裡。這個腳本運行的全程,正好是這名程序員從自己的辦公桌前起身,走到咖啡機前所需要花費的時間。(此項目開源在github中:hacker-scripts)

我的這次作死經歷也可以探索出更多的自動化解決方案,防撤回隻是微信機器人的一個有趣的玩法,自動請假完全不在話下,拋開微信,生活中那麼多重復性操作也可以作為探索用代碼去實現。試想一個iOS開發狗的某一天,清晨,音箱從你最近聽過的播放列表中挑選你最喜歡的歌曲叫你起床,並自動播報當天天氣和空氣質量,提醒你是否需要帶傘帶口罩外約,面包機早已烤好面包。出門後服務器自動向優步發出叫車請求。到公司後自動將未完成的工作發到你的郵箱,並自動從項目管理系統中收集新的bug,從AppStore中抓取低星評價並告知你。你的微信可以自動回復客服推上來的重復性問題,工作時間長瞭自動提醒你活動一下,女神來消息自動回復永不錯過,寫好的PPT、報告、流程圖放到某個文件夾中自動發送郵件給相關人,晚上加班晚瞭自動發微信告知老婆/父母……這一切都來自你的代碼,想想是不是蠻激動的?(雷鋒網註:神奇的代碼,跪服)尾巴高中時,晚上做完作業,窩在一間小屋子中,拿著父母換下來的單色屏舊手機,背著父母偷偷的給心動的女生發短信,或核對當天的作業,或含蓄的聊天表達心中的波瀾。每條一毛錢,70字以內,安全的送達到對方的手機上,安心、踏實。如今,微信成為瞭我們最重要的溝通方式。我們多久沒有發過短信,多久沒有登過QQ?我們的手機號碼都已不再重要瞭,有微信就夠瞭。微信提供的服務固然便捷,我們的社交圈子大瞭,微信加的好友越來越多,人與人之間似乎也越來越近,我們好像可以聯通整個世界。但當微信真的無法為我們服務的時候,會發現,有那麼一部分人隻能存在你的記憶中瞭……編者語此次“作死”事件的主角圖南是一枚浸淫多年的程序猿,由於興趣,在i春秋進行瞭網絡安全方面的學習,而這次破壞微信撤回機制的惡作劇也從一個側面反映瞭微信的安全漏洞,設想如果每個人都把這個防撤回機制編寫入自己的微信,那麼我們平常聊天會因為錯發、誤發泄露多少隱私。嗯,這裡給i春秋點個贊,培養“人”的安全基因,讓開發工程師具備安全意識,這樣,在軟件的開發過程中未雨綢繆,解決隱患於未然,才讓信息時代充滿安全感。 雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

source:https://www.leiphone.com/news/201606/kyKJpmCelZrWE7K4.html