1. 程式人生 > >外掛技術匯總及書籍推薦

外掛技術匯總及書籍推薦

安全工程師 code OS 運用 windows驅動 生態 心算 調試 虛表

本節介紹遊戲安全領域一些入門必備書籍,包含開發、逆向和遊戲安全基礎。讀者可以根據自身情況選擇性閱讀。

1.開發基礎

遊戲安全領域逆向是核心技能,但在學習逆向技術之前,必須擁有牢固的開發基礎。因為編寫外掛需要一定的開發基礎;再來只有有一定開發基礎,並對程序架構,運行原理了解,才能在逆向領域走的更深入。

對於沒有開發基礎的讀者,這裏推薦《C語言程序設計》入門,作者是C語言和UNIX系統的發明人,書比較薄,但卻不失為經典。遊戲安全領域主流開發語言為C/C++,在有一定C語言基礎後,可以嘗試閱讀下《C++ Primer》。此書內容比較全面,讀不完沒關系 ,可以作為C++的字典書籍,有疑問時隨時查閱。不過首先需要重點閱讀12~15章,了解面向對象的思想;弄清楚繼承、多態、虛函數的原理,由於大部分遊戲核心算法都使用C++開發,這樣在逆向遊戲時會很有用,在逆向基礎部分還會重點介紹。有了語言基礎之後,就可以開始我們的安全編程之旅。

進程與線程,為遊戲安全編程的基礎知識,推薦讀者閱讀《Windows編程循序漸進》第12章,很簡潔形象的對進程線程進行了描述。在此基礎上可以拓展閱讀下第14和15章,掌握進程間通信和線程同步的原理,尤其進程間通信在編寫外掛時用的較多。若讀者想深挖可繼續閱讀《Windows核心編程》第4和6章,此書會對進程線程就行更加詳細的介紹。

網絡通信(TCP/IP通信),在分析遊戲時網絡通信是需要重點關註的部分。推薦讀者閱讀《Windows編程循序漸進》第7章,同樣很形象的介紹了TCP、UDP通信並且有很好的測試用例,相信會很好的提升讀者套接字編程的水平。

PE文件,不論是遊戲還是外掛都是PE文件,無論是開發還是逆向PE文件格式都是核心基礎知識。推薦讀者閱讀《加密解密(第三版)》第10章PE文件格式,此書對PE文件中的輸入表、重定位等都有詳細介紹,方便後續對PE文件加殼和脫殼的學習;而且用一個完整的PE文件分析工具作為實例,相信對讀者PE文件的認識和Windows開發能力都會有提高。

註入,一般情況,外掛展現功能的第一步就是需要將自身完美註入到遊戲進程中。註入的方式有很多,如:消息鉤子、註冊表、dll劫持、遠程線程、APC等等,後續文章會進行詳細介紹。這裏推薦讀者閱讀《Windows核心編程》第19~22章,了解DLL註入的詳細原理。

HOOK,是外掛實現功能的基本手段之一,HOOK的方式也多種多樣,如:IAT HOOK,Inline HOOK,虛表HOOK,SSDT HOOK等。推薦讀者閱讀《Windows編程循序漸進》第19章鉤子部分,學習HOOK的最基本原理,在後續實例文章中可以靈活運用。

Windows安全編程中還有很多技術需要在外掛編寫過程用到,這裏就不一一列舉,有興趣的讀者可以參考(http://bbs.pediy.com/showpost.php?p=514651&postcount=2),了解句柄、模塊加載流程等技術。

到此為止,基本以覆蓋了外掛技術中的大部分內容。但是大部分遊戲都從系統底層做了很多的防護,感興趣的讀者可以深入Windows內核體驗遊戲安全攻防的樂趣。驅動開發入門推薦讀者閱讀《Windows驅動開發技術詳解》,此書比較基礎,能夠讓讀者了解驅動開發測試的基本流程。進階可以閱讀《寒江獨釣——Windows內核安全編程》,裏面包含大量側重安全的驅動實例可以調試學習。若對底層非常感興趣的讀者還想繼續深挖,推薦閱讀《Windows內核情景分析》,基本上從源碼上介紹Windows操作系統,有時間的讀者可以按章序閱讀,若感覺書中內容過多,可以針對前面介紹的安全技術對應的章節閱讀。

2.逆向基礎

有了一定開發基礎後,讓我們來接觸逆向分析技術。大師級的遊戲安全工程師對軟件的逆向分析技術的理解都很深入,據說他們在編寫高級語言代碼的同時,心裏會浮現對應的匯編代碼。

若讀者無法讀懂基本的匯編語言,筆者推薦《匯編語言(第2版)》第2~6章,了解基本的匯編語言指令,在有C語言學習經驗後,相信讀者可以快速掌握匯編的基礎知識。

筆者在開發基礎中說過,大部分遊戲的核心算法都使用C++開發,現在在掌握了C++和匯編後,是否就馬上可以相結合呢?答案是否定的。從C++到匯編的轉換首先就是要掌握C++反匯編的一些基本原理,然後就是讀者的大量逆向實踐了,來積累逆向經驗。推薦讀者閱讀《C++反匯編與逆向分析技術揭秘》第2~13章,此書將C++的基本數據類型、啟動函數、各種C++表達式、流程控制、數組指針、結構體、類、虛函數等在內存中怎樣以匯編形式存在進行了詳細的介紹,相信讀者閱讀後,再經過一定的實踐可以達到看C++心中有匯編或看匯編心中有C++的境界。

動態調試,首先得熟練使用Olldbg和Windbg兩個調試工具。對於Olldbg,首先推薦讀者閱讀《加密解密(第三版)》第2章,了解Olldbg的基本使用方法,深入進階可以參考(http://bbs.pediy.com/showpost.php?p=514664&postcount=2),理解Olldbg一些功能的原理和插件的編寫。對於Windbg,讀者可以參考(http://bbs.pediy.com/showpost.php?p=514666&postcount=4)了解Windbg基本的調試技術。在熟悉了基本的調試工具後,便可以通過大量的調試實踐來積累分析經驗,推薦讀者閱讀《加密解密(第三版)》第5和13章,裏面的每一小節均有一個調試用例,閱讀的同時可以親自調試一下加深印象,最後一節對常用斷點設置技巧也總結的很精辟;13章講解調試過程中基本的脫殼技術,如今外掛和遊戲都加有各種殼,通過閱讀此章了解常見的殼和基本原理很有必要。若讀者覺得調試用例太少,可以參考(http://bbs.pediy.com/showthread.php?t=73634),裏面對脫殼技術、破解技術和軟件保護進行了分類,擁有更多的分析實例滿足讀者的需求。現在的外掛為了生存,基本都會加高強度的殼來保護自身不被遊戲安全工程師或同行競爭者攻破,對這方面有深厚興趣的讀者可以參考(http://bbs.pediy.com/showthread.php?t=66575),這是看雪論壇上的一個殼技術的一個專題,值得仔細研究。

靜態分析,首先得熟練使用IDA靜態分析工具。IDA相對與Olldbg操作復雜一些,推薦讀者閱讀《IDA權威指南》第4~9章,了解使用IDA的基本操作和IDA的特性。在使用IDA分析遊戲時,可能需要很多重復性操作,閱讀《IDA權威指南》第15章掌握基於IDA的腳本編寫是個不錯的選擇。

逆向分析技術具有很強的綜合性和實踐性,掌握這項技術需要耐心和毅力。還有許多特定逆向分析方法不能一一介紹,讀者可以參考(http://bbs.pediy.com/showpost.php?p=514669&postcount=6),了解不同語言對應的分析方法。

至此讀者已經可以掌握調試的基本技術,若有讀者想深入探索基於系統的調試技術,《軟件調試》是一個很好的選擇。由於遊戲本身非常復雜,漏洞是無法避免的,有些外掛就有可能基於遊戲的漏洞,因此,對於想深入研究漏洞的讀者這裏推薦《0day安全 軟件漏洞分析技術(第二版)》,了解漏洞的基本原理和shellcode的編寫方法。

3.遊戲安全基礎

如果只有開發和逆向基礎還不能完全算進入遊戲安全領域,在基本技術之上,讀者還需要對遊戲的黑色產業鏈有一定了解。推薦讀者閱讀《網絡遊戲安全揭密》第1~4章,熟悉整個遊戲生態中存在哪些角色,這些角色之間的關系;有哪些利益點,利益的轉換方式等。

相信在學習了推薦的這些書籍後,讀者不論是對遊戲安全的了解,還是開發逆向的基礎能力都會有不少提升;對後續遊戲安全相關文章的學習會更遊刃有余。

*轉載請註明來自遊戲安全實驗室(GSLAB.QQ.COM)

外掛技術匯總及書籍推薦