1. 程式人生 > >從蘇寧電器到卡巴斯基(後傳)第04篇:還願吾愛破解視訊教程大賽

從蘇寧電器到卡巴斯基(後傳)第04篇:還願吾愛破解視訊教程大賽

一些鋪墊


       記得上一屆(第四屆)的吾愛破解視訊教程比賽是在2015年的年初舉辦的,當時錯過之後,就想參加今年的比賽。因為儘管那次比賽我沒有參加,但是卻極大地改變了我之後的人生走向,因此也是發生了不少的故事。事後回想,這一切就如同蝴蝶效應,一點小小的振翅,可能引發一場又一場的颶風。而這次我是鐵了心要參賽的,但是年初過去了,年中也過去了,吾愛論壇始終沒有舉辦賽事的訊息,一度覺得今年就不會舉辦了,覺得沒辦法還願了。直到時間來到了九月初,無意間登入論壇,終於發現了這次比賽的舉辦訊息:




       

我覺得我的機會來了。但是由於一年前受到過動畫版塊版主的打壓,我就決定永遠不在吾愛破解發布視訊教程(詳情可參考正傳部分)。可是這次我發現原來動畫版塊的版主已經不在了,現在換了一個新的版主,於是我覺得我可以復出了。好吧,這次我絕對不可以再錯過了。

 

選題


       這次比賽的視訊徵集範圍是“以病毒、脫殼破解逆向分析、追碼及註冊機制作、程式軟體工具編寫、移動程式(安卓、蘋果等)方面的破解等技術類動畫”。我個人擅長的是逆向分析以及病毒分析。比如去年的想法是將我的《跨越CM4驗證機制的鴻溝》這三篇博文錄製成一個視訊,講解如何通過逆向分析的手段來編寫出註冊碼生成工具。今年本來也想用這個選題,但是考慮到這種商業軟體的驗證機制還是有些麻煩的(儘管是好多年前的軟體),如果錄製成視訊給大家講解的話,勢必要花費很長的時間。時間越長越會打消大家學習的興趣,因此只能放棄這個選題。我個人感覺,一次課的時間控制在四十分鐘左右比較好。這樣一來,我就需要重新尋找課程的題材了。


       那個時候,我每週的工作除了正常的病毒分析以外,還加入了我們反病毒部門的啟發查殺技術研究組,每週會有兩天時間專門用於研究啟發特徵的編寫。以往我對於啟發的認識,僅僅停留在晦澀的文字中,一直沒明白什麼是啟發查殺技術。直到我加入了啟發組,才一點一點地明白了其中的原理。考慮到我們的日常分析工作中,幾乎每天都會遇到JavaScript木馬,總會遇到新的變種,我很多時候會驚訝於木馬編寫者的腦洞,他們為了躲避殺軟的查殺,總會有奇思妙想,因此我覺得這場攻防大戰是一個充滿挑戰性的領域。於是就打算以此作為題材,來給大家講解一下JS下載者木馬的自我保護技術、特徵碼查殺、啟發查殺以及主動防禦技術。

 

備課與提交課程


       其實我在備課初期,在腦海中也是列好了提綱。在我打算講解的那幾個方面的問題裡面,自我保護技術、特徵碼查殺以及主動防禦技術在我以前的博文中其實都是有所提及的,因此這裡我只需要按照這次課程的內容稍加修改就可以了,所以我備課的重點就放在了啟發查殺的講解上面。當然了,我課程中所講的這些知識不可能太深,太複雜的話我自己也不懂,鑑於JS木馬的實現機理並不複雜,所以也並不需要採用複雜的手段來對抗它,一些較為常規的比較簡單的方法也就夠用了。


       啟發查殺需要講解兩個方面的內容,即啟發引擎的編寫以及啟發特徵的編寫。啟發引擎用於將原始的JS木馬程式解密(因為目前的JS木馬都會採取五花八門的加密技術,以對抗殺軟的查殺),將其還原為我們能夠直接識別的程式,最終的目的是要生成一個LOG檔案,通過LOG檔案就能夠直接看出來這個木馬在哪個網站執行了下載操作,下載到了本地計算機的什麼位置,以及下載的檔名稱等關鍵內容。知道了這些關鍵資訊,接下來就可以編寫一個特徵或者說一個規則,使其能夠匹配到LOG檔案中的關鍵內容,從而進行判定。這樣一來,以後如果遇到了未知的JS程式,只要先用引擎解出一個LOG檔案,再對LOG檔案進行特徵匹配就可以了。


       在備課的過程中,還發生了一件事。我的課程內容是按照由淺至深的原則編排的,也就是一開始是根據樣本來討論傳統的特徵碼查殺技術,然後我需要展示特徵碼查殺的弊端,於是就在原始木馬檔案上做了一些簡單的修改,算是進行了初步的免殺。一般這種簡單的修改就可以躲避掉一些殺軟的查殺了,事實也確實如此,有五家殺軟不再報毒。而這個時候我驚訝地發現,儘管木馬在修改過後,同時也躲避掉了卡巴斯基的特徵碼查殺,但是卻被卡巴的啟發技術識別了(詳情可參考《JS下載者指令碼木馬的分析與防禦》)。這是一個非常好的引子,正好可以引出啟發技術查殺的優勢,順便也表揚了一下卡巴斯基的啟發技術,從而讓我的課程過渡更加的自然。


       啟發技術的原理說起來簡單,但是在具體程式設計實現中,還是挺困難的。我最開始想使用我們卡巴斯基內部的解密引擎,這是一個較為成熟的軟體,能夠應對各種不同的指令碼,還原出它們的本質。但是考慮到技術保密等等因素,我也就放棄了,最終決定自己寫一個簡易的解密引擎。


       我首先找了一個比較簡單的JS下載者木馬樣本,打算這次的課程就圍繞著它進行研究。其實想要解密的話,最為核心的內容是去掉原始程式碼中多餘的字元。黑客為了對抗我們,往往會把自己的木馬寫得非常晦澀難懂,會加入各種奇奇怪怪的符號來擾亂我們的分析。去混淆的過程相當於是進行字串的匹配與替換,那麼這裡就少不了正則表示式了。但是光有正則表示式還不行,畢竟我希望實現自動化的啟發分析,不可能依靠類似於Notepad++這樣的程式自帶的正則匹配功能進行去混淆的工作,還是需要一種高階語言進行驅動才可以。考慮到簡潔性(利用很少的程式碼實現更多的功能)與相容性(需要很好地相容正則表示式),最後我選擇了Python。


       之前的故事中我一直強調自己程式設計很渣,這次在Python加上正則表示式方面,我依舊遇到了很大的問題。於是就有了上一篇中,被魚C論壇的人攻擊的故事,這裡就不再多講。最後也就只能自己動手豐衣足食了。儘管我最後寫出來的程式還是挺糟糕的,但是至少能夠達到我的目的,對於這次的課程來說夠用了。而程式碼的完善與優化,也就只能拋磚引玉藉助於大家的力量,或者以後我有時間的時候,再好好研究一下了。


       整個備課的過程還是很拖拉的,當我完成我的講稿的時候,僅剩下一兩天的時間就要截止了。本來還打算做一個PPT,邊講技術邊給大家演示,從而達到無縫銜接,便於理解。可惜的是已經來不及了,PPT只能作罷,唯有等我重新錄製的時候,再彌補了。


       時間很快就來到了10月6號,我打算這天下班早點回去錄視訊,這樣還能夠趕上提交的最後期限。但是此時卻發生了一個意外,那就是我的膝上型電腦出現了頻繁自動關機的情況,這簡直讓我崩潰。沒辦法,只能把我在2010年買的一個小筆記本拿出來用了。這個筆記本是ThinkPad推出的第一款紅色筆記本,也就是X100e系列。由於2010年春節的時候我沒有休息,一直堅守在蘇寧,加上那幾天iPhone賣得也很好,因此工資將近四千塊錢,就花了三千多買了這個小紅。按照現在的眼光來看,它的效能自然是很差的,但是也沒辦法了,趕緊錄完得了。可是當我配置完環境,提前走一遍錄課流程的時候,驚訝的發現我課程中一個非常重要的工具在我這個小紅裡面用的時候會宕機,於是這就徹底宣告了現在連小紅也不能用了。沒辦法,只能再換回我的主力筆記本了,也許它休息了這一會之後,想明白了,不再頻繁自動關機了呢?


       老天眷戀,也是天無絕人之路,這次開機異常順暢,挺了一會也沒有任何異常。於是我趕緊開始錄視訊。時隔九個月再次講課,感覺多多少少還是有些生疏的,其中有不少斷斷續續以及講錯稿子的情況出現,不過這都沒關係,後期可以編輯,大概花了一個小時吧,終於錄完了課程的原稿,接下來就是使用視訊編輯軟體進行後期製作了。其實這個後期製作也是很簡單,無非就是把我講的不好的部分刪掉,但是這也花了我一個多小時的時間,剩下了三十多分鐘的課程時間。此時已經來到了10月7號的凌晨1點,趕緊將所有的課程資料打包好,上傳到網盤,再到參賽欄目中發個帖子,宣告自己參賽。

 

改名


       我本來是有一個吾愛破解的賬號的,ID是ioio_jy,當時是通我的CSDN技術文章申請得來的。在吾愛破解論壇,如果想要申請一個賬號,要麼可以通過技術文章的方式來證明自己的實力來申請,要麼就花錢充值吾愛幣買一個賬號,或者等到一些節日的時候,論壇開放註冊的時候申請。儘管我有賬號,但是這次參賽我並不想用這個賬號,因為之前與魚C論壇的種種不快,加上在吾愛破解論壇裡面,也活躍著魚C的版主,考慮再三,不想惹麻煩上身,決定用GleamJ的ID參賽。Gleam是我在卡巴斯基的英文名,J是我姓氏的第一個字母。由於我名字裡面的“曄”的意思是“光、光明燦爛、閃光的樣子”,因此我就選用了“Gleam”這個單詞,因為它就是“閃光”的意思。


       這次的賽事,吾愛破解為了召集天下“英豪”參賽,於是允許沒有論壇ID的朋友發帖參賽。那麼這也就給了我一個很好的機會,建立一個新的身份參加比賽。可是對於新人來說,發帖的稽核會更加的嚴格。因為本屆比賽為了公平起見,是不允許評委以及論壇的工作人員參賽的,同時還歡迎大家舉報。因此像我這種路人甲來這裡發帖,首先就需要過他們的稽核關。另外,也是為了論壇的安全性考慮,論壇管理員也會對帖子中包含的檔案進行稽核,免得有不法分子來這裡傳播病毒木馬。吾愛論壇以前發生過幾次這樣的事情,有不法分子有意或者無意的來論壇釋出帶有病毒木馬的軟體,後來被管理員發現,論壇大牛們依據病毒木馬的行為,會寫一篇詳細的分析報告,並且還會人肉出病毒作者,公之於眾。最後還不忘加上一句話——


       最後想對那些圖謀不軌的人說,在吾愛破解這樣的高階技術論壇玩木馬病毒這種小伎倆,分分鐘就給剝的乾乾淨淨看得清清楚楚了,這裡都是活躍在網際網路安全界最前沿的精英,任何小動作就是自討苦吃,奉勸那些蠢蠢欲動的人,儘快走入正途,不要誤入歧途!


       每當此時,論壇的網友們都會升騰起滿滿的自豪感,會顯得非常振奮人心。因此在論壇發帖,把關也是越來越嚴的。由於這些原因,當我在7號凌晨發帖的時候,我的帖子就是處於稽核的狀態。而7號晚上我下班回到住處,我的貼子依舊處於稽核狀態。我還以為論壇的網路有問題,管理員沒看到我的帖子,於是就又發了一遍。畢竟這次賽事第二天零時就會截止,我可不想功虧一簣。終於在8號上午,我發現我的參賽帖子終於釋出出來了,這才鬆了一口氣,就等待評審的結果了。

 

說說參賽視訊裡面的聲音


       很不理解歷屆那些參賽錄視訊卻不錄聲音的朋友是怎麼想的,按照他們的說法是音效卡壞了或者麥克風壞了,每屆總有這樣的。沒有聲音的話,即便視訊中的技術再高明,也很難拿到一個好的名次。其實按照我的理解,在黑客領域,錄製視訊卻不錄聲音的都是屬於不想透露自己真實身份的那類人。比如揭祕某流行軟體的流氓行為,或者演示如何入侵某個網站……類似於這樣的情況,才會選擇不錄自己的聲音,而是開啟記事本,邊打字邊給大家講解。


       這樣的沒聲音的視訊我看得也是很累,而吾愛破解的本次比賽也有這樣的參賽選手,估計評委在評選的時候,內心還是有些崩潰的。因為視訊一般很長,技術的東西又比較枯燥,加上沒有聲音,評委們秉承著認真負責的態度,那麼就很容易睡著。但是相比於那些雜音極大的視訊,這類沒聲音的視訊已經是天堂了。比如這屆比賽就有一個,那個朋友的電腦估計問題很嚴重,雜音到了刺耳的程度,真不知道那些評委是怎麼堅持下來看完的。


       當初我是懷著知己知彼百戰不殆的態度,嘗試性地看了一下那些沒聲音以及雜音很大的視訊,結果頂多堅持三分鐘就是受不了了。不由得想起來我在去年剛開始當業餘講師的時候,我用電腦自帶的收音裝置來錄製的時候,也會有雜音。儘管雜音不是太大,但是我畢竟多多少少有些強迫症和潔癖,就不能容忍雜音的存在,於是我在對視訊進行後期編輯的時候,都會對聲音進行降噪之類的處理。儘管很多時候降噪的效果也不好,但我也只能做到這種程度了。後來買了一個專門的話筒,錄製的時候情況有所改善,但雜音還是存在,這個問題始終沒辦法解決。我就總感覺如果利用膝上型電腦錄製,雜音就是不可避免的,而我用家裡的桌上型電腦錄製,就幾乎不會有雜音,所以當時我在錄製我最後一個系列的那四十來節課的時候,就全都是使用家裡的桌上型電腦錄的了。


       而我在參加這次比賽的時候,我只能用我的筆記本來錄製。無奈的是我把自己的話筒落在了家裡,我的筆記本收音效果還極差,到了不論我多大聲說話,收的音也幾乎聽不到的地步。不能不參賽也不能沒有聲音,於是我就動用了我的平板,開啟平板的收音功能,在後臺執行,前臺應用用來展示我的講稿,便於我照著念。相當於是把平板當成了話筒,錄完以後再把聲音檔案從平板裡面拽出來,用視訊編輯軟體將錄的視訊和聲音檔案合成,做一些後期處理,於是就形成了我最終的參賽視訊,視訊裡聽不到任何的雜音。因此我的錄製過程也還是挺曲折的。


       我在這裡講了這麼多,目的其實就是想說,只要大家真的想解決問題,那麼總是會有辦法的,只是解決問題的過程可能會很麻煩很曲折,但是隻要能夠達到目的就好。我總覺得那些不錄製聲音或者視訊裡面雜音很大的朋友的參賽態度非常不端正,得不到名次也確實只能怨自己了。

 

我的對手們


       這次的賽事包括我在內,一共有15人蔘加。其中病毒分析類的只有我自己,安卓逆向破解類的有兩人,餘下的12個人全都是Windows平臺的破解教程。其實我本來打算好好看一下其他14個朋友的參賽作品的,但是正如我上文所說的那樣,很多視訊在聲音方面實在是慘不忍睹,於是我也就不打算繼續看下去了。由於我對安卓還是挺感興趣的,所以把那兩個安卓類的教程儲存下來了,打算以後好好研究一下。


       幸好本次賽事不允許管理團隊以及評委參賽,否則我的名次還真的不好說。我在正傳裡面提到過,在我看過的那麼多的計算機技術類的視訊教程裡面,論講課功底我只佩服兩個人,我也承認自己的水平在他們之下,這兩個人就是擔任本屆賽事評委的Kido以及Ximo。這兩個人不單單技術功底雄厚,課程中的語言表達也是非常清晰。說到這裡我想起來,我曾經花錢在某平臺買過國內某個在漏洞挖掘領域的頂級大神的課程,然而我僅僅聽了十來分鐘就放棄學習了。錢白花就白花吧,我可不想找罪受。我覺得這樣的大神就不要出來講課了,寫寫技術文章,帶帶團隊,參加粉絲見面會也就可以了。完全沒必要出現在自己不擅長的領域,那樣的話只會讓自己掉粉。


       言歸正傳,本次賽事當所有的參賽作品提交之後,就進入到了評審期。評審期的第一階段是網友投票,也就是受歡迎程度的評比。受歡迎程度的分數為10到30分,而最後的總分是180分,因此受歡迎程度的評分並不會對總分產生決定性的影響。這種評分方式就是我這種“人緣差”的人的福音。當時我也沒有拉票,覺得得多少分並不重要。而最後的分數也很正常,我是倒數第三,因此如果想要獲得名次,就必須期望在評分的第二階段,評委給我打高分了。對此我還是很有信心的。

 

結果出爐


       那個時候,在等待最終結果的那幾天,我還是有些緊張的,當時甚至還發了一條微博:




       也許將這次比賽和我的高考以及考研相比,有些誇張,但是這也說明我確實是挺重視這個比賽的,覺得高手不少,拿個三等獎也不錯。很快,就盼來了成績釋出的日子:




       一眼看去還以為是13名,看後面才知道自己得了第二。這已經是超出我的預期了,我對這個結果很是滿意。而論壇秉承著公開公正的原則,同時還公佈了所有作品的評分細則:




       總的來看,我對於這次的賽事組織賽事結果等方面都非常滿意。不單單是由於我得了第二名,心情不錯。而是如果所有比賽都能夠秉承著這樣公平公開公正的原則,那麼即便我最後的結果是墊底,那我也是心服口服的。


       比賽的獎品的是一個QQ公仔,騰訊錢包。另外第二名可以選擇一百塊錢以內的技術書籍,我選的是《Python核心程式設計(第3版)》以及《正則表示式必知必會》,畢竟我這方面比較薄弱,應該好好研究一下。

 

最後


       我覺得自己以往講課的經驗對於這次的比賽還是很有幫助的。參加這次的比賽,也算是為自己還願了,了卻了一個心願。如果吾愛破解明年還有這個比賽的話,我一定還會參加的。我覺得我現在就應該找錄課的素材了。還有一個懸念就是,下次的比賽我要用什麼身份參賽呢?GleamJ還是ioio_jy?又或者說是一個新的身份?這個只有明年才會知道了。


     《從蘇寧電器到卡巴斯基》終稿完整版,請訪問

       https://user.qzone.qq.com/3149487460/blog/1494822165