您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列,因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史,換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行,享受程序,一起加油~
系統安全系列作者將深入研究惡意樣本分析、逆向分析、攻防實戰和Windows漏洞利用等,通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,前文作者先帶領大家學習什么是逆向分析,這篇文章將繼續普及逆向分析基礎知識,告訴大家如何學好逆向分析,并結合作者經驗給出逆向分析的路線推薦,最后給出呂布傳游戲逆向案例,
該篇文章也是作者學習科銳錢林松老師在華中科技大學的分享視頻,這里非常推薦大家去看看,話不多說,讓我們開始新的征程吧!您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,如果有寫得不好的地方,可以聯系我修改,基礎性文章,希望對您有所幫助,作者的目的是與安全人共同進步,加油~
文章目錄
- 一.如何學好軟體逆向技能
- 1.軟體逆向前沿
- 2.逆向技能學習路線
- 二.安全系列書籍及攻擊推薦
- 三.呂布傳游戲逆向分析
- 四.總結
作者的github資源:
- 系統安全:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網路安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
宣告:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網路需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護,(參考文獻見后)
一.如何學好軟體逆向技能
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 星期天 寫于高鐵)
參考文獻:
真心推薦大家好好看看這些視頻和文章,感恩這些大佬!
- 科銳逆向的錢林松老師受華中科技大學邀請- “逆向分析計算引導”
- c++學習筆記——VS2015中添加graphics.h頭檔案 - 行歌er
- https://www.bilibili.com/video/BV1J5411x7qz
- [網路安全自學篇] 五.IDA Pro反匯編工具初識及逆向工程解密實戰
- [網路安全自學篇] 六.OllyDbg動態分析工具基礎用法及Crakeme逆向
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234371.html
標籤:其他
上一篇:2020 JUSTCTF F@k3 0ff1c@l REVERSE WP
下一篇:哈夫曼樹中壓縮率到底是什么意思
