2021年2月17日 星期三

劍靈(Blade & Soul) - 商用殼介紹(nProtect、WinLicense、Themida)

現今的線上遊戲(MMORPG)為了抵擋駭客來逆向分析遊戲的主程式,會利用商用殼(Packer)來保護遊戲的主程式,因為直接購買商用殼就不需花費大量的時間和人力去開發加殼軟體,所以就能專注在遊戲的開發。也許有人認為商用殼會被駭客破解,因此並不是特別安全,不過商用殼也有强弱之分,所以只要將無法破解商用殼的駭客抵擋在外就能達到此目的。


劍靈這款線上遊戲,使用三種不同的商用殼(nProtect、WinLicense、Themida)來保護遊戲的主程式,接下來我們就會介紹這些商用殼的特性。

一、nProtect

nProtect是一款韓國公司所開發的商用殼(Packer),主要是應用在遊戲軟體之上,為了防止遊戲外掛的開發所使用的,它的技術分為32 bit和64 bit,如果在32 bit平台上會利用Hooking NtOpenProcess、NtReadVirtualMemory、NtWriteVirtualMemory等等的Kernel API來偵測遊戲程式的記憶體是否被竄改和檢測是否有被Debugger工具加載以及是否被DLL Injection,因為主要涉及Kernel層,因此在解殼的過程,增加一些困難度,另外如果在64 bit平台上,就不能對Kernel層下手,因為Win 7以上的x64版本都有PatchGuard來保護Kernel的記憶體,防止被任何程式來竄改記憶體,所以nProtect只能從Application層來Anti-Debugger。



劍靈在載入遊戲前,會將nProtect加載進來,此時有任何的Debugger工具在Debug遊戲的Process,那麼nProtect就會偵測到有人在分析程式碼,因此會讓遊戲程式自動結束,這樣一來,駭客就很難知道它是用什麼手法來偵測Debugger工具。



通常在研究一款商用殼(Packer),我都會去它的官方網站查看它的防護功能有哪些,一方面能有效率的猜測它是透過哪些技術來做防禦的,這樣也比較容易繞過這些防護技術。

我們從官方網站找出的功能表,其中主要還是透過加密殼和動態偵測Debugger工具,還有一些針對Hooking DirectX 3D API 檢測,因此如果當前要分析遊戲的主程式,其實只要繞過動態偵測Debugger工具(x64dbg、ollydbg、windbg)的防護功能即可。





二、WinLicense

WinLicense是一款結合Themida的強勁商用殼,包含了大多數防護之技巧,使得駭客要分析遊戲的主程式會顯得非常吃力。



我們從官方網站獲取的防護功能,雖然功能非常多,主要還是融合壓縮殼、加密殼、VMProtect、Anti-Debugger之技術,其中比較特別的是,他還會針對Anti-Anti-Debugger的防護,因為有些Debugger工具會讓Anti-Debugger失效(x64dbg scyllahide),所以就有加強這方面的技術。



WinLicense和nProtect比較不同的是,它並不會動態偵測Anti-Debugger,不過遊戲只要一開始有載入Debugger,還是會偵測到它,並且跳出一些錯誤訊息,然後結束程式。



三、Themida

Themida主要是透過Obfuscator-LLVM之技術來防範駭客能輕鬆的分析程式碼,它會將原本的程式碼變得非常之複雜,使得大多數的駭客驚慌失措,並且放棄分析程式碼。



從Themida的官方網站上獲取它的防護功能,因為它是從很久以前就被開發的商用加殼工具,所以隨著時代的演變,它也附著了非常多的防護功能,因此跟WinLicense也有點相像。



Obfuscator-LLVM主要之技術就是讓原本的程式碼變的非常複雜,使得駭客分析程式碼的過程變得非常困難,其中它會將原本的運算值和調用API的參數分開計算,並且每個運算區段會用無數個無意義的迴圈來增加分析的困難度,在跳入其它的運算區段會使用jmp語法來防止駭客觀察Stack,因為call語法會將調用位址紀錄到Stack,所以如果不用call語法,就不能輕易的突破關鍵程式碼。