題:
遊戲數據包加密功能的逆向工程
Renan Moura
2015-05-05 05:48:59 UTC
view on stackexchange narkive permalink

我正在嘗試為特定的MMORPG(完美世界)製作遊戲服務器模擬器。我知道遊戲網絡的工作原理以及某些數據包的結構,但是除了登錄數據包中的用戶名以外,所有數據包都是經過加密的。

我正在使用Olly嘗試查找crypt函數用於從客戶端發送到服務器的數據包,以了解遊戲如何加密數據,我需要幫助來找到crypt函數。我在調試過程中拍攝了Olly的一些屏幕截圖,並評論了我在代碼中分析的內容。

這是在我發現要發送的呼叫之前,在遊戲中發送聊天消息時看到的內容:

b

現在,那是我找到調用send的函數以及該函數每一行的轉儲,直到send調用:

c

對於其他行,我有更多轉儲的屏幕截圖,但是我不敢每次發布兩個以上的鏈接,因此如果有人需要,我會在以後發布其他人。

我的問題是,crypt函數在哪裡?以及它如何在C ++之類的語言中工作?

一 回答:
Dominik Antal
2015-05-05 16:11:02 UTC
view on stackexchange narkive permalink

首先,我將對應用程序進行一些靜態分析,例如 Findcrypt ProtectID PEID的 Kanal插件,以掃描使用的已知靜態值在各種加密算法中。如果找到了某些內容,請檢查哪個函數通過交叉引用(IDA中的X,olly中的CTRL + r)訪問它們,您將使用加密函數,或者至少要靠近它們。

如果如果該方法失敗,則可以開始在動態調試器(例如olly)中進行跟踪。您找到了send函數,就可以開始在調用堆棧上進行追溯。選擇堆棧的頂部,然後在反彙編程序中單擊“跟隨”,這將使您進入調用send函數的函數。在該函數的頂部放置一個斷點。重複多次,返回調用樹,觀察調用該函數的變量,直到看到要加密的數據為止。

在第二張圖片中,顯示了調用send( )和加密的數據。您應該返回更多級別以接近加密方法。

搜索二進製文件中的相關字符串(IDA中的Shift + F12),例如:“ key”,“ crypt”,“ password”,

您還可以在已知的數據上放置一個硬件斷點,並在某個位置檢查它的安全性。

還要確認該應用程序是否使用了靜態密鑰,您可以使用另一台計算機上的其他帳戶為遊戲設置新的環境,並查看加密後的數據是否被加密為與圖片中相同的字節1.如果相同,則加密使用靜態密鑰。

此外,在ragezone和elitepvpers上也有關於此遊戲的一些帖子,如果其他所有失敗,它們可能會為您提供幫助:) >

感謝您的幫助,但是findcript什麼也沒找到。我選擇了調用send的函數的頂部,並在該頂部放置了一個斷點,但無法再次使用。我找到東西的唯一方法是,在要加密的數據上設置內存/硬件斷點時,我要去一段代碼,看起來像是一個循環函數,減去了聊天消息,例如“ hello”,“ ello”,“ llo”等,但是我找不到該函數代碼上的任何邏輯
您嘗試了所有檢測工具還是僅使用findcrypt?他們絕對沒有檢測到任何東西,但是仍然有一些東西。 “但又不能正常工作”是什麼意思?當您看到循環時,可能是將數據複製到另一個緩衝區,您應該觀察將數據複製到的位置,並在其上放置硬件斷點。稍後可能會用於加密。請盡可能詳細地編輯您的進度問題。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...