[系統安全] 二.如何學好逆向分析及呂布傳遊戲逆向案例

您可能之前看到過我寫的類似文章,爲什麼還要重複撰寫呢?只是想更好地幫助初學者瞭解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史。換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什麼程度,漫漫長征路,偏向虎山行。享受過程,一起加油~

系統安全系列作者將深入研究惡意樣本分析、逆向分析、攻防實戰和Windows漏洞利用等,通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步。前文作者先帶領大家學習什麼是逆向分析,這篇文章將繼續普及逆向分析基礎知識,告訴大家如何學好逆向分析,並結合作者經驗給出逆向分析的路線推薦,最後給出呂布傳遊戲逆向案例。

該篇文章也是作者學習科銳錢林松老師在華中科技大學的分享視頻,這裏非常推薦大家去看看。話不多說,讓我們開始新的征程吧!您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,如果有寫得不好的地方,可以聯繫我修改。基礎性文章,希望對您有所幫助,作者的目的是與安全人共同進步,加油~

作者的github資源:


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


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

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) 學習書單
主要推薦編程語言開發、數學基礎、數學結構與算法、操作系統、編譯原理、軟件分析、、工具及參考手冊等書籍。數學基礎也非常重要,但我們逆向以應用爲主,數學簡單瞭解就好。

在這裏插入圖片描述

(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.逆向技能學習路線

  • 二.安全系列書籍及攻擊推薦
  • 三.呂布傳遊戲逆向分析

學安全一年,認識了很多安全大佬和朋友,希望大家一起進步。這篇文章中如果存在一些不足,還請海涵。作者作爲網絡安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行。

在這裏插入圖片描述

《珈國情》
明月千里兩相思,
清風縷縷寄離愁。
燕歸珞珈花已謝,
情滿景逸映深秋。



2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享論文的算法實現。娜璋之家會更加系統,並重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

(By:娜璋AI之家 Eastmount 2020-12-13 星期天 寫於高鐵)


參考文獻:
真心推薦大家好好看看這些視頻和文章,感恩這些大佬!










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章