[安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例
從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網絡安全自學”系列文章,艱難前行著。感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!
接下來我將開啟新的安全系列,叫“安全攻防進階篇”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~
- 推薦前文:網絡安全自學篇系列-100篇
前文作者帶領大家學習了科銳錢林松老師在華中科技大學的分享視頻,講解了什么是逆向分析、逆向分析的典型應用,接著通過OllyDbg工具逆向分析經典的游戲掃雷,再通過Cheat Engine工具復制內存地址獲取,實現一個自動掃雷程序。這篇文章將繼續普及逆向分析知識,告訴大家如何學好逆向分析,并結合作者經驗給出逆向分析的路線推薦,最后給出呂布傳游戲逆向案例。話不多說,讓我們開始新的征程吧!您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,如果有寫得不好或侵權的地方,可以聯系我刪除。基礎性文章,希望對您有所幫助,作者的目的是與安全人共同進步,也強烈推薦大家去看看錢老師的視頻,加油~
文章目錄
- 一.如何學好軟件逆向技能
- 1.軟件逆向前沿
- 2.逆向技能學習路線
- 二.安全系列書籍及攻擊推薦
- 三.呂布傳游戲逆向分析
- 四.總結
作者的github資源:
軟件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
Windows-Hacker:https://github.com/eastmountyxz/Windows-Hacker-Exp
聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。(參考文獻見后)
前文回顧:
[安全攻防進階篇] 一.什么是逆向分析、逆向分析應用及經典掃雷游戲逆向
一.如何學好軟件逆向技能
1.軟件逆向前沿
怎么學好軟件逆向技能呢?
錢老師說“軟件逆向屬于搬磚活”。哈哈!的確,任何技術、任何學科方向,都是在你剛開始參與實際工作時,會覺得很好玩,當你做多了之后,就會覺得它是搬磚活。你剛開始接觸它,會覺得是技巧,如果你每天都靠這個吃飯,就不再是技巧了。
在逆向分析中,很多人都會去網上學習脫殼之類的教程,會教你在哪個地方下斷點,按幾下F7、F8、F9后,就到了指定位置然后右鍵脫殼,這一系列操作是大師多年的經驗積累。你可能學會了這個最簡答的方案,卻不理解具體的原理。第一個提出方案的人他需要走過這個殼各種各樣的坑,才會形成這個所謂的技巧,它就是為了節約時間和人力成本,無數次重復工作且不影響質量的解決方案。
這種最優解決方案提供給新人看的時候,他會覺得充滿了技巧性或不理解,但大家在學習逆向分析的時候,還是少琢磨技巧,干就對了。市面上會有各種各樣的工具,比如脫殼,你需要先去學會寫殼,寫好殼,才會覺得殼有多么的脆弱,我的程序里到處都有BUG,如果別人觸發了程序的某個點,我的殼可能就會被摧毀。同時,還有人會研究反調試,甚至匯編出反調試技巧十幾則,你為什么發現不了呢?為什么不能自己總結一個呢?只要你自己寫一個調試器,就會出現很多方案。當你寫完一個調試器之后,你會發現調試器也很脆弱,一不小心某個樣本就會把你的調試器給弄奔潰,那么一旦你找到樣本規律,對于你的調試器而言就是一種反調試。所以,如果你只是學習網上別人的脫殼、反調試技巧,這是沒用的,你需要去深入實踐和理解,然后總結屬于自己的技巧。
對于對抗行業而言,它是沒有一點僥幸而言,你能把對手按在地上摩擦,你就算贏了。同樣,很多時候我們只看到安全分析人員光鮮的一面,只看到最后幾秒鐘那個補丁、攻擊的厲害,卻不知道分析人員已經被這個殼、調試折磨得不行,反復躺坑最終才能解決。所以,對抗考驗的是人的任性和基本功。
- 任性:信念支撐
- 基本功:寫代碼、讀代碼
基本功很重要,網上現在三天學會脫殼、兩天學會反調試之類的教程很多,我們需要卻是基本功。比如,我們在掃雷逆向分析時,關于OllyDbg的教程也非常多,它們詳細講解每個功能干什么,這些功能其實都可以簡略學習,我們需要做的是把下圖所示的反匯編窗口的代碼搞明白就OK了。 這些自動化工具可能不是很熟悉,只是工作效率慢點;但換個角度,如果OD工具中的每個功能及快捷鍵你都會用,但是反匯編窗口的代碼看不懂,那你不就廢了嗎?所以,大家的注意力應該放到反匯編窗口。
同樣,對于IDA靜態分析也是一個道理,它也有很多的功能,但我們的重點其實還是代碼窗口。因為搞安全的人會遇到很多資料,歸納學習總結是必備的技能(通過訓練是可以培養出來的),它能幫助你快速的找到重點。所以,技巧不是決定性因素,逆向分析人員真正拼的是基本功。
那么,如何學好編程語言或逆向分析呢?
不要這樣學習:
- 只看書,不上機
- 只運行,不調試
- 只做課后練習,不做工程項目
應該這樣學習:
- 多敲代碼,重要實戰
- 程序不是寫出來的,是調出來的
- 根據自己的興趣或者市場的需要多做一些有一定規模的項目
逆向分析底層推薦的三門課程:
- 數據結構
- 操作系統
- 編譯原理:逆向的理論知識課程,想要逆向反匯編,還原成高級代碼,就需要對編譯器有一定了解,否則只能去看別人公布的技巧。
比如《操作系統》課程,你能不能做一個小型的操作系統出來呢?《編譯原理》你能不能找到開源的編譯器看看詞法分析、語法分析的源代碼,寫點注釋呢?2000年之前錢老師是玩黑客工具的,但后來發現學不到本質,學的都是技巧,而技巧是有時效性的,所以想學好還得研究其本質,并且逆向分析底層的知識很少更新,而上層技術更新較快。
2.逆向技能學習路線
在校可以做哪些項目準備呢?
- 關注網絡社區,參與技術討論,推薦看雪論壇
- 搜索安全公司招聘信息,了解技能要求(逆向技能表)
- 針對性開發實際項目
科銳逆向公司在看雪分享的逆向資料推薦大家去學習下。
- 逆向并公開Ollydbg的原理
- 逆向并公開xp版CreateProcess的原理及流程分析
- 逆向并公開Win7 x64版CreateProcess的原理及流程分析
- 逆向并公開xp版ReadProcessMemory原理及流程分析
逆向工程技能樹
下面給出軟件逆向工程的技能表,包括提前知識、基礎技能、開發技能、逆向技能、學習書單和實踐項目。
(1) 基礎技能
包括匯編語言、C語言、C++語言、數據結構,至少得學一個低級語言和高級語言,然后會一個面向對象語言,重點是數據結構。
(2) 開發技能
逆向分析需要懂開發,開發至少需要了解一個操作系統平臺的編程,可以選擇Windows或Linux,如Windows SDK編程;然后至少了解一種框架(Java框架、微軟MFC等)。同時,需要懂網絡編程(Socket、TCP、HTTP等),有空可以了解下設計模式,學習設計模式前需要有項目經驗,因為閱讀大型項目代碼時會遇到。然后,數據庫是必須要學習的技能,非常重要。
在數據庫學習中,大家應該好好學習下數據關系理論(范式、集合等),而大家可能更關注后面的SQL語句。為什么呢?因為語句是可能變化的(如Neo4j和MySQL不同),而關系理論一直在那里。同時,我們的操作系統也可以理解為一個專用型數據庫,它的職責是管理和分配硬件資源的。比如,我們的系統有50個以上進程在跑,一個32位進程的理論地址空間假設是2G,這就需要100G的內存,那怎么解決這個問題呢?通過數據關系可以解決。微軟的操作系統都用到了數據關系,都會建表和主外鍵,從而避免空間的無故或重復占用。
(3) 逆向技能
逆向技能比較偏實戰,Windows逆向包括OllyDbg、PE文件格式、IDA使用、Windows內核驅動開發(核心操作系統),Android逆向包括BakSmail、DEX文件格式、Linux內核、NIX操作等。
(4) 學習書單
主要推薦編程語言開發、數學基礎、數學結構與算法、操作系統、編譯原理、軟件分析、、工具及參考手冊等書籍。數學基礎也非常重要,但我們逆向以應用為主,數學簡單了解就好。
這里推薦《計算機程序設計藝術》,大師高德納寫的,其中TeX也是他發明的。高德納在寫書時發現現有的計算機排版軟件效果太差,破壞了這套書的美感,所以輟筆10年專研排版美學打造了TeX系統,也設計了METAFONT字體設計系統,開發完TeX后才把這本書的四卷寫完,這種精神非常值得大家學習!同時,《Windows內核情景分析》《現代編譯原理》《軟件調試》《加密與解密》等都不錯。
(5) 實踐項目
這里給出一些推薦的開發項目和逆向項目供大家學習,感覺難度都不小!由于作者開發類的項目很多都做過,所以后面只會詳細講解一個遠控軟件的實現過程,更多是系統學習和分享逆向項目。遠控軟件對我們分析木馬有幫助,CAD軟件能幫助我們分析C++程序,調試器能輔助反調試,PE分析工具幫助對PE文件格式的理解,逆向項目更是直觀地提升逆向分析能力。
下面是推薦的一些項目,以及作者的完成情況,這些年確實學得很雜,o(╥﹏╥)o
- 編寫一個小游戲,如俄羅斯放、五子棋、貪吃蛇、坦克(2012年大二完成《墜夢》等多款游戲)
- 編寫一個遠控軟件,支持PC、Android(2014年大四畢設已完成)
- 編寫一個CAD,支持圖形編輯、圖像變換、存儲 (2013年大三圖形學課完成、2015年完成Android端)
- 編寫一個調試器
- 編寫一個小型操作系統(2013年大三小學期C++實現U盤操作系統)
- 編寫一個任務管理器,可以對進程、線程等程序活動進行監控(2014年大四畢設已完成)
- 編寫一個網絡聊天室,支持多人聊天(2015年研一Python實現)
- 編寫一個PE分析工具
- 做一個針對Windows掃雷的作弊程序(2020年博一完成)
- 分析一個RPG游戲存檔并寫程序修改存檔(2013年大三完成《仙劍1》存檔器)
- 通過注入方法,為Windows計算機添加一個菜單程序選項
- 通過注入內聯鉤子,實現對指定程序API監控
- 詳細逆向分析一個典型的病毒和機理(2020完成年WannaCry蠕蟲分析)
- 不用編譯器,只借助十六進制編譯器,可以手寫一個編譯器
- 從內存中durmp出某應用程序并修復導入表等消息
- 嘗試PJ看雪論壇Crakeme模塊的各Crakeme習題(2019年正在進行中)
- 結合安全機理找到安全漏洞并提交CVE漏洞報告
二.安全系列書籍及攻擊推薦
作為安全初學者,我結合自己和小伙伴們的經驗,簡單給大家推薦下網絡安全、系統安全和人工智能三個方向的書籍,以及相關技術工具,希望大家喜歡!
首先推薦如下書籍,這些都是我讀過或正在學習的,都還不錯。
- 網絡安全
《白帽子講web安全》《Web前端黑客技術揭秘》《XSS跨站腳本攻擊剖析與防御》《Web攻防業務安全實戰指南》《內網安全攻防滲透測試實戰指南》《安全之路Web滲透技術及實戰案例解析》《黑客攻防技術寶典瀏覽器實戰篇》《網絡攻防實戰研究漏洞利用與提權》《CTF訓練營》等。 - 系統安全
《加密與解密》《惡意代碼分析實戰》《Windows黑客編程技術詳解》《逆向工程權威指南》《軟件安全》《windows高級編程》《Windows PE 權威指南》《IDA pro 權威指南》《Android軟件安全與逆向分析》《C++反匯編與逆向分析技術揭秘》《0day安全:軟件漏洞分析技術》等。 - 人工智能
推薦 《機器學習》《深度學習》《統計學習方法》《Malware Data Science》 等。
下圖是作者的一些書籍,感覺還挺多的,建議大家一定結合實戰進行閱讀,堅持就是勝利。
常見安全網站及論壇:
- 看雪(https://bbs.pediy.com/)
看雪論壇是個軟件安全技術交流場所,為安全技術愛好者提供一個技術交流平臺和資源。 - freebuf(https://www.freebuf.com/)
國內關注度最高的全球互聯網安全媒體平臺,愛好者們交流與分享安全技術的社區。 - 吾愛PJ(https://www.52pojie.cn/)
吾愛PJ論壇是致力于軟件安全與病毒分析的非營利性技術論壇。 - i春秋(https://www.ichunqiu.com/)
由國內網絡安全機構永信至誠打造的信息安全在線教育平臺,非常多的在線網絡安全資源。 - 安全客(https://www.anquanke.com)
提供權威信息發布的漏洞信息,發布安全資訊,分享安全知識和精彩的安全活動直播。 - 先知社區(https://xz.aliyun.com/)
一個開放型技術平臺,包括非常優秀的安全技術文章。 - Bilibili網站(https://www.bilibili.com/)
B站真的提供了非常多的各類學習資源,去B站學習安全課程真是不錯的選擇。 - CSDN網站(https://blog.csdn.net/Eastmount)
全國最大的編程社區,可惜安全文章比較少,但上面有正在進步的我,哈哈!更重要也有很多不錯的安全分享,比如冰河、謝公子等,作者謀篇文章會詳細總結CSDN的那些白帽子。 - 微信公眾號
微信公眾號也提供了非常便捷的安全學習環境,包括很多安全資源,推薦安全+、Gcow、謝公子、看雪、滲透云等公眾號。 - 安全牛(https://www.aqniu.com/)
- 安全內參(https://www.secrss.com/)
- 綠盟(http://www.nsfocus.com.cn/)
- 阿里聚安全(https://xlab.tencent.com/cn/)
網絡安全常用工具推薦如下,其中加粗字體是作者學習或使用過的優秀工具。
- Fiddler(網絡漏洞掃描器)
- Burpsuite(網絡漏洞掃描器)
- NMap(端口掃描器)
- Nessus(漏洞掃描程序)
- Wireshark(手動分析包工具)
- SQLMAP(滲透測試工具)
- Metasploit(漏洞監測工具)
- Cobalt Strike(滲透測試框架)
- Hydra(密碼破J工具)
- Acunetix(網絡漏洞掃描軟件)
- pangolin(SQL注入測試工具)
- Ettercap(中間人攻擊工具)
- Maltego(取證工具)
- OWASP Zed(攻擊代理工具)
- Caidao(網站滲透工具)
- 中國蟻劍(網站滲透工具)
- 冰蝎Behinder(網站滲透工具)
系統安全分析常用工具推薦如下:
- OllyDbg(動態分析工具 倚天劍)
- IDA Pro(靜態分析工具 屠龍刀)
- Windbg(微軟內核級調試工具)
- PEiD(查殼工具)
- Cuckoo sandbox(開源沙箱系統)
- PEView(PE文件查看工具)
- 010Editor(二進制分析)
- Process Monitor(Windows監視工具)
- Process Explorer(文件進程查看器)
- Cheat Engine(內存修改編輯工具)
- Outpost Firewall(共享軟件)
- hex editor(十六進制編輯工具)
- Ubertooth(藍牙嗅探工具)
- 匯編語言編譯器
下面分享2019年看雪安全峰會關于攻擊檢測和對抗的常見技術。
三.呂布傳游戲逆向分析
下面以老游戲《新呂布傳》為例,這是非常老的一款游戲。
我們在玩這個游戲的時候會遇到一個問題,就是NPC說話太慢,在不斷地過劇情,我們想逆向分析讓它迅速完成對話,加快我們游戲的進程。
第一步,通過OllyDbg軟件打開呂布傳游戲“Ekd5.exe”。
第二,右鍵點擊“查找”,選擇“當前模塊中的名稱”查看該游戲打開了哪些函數。
返回界面如下圖所示,包括該游戲需要調用的各種函數,并且猜測各種函數的應用場合。
第三步,發現兩個異常函數。
作者在游戲中設置兩個鉤子函數做什么呢?難道想檢測我們的鍵盤嗎?
- UnhookWindowsHookEx:卸載鉤子消息函數
- SetWindowsHookExA:安裝鉤子消息函數
PS:這些分析經驗需要我們不斷地實踐來總結,這是一個大量反復訓練的過程,目前作者也還在學習的過程,一起加油!
第四步,選中該函數右鍵點擊“在每個參考上設置斷點”。
可以看到已經設置了兩個斷點。
第五步,運行程序或雙擊斷點可以進入反匯編窗口具體位置,可以看到它是一個鍵盤鉤子,并且回調函數為0x0040D307。
- Hookproc Ekd5.0040D307
- HookType WH_KEYBOARD
- CALL SetWindowsHookExA
第六步,雙擊回調函數那行,復制地址40D307,輸入Ctrl+G跟隨到指定位置。
第七步,再跳轉的地址0x0040D307位置按下F2,增加新的斷點。
第八步,按下F9運行程序,并進入對話界面。
第九步,按下某個按鍵,我們來詳細分析這段匯編代碼。
作者按下的是數字“9”,其輸出結果存儲在EAX寄存器中,對應的十六進制為0x39,然后它會檢測我按鍵的ASCII碼是否等于0x20(空格)。
- CMP EAX, 20
第十步,給該位置0x0040D32A下個斷點,繼續運行和分析代碼。
當輸入空格相等后,它會比較一個全局變量的值是否為0,然后進入新的CALL。
- CMP ptr [500E0C], 0
- CALL Ekd5.00406A33
運行代碼進入CALL函數,然后去到0x00406A33位置,如下圖所示,發現它開啟了一個線程。我們接著需要定位到線程的處理函數。
- CreateThread
- PUSH Ekd4.00406A7F
第十一步,按下Ctrl+G跟隨到0x00406A7F位置,接著分析匯編代碼。
給該位置下個斷點,然后分析該函數內容。發現它首先比較狀態,如果狀態為0就設置個WM_LBUTTONDOWN消息,即點擊鼠標。
- Message = WM_LBUTTONDOWN
- Message = WM_LBUTTONUP
然后間隔一個Sleep函數,時間為100毫秒,接著又設置一個UP消息,相當于左鍵按下后又彈起來了。
寫到這里,我們發現空格的效果就是反復按下鼠標左鍵又彈起右鍵,原來該游戲已經自帶了過場景的功能,就是按下“空格”,哈哈!但是該游戲的說明書并沒有講述這個按鍵的情況,相當于一個隱藏功能,這里大家也可以進一步修改制作游戲輔助器。這里主要是帶領大家來學習下游戲逆向的過程,尤其是OD工具的基礎用法。
總之,如果你喜歡逆向分析,會非常有意思,包括玩游戲也會從另一個角度思考;但如果你不喜歡逆向,千萬別進這個行業,每天逆向代碼看到想吐,可以換個喜歡的行業,因為逆向分析工作就是每天泡在代碼堆里。
四.總結
寫到這里,這篇文章就介紹完畢,希望對您有所幫助,最后進行簡單的總結下。
- 一.如何學好軟件逆向技能
1.軟件逆向前沿
2.逆向技能學習路線 - 二.安全系列書籍及攻擊推薦
- 三.呂布傳游戲逆向分析
學安全一年,認識了很多安全大佬和朋友,希望大家一起進步。這篇文章中如果存在一些不足,還請海涵。作者作為網絡安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行。
《珈國情》
明月千里兩相思,
清風縷縷寄離愁。
燕歸珞珈花已謝,
情滿景逸映深秋。
最感恩的永遠是家人的支持,知道為啥而來,知道要做啥,知道努力才能回去。夜已深,雖然笨,但還得奮斗。
(By:Eastmount 2020-07-29 星期一 晚上9點寫于武漢 http://blog.csdn.net/eastmount/ )
2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。
參考文獻:
真心推薦大家好好看看這些視頻和文章,感恩這些大佬!前非常推薦錢老師的視頻,感謝華科。
[1] 科銳逆向的錢林松老師受華中科技大學邀請- “逆向分析計算引導”
[2] [網絡安全自學篇] 五.IDA Pro反匯編工具初識及逆向工程解密實戰
[3] [網絡安全自學篇] 六.OllyDbg動態分析工具基礎用法及Crakeme逆向
[4] Eastmount網絡安全自學篇系列-100篇
總結
以上是生活随笔為你收集整理的[安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红军
- 下一篇: 爬虫进阶 -- 神级程序员:让你的爬虫就