1. 程式人生 > >國服遊戲封包解密-外掛製作全過程

國服遊戲封包解密-外掛製作全過程

[軟體]國服遊戲-路尼亞戰記
[工具]OD,Wep,以及其它的一些文字工具
[目的]研究遊戲保護技術,深論協議級分析。

意在拋磚引玉,抵制遊戲外掛。我會在每個分析點做出一些保護上的思考。

開始正文。

一個多月前,有看過一些遊戲,DNF,路尼亞戰記。他們大概是屬於那種靠操作,連招一張地圖一張地圖那種遊戲。DNF是由騰迅公司代理的,自己做了點不強的小保護,但是還是被別人開發出了外掛。居然還有全屏秒殺怪功能。
從朋友那裡大概瞭解了點遊戲開發的一些設計思路,就伺服器和客戶端而言,有強伺服器弱客戶端,和強客戶端,弱伺服器。之類的分別。

大概dnf這樣的遊戲是屬於強客戶端這樣的遊戲,所以才有可能開發出全屏秒殺。二者主要的區別在於,把主要運算是放在伺服器端,還是放在客戶端。


經過我的分析,像路尼亞戰記這樣的遊戲,是屬於強伺服器的。

前邊所有的東西------我就不說了,開始分析。


首先,註冊個帳號,建立角色,然後登陸游戲。OD--附加遊戲程序。

既然是分析協議,我們就在send處下段。


在開始講解之前,首先要明確以下一些事。第一,我們明確的知道,我們的傳送包是經過加密處理了的。第二,我們要明確,我們要分析的send動作大概是什麼,比如說走一步,又比如說要開啟一個倉庫。

對於第二點,我們採用在send處,下段,然後在很快的反映時間裡,給遊戲一個動作。然後觀察send資料。

這裡我選擇的是開啟武器鋪,我們發現其開啟武器鋪的資料長度是0x0e.



71A24288      90            nop
71A24289      90            nop
71A2428A >    8BFF          mov     edi, edi                         ;  dword ptr [esp+0x0c] == 0x0e
71A2428C   .  55            push    ebp
71A2428D   .  8BEC          mov     ebp, esp
71A2428F   .  83EC 10       sub     esp, 10
71A24292   .  56            push    esi

71A24293   .  57            push    edi
71A24294   .  33FF          xor     edi, edi
71A24296   .  813D 2840A371>cmp     dword ptr [71A34028], 71A29448   ;  入口地址
71A242A0   .  0F84 AD730000 je      71A2B653
71A242A6   >  8D45 F8       lea     eax, dword ptr [ebp-8]
71A242A9   .  50            push    eax


下條件斷點。

然後,當我們開啟武器鋪的時候,程式就會中斷在那裡。

然後,這時候,我們想知道的是,什麼時候,其向send資料包裡,那段記憶體寫入了資料,我們才能回爍跟蹤。

方法很多,我就不一一說了,就針對這個遊戲。談談...

我們多次開啟武器庫,觀察發現,其每次傳送的資料的記憶體地址都是一個。我們根據這個地方下硬體訪問斷點就好了。

-------這裡,要談談遊戲保護技術了。我覺得好點的保護,特別是在send點這裡,send的資料記憶體地址,應該盡力保持活躍,跳動。不能一直固定。好象(分析有段時間了,記憶就忘記了),朱仙這點就做的比較好,在send資料的時候。記憶體點會變。

但是使用alloc和reallloc等函式,又難免會被別人在這些關鍵點的地方下斷點。作為一個破解分析者,首先會考慮的是以最高效的方法做出分析。不會把所有的遊戲程式碼,反彙編讀完。所以一些關鍵點,應該考慮離散性高,偶合性高。高的偶合會讓分析者迷茫,找不到關鍵點。高的離散,會讓分析者解讀不出確實的意義。

接下來繼續。

007332C0    51              push    ecx
007332C1    8B4424 0C       mov     eax, dword ptr [esp+C]
007332C5    85C0            test    eax, eax
007332C7    55              push    ebp
007332C8    8B6C24 0C       mov     ebp, dword ptr [esp+C]
007332CC    57              push    edi
007332CD    8BF9            mov     edi, ecx
007332CF    74 63           je      short 00733334
007332D1    53              push    ebx
007332D2    894424 18       mov     dword ptr [esp+18], eax
007332D6    56              push    esi
007332D7    EB 07           jmp     short 007332E0
007332D9    8DA424 00000000 lea     esp, dword ptr [esp]
007332E0    8A45 00         mov     al, byte ptr [ebp]
007332E3    884424 18       mov     byte ptr [esp+18], al
007332E7    8B47 04         mov     eax, dword ptr [edi+4]
007332EA    8D48 01         lea     ecx, dword ptr [eax+1]
007332ED    894424 10       mov     dword ptr [esp+10], eax
007332F1    04 04           add     al, 4
007332F3    894F 04         mov     dword ptr [edi+4], ecx
007332F6    8D5424 10       lea     edx, dword ptr [esp+10]
007332FA    8AC8            mov     cl, al
007332FC    BE 03000000     mov     esi, 3
00733301    8A42 01         mov     al, byte ptr [edx+1]
00733304    42              inc     edx
00733305    B3 49           mov     bl, 49
00733307    F6EB            imul    bl
00733309    34 15           xor     al, 15
0073330B    02C8            add     cl, al
0073330D    4E              dec     esi
0073330E  ^ 75 F1           jnz     short 00733301
00733310    0FB64424 18     movzx   eax, byte ptr [esp+18]
00733315    0FB6D1          movzx   edx, cl
00733318    8B4F 08         mov     ecx, dword ptr [edi+8]
0073331B    C1E2 08         shl     edx, 8
0073331E    03D0            add     edx, eax
00733320    8A140A          mov     dl, byte ptr [edx+ecx]
00733323    8B4424 1C       mov     eax, dword ptr [esp+1C]
00733327    8855 00         mov     byte ptr [ebp], dl
0073332A    45              inc     ebp                              ; 這裡
0073332B    48              dec     eax
0073332C    894424 1C       mov     dword ptr [esp+1C], eax
00733330  ^ 75 AE           jnz     short 007332E0
00733332    5E              pop     esi
00733333    5B              pop     ebx
00733334    5F              pop     edi
00733335    5D              pop     ebp
00733336    59              pop     ecx
00733337    C2 0800         retn    8


我們在硬體斷點的第二次F9條到這裡。

一般經過N次的觀察之後,我們會發現。這裡其實就是封包的加密函式。

這裡談談經驗之談。通常加密函式,都會和普通函式有所不同。因為從意義上來說,加密函式,主要完成的是資料加密,變換。所以其使用的指令,和其指令的方式會和正常函式有所不同。比如涉及到位操作,byte操作,會比較多。比如md5等,一看就shl什麼指令就是一篇篇。

這裡我們再談談,保護上的一些東西。--我覺得,位的變換,和其它的東西,不能一步寫死到一個函式頭,不然,解密者,就會像我做的一樣。找到加密call,分析加密call引數,然後分析出具體加密函式。然後就可以自己寫封包加密了。

這遊戲這點做的相當之差。

然後一個ctrl+F9,就來到下邊這裡。


00733340    56              push    esi
00733341    8B7424 08       mov     esi, dword ptr [esp+8]
00733345    8B06            mov     eax, dword ptr [esi]
00733347    57              push    edi
00733348    8BF9            mov     edi, ecx
0073334A    8BCE            mov     ecx, esi
0073334C    FF50 04         call    dword ptr [eax+4]                ; 取長度
0073334F    8B16            mov     edx, dword ptr [esi]
00733351    50              push    eax
00733352    8BCE            mov     ecx, esi
00733354    FF52 10         call    dword ptr [edx+10]               ; 取包明問
00733357    50              push    eax
00733358    8BCF            mov     ecx, edi
0073335A    E8 61FFFFFF     call    007332C0                         ; 堆疊結構依次為-封包明問-長度-解碼錶地址
0073335F    8B06            mov     eax, dword ptr [esi]
00733361    8BCE            mov     ecx, esi
00733363    FF50 04         call    dword ptr [eax+4]
00733366    5F              pop     edi
00733367    5E              pop     esi
00733368    C2 0400         retn    4


然後就慢慢分析了哈。

下邊貼出,一個月前,寫的針對這個遊戲的內掛的一些測試程式碼。各位可以配合到看,方便理解。



#include    "InjectDll.h"

//BYTE  nCmd[0x0e]={0x0E,0x00,0xe0,0x55,0x91,0x10,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned long   MyApi = 0;
unsigned long   hookApi = 0;
DWORD     dwWrite = 0;
BYTE      lpResetSend[0x05]={0x8B,0XFF,0X55,0X8B,0XEC};//用於恢復HookSend的5個位元組
HINSTANCE hws2_32 = NULL;//ws2_32控制代碼
HANDLE    my_sendhandle;//儲存用語傳送send的控制代碼


int WINAPI DllMain(HANDLE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
   // MessageBox( NULL, "yes", "yes", MB_OK);

相關推薦

遊戲解密-外掛製作全過程

[軟體]國服遊戲-路尼亞戰記 [工具]OD,Wep,以及其它的一些文字工具 [目的]研究遊戲保護技術,深論協議級分析。 意在拋磚引玉,抵制遊戲外掛。我會在每個分析點做出一些保護上的思考。 開始正文。 一個多月前,有看過一些遊戲,DNF,路尼亞戰記。他

網路遊戲基礎 作者不明

截包工具: http://free.ys168.com/?shoooo    WPRO.rar      MD5: 2E1E8E48FCC78972905E4F40081B608C    IRIS.rar         MD5: 6B919165C60D83

WPE製作遊戲外掛 更改

製作遊戲外掛 更改封包 以上地址本人未測試 可能含有惡意成分 大家下載之後,請先查毒 WPE pro部分功能讓我們來看一下網路遊戲的工作原理:網路遊戲是這樣工作的:1.由伺服器記錄儲存所有使用者資料,所有資訊的修改都是伺服器完成的2.伺服器接受客戶機的請求傳送必要的資訊給客戶機,以使玩家正常遊戲3.伺

網路基礎,執著遊戲外掛教程

要想在修改遊戲中做到百戰百勝,是需要相當豐富的計算機知識的。有很多計算機高手就是從玩遊戲,修改遊戲中,逐步 對計算機產生濃厚的興趣,逐步成長起來的。不要在羨慕別人能夠做到的,因為別人能夠做的你也能夠!我相信你們看了 本教程後,會對遊戲有一個全新的認識,呵呵,因為我是個好老師!

網曝“吃雞”17日上線,關於外掛,這些你都知道嗎?

後來 湖北 height 相對 一位 ots 付費 大於 方法 先來一組思考題:聽舅舅黨說,騰訊《絕地求生》國服會在1月17日上線?如果不免費,你會不會玩?如果沒外拐,你會不會玩?如果免費+道具付費,你會不會玩?如果只收你皮膚的錢,你會不會玩?為什麽“吃雞”官方對外掛認慫?

遊戲外掛製作原理

遊戲外掛開發原理        外掛現在大體上來講分為三種,分別是模擬按鍵,WPE封包和記憶體掛。比如模擬鍵盤的,滑鼠的,這種就叫做按鍵模擬,也叫指令碼精靈;還有修改資料包的,這種就叫做WPE封包外掛,這種外掛相對而言比較穩定,但是對於技術要求難度也比較高

遊戲外掛製作教材

      前言:       做自己喜歡的!------ 明天你來自己做外掛        隨著網路遊戲的日益火爆,很多玩家都投身到遊戲中。目前很多玩家都依賴於一些遊戲的外掛程式來進行遊戲。那麼做一個遊戲的外掛程式是否是一件很困難的事呢?回答是"否",誠然編寫一些程式是需

1 使用WPE工具分析遊戲網路

   WPE工具說明 在大多數的程式設計工具中winsock已經封裝成一個控制元件,成為網路程式設計的控制元件,是非常方便的,利用這個控制元件,程式設計工具就可以編寫外掛工具。 Client/server模式網路遊戲,我們的資訊全在伺服器上面,想從伺服器上修改我們的個人使

1.使用WPE工具分析遊戲網路

 WPE工具說明 在大多數的程式設計工具中winsock已經封裝成一個控制元件,成為網路程式設計的控制元件,是非常方便的,利用這個控制元件,程式設計工具就可以編寫外掛工具。 Client/server模式網路遊戲,我們的資訊全在伺服器上面,想從伺服器上修改我們的個人使用者

網路遊戲協議需注意點

對於強客戶端的遊戲,就有很大可能出現離線掛,因為一切客戶端的計算、處理邏輯都不需要進行,只需要將最理想的作弊資料包直接發給伺服器,就能達到遊戲收益最大化。 下面這幾點是需要多加註意的點。 1.send函式 根據send呼叫的buffer,進行回溯,找到加密函式。對於send

簡單遊戲外掛製作教程

在幾年前我看到別人玩網路遊戲用上了外掛,做為程式設計師的我心裡實在是不爽,想搞清楚這到底是怎麼回事。就拿了一些來研究,小有心得,拿出來與大家共享,外掛無非就是分幾種罷了(依製作難度):  1、動作式,所謂動作式,就是指用API發命令給視窗或API控制滑鼠、鍵盤等,使遊戲裡的

SOCKET 和拆

資源 isl 個數 遊戲服務器 指正 長度 num 部分 程序開發 對於基於TCP開發的通訊程序,有個很重要的問題需要解決,就是封包和拆包.自從我從事網絡通訊編程工作以來(大概有三年的時間了),我一直在思索和改進封包和拆包的方法.下面就針對這個問題談談我的想法,拋磚引玉.若

c++實現對windwos 下socket 的封裝(實現及拆處理)

nth word temp add ips object invalid protected 數據 SuperSocket.h #pragma once #include<string> #include<iostream> #include &

Wolf RPG Editor遊戲

.exe 代碼 高亮 list 內容 order exe sha 改名 筆記地址(擁有代碼高亮,同時可以下載附件)http://ccdd6ec5.wiz03.com/share/s/3cTmX51TMQ-b2QTact03UPg81-T8i-379Qru2xkkfp1q7Q

Linux雲計算-完美解決Linux源代碼失敗問題

linux rpm 選項未知 解決Linux源代碼封包--host選項未知問題:錯誤信息:[[email protected] SPECS]# rpmbuild -ba ./nginx.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.

【華為】華為模擬器 huawei ensp 靜態動態NAT ICMP   wireshark抓驗證telnet明文傳輸密碼

【華為】華為模擬器huawei ensp 靜態動態nat icmp 封包   wireshark抓包驗證telnet明文傳輸密碼詳細實踐過程,請見下方附件!本文出自 “我的Linux之夢” 博客,請務必保留此出處http://12098022.blog.51cto.com/12088022/198

bzoj 1025[SCOI2009]遊戲 - 背dp

algorithm hide pen 長度 學會 read iostream nbsp const 1025: [SCOI2009]遊戲 Time Limit: 1 Sec Memory Limit: 162 MB Description   windy學會了一種遊戲

asp.net core中遇到需要自定義數據解密方法的時候

聲明 AD AR 但是 sof AC asp 參數聲明 request 最近將公司的項目用.netcore重寫, 服務的http外部接口部分收發消息是DES加解密的, 那麽在asp.net core mvc的action處理之前需要加入解密這個步驟. 我第一想到的是用f

西安傳奇1.76復古私遊戲高防服務器

範範 發 高防服務器租用&托管聯系 QQ:2880990298TEL:19906909062 其實,我們如今回過頭來瀏覽QQ西遊一條龍服務器曬的產品,總是能整理緊接著的多少點:、曬自拍,自拍主是具有臉非常好啊,腰身次這類東西來體現自己具體比較好的出租房。 、曬優越感,主如逛了單個雄壯上

一款成功的全球遊戲該如何進行架構選型與設計?

建議 滿足 異步 family tom 擁塞 支持 印度 特點 全球服遊戲如今正在成為出海遊戲的主要考慮模式,跨國對戰、全球通服打破國界的限制,將不同地區不同語言的玩家放在一起合作/競技,成功吸引了大量玩家的關註,並逐漸成為主流的遊戲玩法。遊戲廠商們也在嘗試采用一地部署多地