逆向分析,計算機世界中的九陰真經

逆向工程

你玩游戲么?單機游戲,你是否使用過游戲補丁、修改器?

逆向工程,又稱逆向技術,是一種產品設計技術再現過程,即對一項目標產品進行逆向分析及研究,從而演繹并得出該產品的處理流程、組織結構、功能特性及技術規格等設計要素,以制作出功能相近,但又不完全一樣的產品。逆向工程源于商業及軍事領域中的硬件分析。其主要目的是在不能輕易獲得必要的生產信息的情況下,直接從成品分析,推導出產品的設計原理。

而軟件逆向工程,隨著計算機技術在各個領域的廣泛應用,特別是軟件開發技術的迅猛發展,基于某個軟件,以反匯編閱讀源碼的方式去推斷其數據結構、體系結構和程序設計信息成為軟件逆向工程技術關注的主要對象。軟件逆向技術的目的是用來研究和學習先進的技術,特別是當手里沒有合適的文檔資料,而你又很需要實現某個軟件的功能的時候。也正因為這樣,很多軟件為了壟斷技術,在軟件安裝之前,要求用戶同意不去逆向研究。

而,這是重點:逆向工程的實施過程是多領域、多學科的協同過程。

我們拿它來講解

首先,我聲明一點,本文一切僅為技術探討,并不包含任何攻擊性、負面性侵犯。我酷愛俄羅斯方塊,而其中火拼俄羅斯更為火爆。記得當年不日不夜的練習俄羅斯方塊,試圖在3V3競技中一展宏圖。卻沒有料到高手甚多,秒我乃拈花摘葉,隨手即來。

此刻,如何是好?

假如,我有一個,傳說中的神兵,是不是可以逆轉這樣狼狽的局面呢?嗯,有趣,甚是有趣。那么,我們就開始造兵器——打造一款,傳說中火拼俄羅斯方塊輔助如何?

首先,要打造一個輔助,你必須介入程序,怎么介入?

遠程注入DLL!

DLL的遠程注入技術是目前Win32病毒廣泛使用的一種技術。使用這種技術的病毒體通常位于一個DLL中,在系統啟動的時候,一個EXE程序會將這個DLL加載至某些系統進程(如Explorer.exe)中運行。

這樣一來,普通的進程管理器就很難發現這種病毒了,而且即使發現了也很難清除,因為只要病毒寄生的進程不終止運行,那么這個DLL就不會在內存中卸載。

用戶也就無法在資源管理器中刪除這個DLL文件,真可謂一箭雙雕哉。記得2003年QQ尾巴病毒肆虐的時候,就已經有些尾巴病毒的變種在使用這種技術了。你需要了解以下幾個API函數:

OpenProcess - 用于打開要寄生的目標進程。

VirtualAllocEx/VirtualFreeEx - 用于在目標進程中分配/釋放內存空間。

WriteProcessMemory - 用于在目標進程中寫入要加載的DLL名稱。

CreateRemoteThread - 遠程加載DLL的核心內容,用于控制目標進程調用API函數。

LoadLibrary - 目標進程通過調用此函數來加載病毒DLL。

在此我只給出了簡要的函數說明,關于函數的詳細功能和介紹請參閱MSDN。還有,至于代碼,本文不貼代碼,只講技術,有興趣可以自行谷歌。

如此以來,就可以將自己寫的DLL,注入到火拼俄羅斯方塊這個程序里,并且讓他運行起來。

DLL里實現什么?

DLL里需要實現的就是一套基于人工智能的玩火拼俄羅斯的機器人。我們假設已經有一款超高智能的LIB已經被我們引入。那么,DLL還需要就是實現模擬控制的一些方法。還需要什么?還需要當前方塊的樣子,下一個方塊的樣子,當前自己擺放的樣子,甚至還可能需要知道對手擺放的樣子,自己獲得了哪些道具。

這些數據,怎么來?

圖像識別,將當前窗口截圖,然后開始根據X Y的坐標進行分析,通過圖像識別的方法,獲得當前方塊樣子,自己擺放的樣子,對手的樣子。

這樣做好么?

這是比較直觀的方案,但是每次都要掃描,進行圖像比較,然后獲得數據,你會直觀的覺得,那會快么?效率高么?假定有了這些數據,你還要做什么?當然就是操作了,移動方塊,變形方塊,下落方塊和使用道具了。這又如何做呢?簡單,模擬鼠標鍵盤按鍵,然后操作就好了。聽起來,這一套,似乎是不錯的方案,不是么?

NO,這樣做出來,頂多算一個兵器,要稱之為神兵,估計還是有一點點距離的!那么,神兵的話,我們該如何打造?

分析內存,從內從中找到當前方塊,自己擺放的樣子,對手的樣子。分析程序,獲得開發者實現操作函數,并且調用這些函數。于是?聽起來很深奧的樣子,能辦到么?

逆向工具

在這里,我只為大家普及工具,就不一一演示,我只做簡單的介紹和說明。

靜態分析工具 IDA,交互式反匯編器專業版(Interactive Disassembler Professional),人們常稱其為IDA Pro,或簡稱為IDA,是總部位于比利時列日市(Liège)的Hex-Rayd公司的一款產品。開發IDA的是一位編程天才,名叫Ilfak Guilfanov。十年前誕生時,IDA還是一個基于控制臺的MS-DOS應用程序,這一點很重要,因為它有助于我們理解IDA用戶界面的本質。除其他內容外,IDA的非Windows和非GUI版本仍然繼續采用源于最初DOS版本的控制臺形式的界面。

動態調試工具有OD(OllyDBG)和windbg。 調試應用層程序兩個調試器都可以,OD因為主要面向逆向,窗口布局更為合理直觀且插件眾多,所以一般情況下都首選OD,windbg沒那么方便,大部分操作通過命令來進行,但它也有它的優勢,各種命令(內置命令、元命令和擴展命令)提供了強大的控制和分析能力,所以windbg有時也會用到。如果要調試內核程序或模塊那OD就無能為力了,windbg可以說是唯一的選擇,以前還有個 softice,但 softice已經停止更新和支持,現在已經沒什么了用了。

偵殼工具 PEid,但實際結果還是工具加上自己的分析。脫殼,盡量手動。二進制編輯工具UltraEdit、Hex Workshop以及WinHex,比較工具 Beyond Compare。網絡包抓包分析工具Wireshark和Iris。文件和注冊表監視工具Process Monitor。最后,虛擬機,VM不二。

開始逆向

有了工具,我們就可以開始對火拼俄羅斯進行逆向分析了,逆向是一個復雜而繁瑣的過程。會經歷無數的嘗試,代碼分析,邏輯分析。如果是分析游戲,如果您是游戲開發者,或許思路更為廣泛,可以明白一些開發者的正常思維。

那么,這個游戲,我們入手點在那?

用OD附加俄羅斯方塊,找到一個關鍵點,這個關鍵點就是,游戲初始化。

從正常的開發角度來想,在初始化的時候,一般都會清空數據。無論是從網絡還是本地,都會分配方塊的樣式。然后從這里入手,我就很快的找到了幾個內存地址。從這些地址中,可以得到當前方塊的樣式,并且可以預知下一個方塊的樣式,并且得到了當前擺放的游戲池中的樣式。然后,緊接著,就找尋控制移動的地方。很快,就從按鍵得到一些信息,找到了。

其中,所有下落后的方塊,我們可以在OD中看到他的內存樣式,其中表示紅色的,就是被改變的數據。什么數據被改變呢?就是確定下落后的方塊,數字代表了方塊的顏色,也可以說是方塊的樣式。內存中的分布如圖可見。

然后,通過注入DLL到進程,做出了一個插件。圖片中演示了插件工作的樣式。

其中,已經預知了下幾個方塊的樣式,并且得到了游戲棋盤的數據,AUTO就是自動開始游戲。測試了效果還不錯。

結束了嗎?

其實逆向的還有很多很多高深的奧秘。我也只是一個初級者。現在大多數的程序,都加入了一些反調。并且為自己的程序加入了一些殼。簡單說說,世界比較知名的高強度殼就是VMProtect,Themida ,SE(Safengine)等等。其中,TW(Themida Winlicense)當時搞得我頭大,他的反調很是有趣。而,對于游戲來說,很多游戲都加入了驅動級的保護,比如騰訊的TP(TenProtect),韓國公司的HS(HackShield),還有NEXON的NGS(Nexon Game Security) ,完美的PP等等等。

現在安全越來越被大家重視,而公司安全逆向組一般都會做一些病毒樣本分析,也會做一些公司產品的防護。而這是一個博大精深的世界,里面非常的有趣,也富有挑戰。所以,一文的簡單介紹,希望能把你吸引進入,這個神奇的界域。

本文作者:Garfield(點融黑幫),現任職于點融技術部Social團隊,游戲引擎 tyo Engine 及 tyo Engine Revolution作者,對尖端渲染技術擁有濃厚興趣,曾就職于多家游戲大廠參與游戲引擎研發相關工作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,665評論 25 708
  • I have been single for a long time,but I am little hesita...
    Roc_Fan閱讀 683評論 0 1
  • 在逛超市旁邊沒人時,你能對出現在你面前從魚族箱里剛蹦出來不久的在地上奄奄一息的大魚熟視無睹嗎?我不能。所以雙手慢慢...
    洛桑爾靜閱讀 109評論 0 2