[安全攻防進階篇] 二.如何學好逆向分析、逆向路線推薦及呂布傳遊戲逆向案例 (2)

從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是很是痛苦和難受的,要學的東西太多、涉及面太廣,但好在本身經過分享100篇「網絡安全自學」系列文章,艱難前行着。感恩這一年相識、相知、相趣的安全大佬和朋友們,若是寫得很差或不足之處,還請你們海涵!html

接下來我將開啓新的安全系列,叫「安全攻防進階篇」,也是免費的100篇文章,做者將更加深刻的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將經過在線筆記和實踐操做的形式分享與博友們學習,但願能與您一塊兒進步,加油~前端

前文做者帶領你們學習了科銳錢林松老師在華中科技大學的分享視頻,講解了什麼是逆向分析、逆向分析的典型應用,接着經過OllyDbg工具逆向分析經典的遊戲掃雷,再經過Cheat Engine工具複製內存地址獲取,實現一個自動掃雷程序。這篇文章將繼續普及逆向分析知識,告訴你們如何學好逆向分析,並結合做者經驗給出逆向分析的路線推薦,最後給出呂布傳遊戲逆向案例。話很少說,讓咱們開始新的征程吧!您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,若是有寫得很差或侵權的地方,能夠聯繫我刪除。基礎性文章,但願對您有所幫助,做者的目的是與安全人共同進步,也強烈推薦你們去看看錢老師的視頻,加油~git

做者的github資源:
軟件安全:https://github.com/eastmountyxz/Software-Security-Course
其餘工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
Windows-Hacker:https://github.com/eastmountyxz/Windows-Hacker-Exp


github


聲明:本人堅定反對利用教學方法進行犯罪的行爲,一切犯罪行爲必將受到嚴懲,綠色網絡須要咱們共同維護,更推薦你們瞭解它們背後的原理,更好地進行防禦。(參考文獻見後)web

前文回顧:
[安全攻防進階篇] 一.什麼是逆向分析、逆向分析應用及經典掃雷遊戲逆向 (1)
算法



一.如何學好軟件逆向技能

1.軟件逆向前沿

怎麼學好軟件逆向技能呢?
錢老師說「軟件逆向屬於搬磚活」。哈哈!的確,任何技術、任何學科方向,都是在你剛開始參與實際工做時,會以爲很好玩,當你作多了以後,就會以爲它是搬磚活。你剛開始接觸它,會以爲是技巧,若是你天天都靠這個吃飯,就再也不是技巧了。
數據庫

在逆向分析中,不少人都會去網上學習脫殼之類的教程,會教你在哪一個地方下斷點,按幾下F七、F八、F9後,就到了指定位置而後右鍵脫殼,這一系列操做是大師多年的經驗積累。你可能學會了這個最簡答的方案,卻不理解具體的原理。第一個提出方案的人他須要走過這個殼各類各樣的坑,纔會造成這個所謂的技巧,它就是爲了節約時間和人力成本,無數次重複工做且不影響質量的解決方案。編程

這種最優解決方案提供給新人看的時候,他會以爲充滿了技巧性或不理解,但你們在學習逆向分析的時候,仍是少琢磨技巧,幹就對了。市面上會有各類各樣的工具,好比脫殼,你須要先去學會寫殼,寫好殼,纔會以爲殼有多麼的脆弱,個人程序裏處處都有BUG,若是別人觸發了程序的某個點,個人殼可能就會被摧毀。同時,還有人會研究反調試,甚至彙編出反調試技巧十幾則,你爲何發現不了呢?爲何不能本身總結一個呢?只要你本身寫一個調試器,就會出現不少方案。當你寫完一個調試器以後,你會發現調試器也很脆弱,一不當心某個樣本就會把你的調試器給弄奔潰,那麼一旦你找到樣本規律,對於你的調試器而言就是一種反調試。因此,若是你只是學習網上別人的脫殼、反調試技巧,這是沒用的,你須要去深刻實踐和理解,而後總結屬於本身的技巧。windows

在這裏插入圖片描述


對於對抗行業而言,它是沒有一點僥倖而言,你能把對手按在地上摩擦,你就算贏了。一樣,不少時候咱們只看到安全分析人員光鮮的一面,只看到最後幾秒鐘那個補丁、攻擊的厲害,殊不知道分析人員已經被這個殼、調試折磨得不行,反覆躺坑最終才能解決。因此,對抗考驗的是人的任性和基本功。設計模式

  • 任性:信念支撐
  • 基本功:寫代碼、讀代碼

基本功很重要,網上如今三天學會脫殼、兩天學會反調試之類的教程不少,咱們須要倒是基本功。好比,咱們在掃雷逆向分析時,關於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/ )



參考文獻:
真心推薦你們好好看看這些視頻和文章,感恩這些大佬!前很是推薦錢老師的視頻,感謝華科。
[1] 科銳逆向的錢林松老師受華中科技大學邀請- 「逆向分析計算引導」
[2] [網絡安全自學篇] 五.IDA Pro反彙編工具初識及逆向工程解密實戰
[3] [網絡安全自學篇] 六.OllyDbg動態分析工具基礎用法及Crakeme逆向
[4] Eastmount網絡安全自學篇系列-100篇

相關文章
相關標籤/搜索