电竞比分网-中国电竞赛事及体育赛事平台

分享

淺談游戲外掛——外掛篇2(完美封包淺談) - 心動--完美空間 - yifeigzs - ...

 魔之兵 2011-04-12
淺談游戲外掛——外掛篇2(完美封包淺談) 
 

   其次我在這里申明幾點(diǎn):其一本文的很多內(nèi)容來源于互聯(lián)網(wǎng),因此感謝他們的無私支持。其二,我個(gè)人是外掛反對者,我不希望我的文章被用于不正當(dāng)?shù)男袠I(yè),我僅僅希望這文章可以對防堵外掛做一些貢獻(xiàn)。其三,很重要,希望大家看看而已,其實(shí)并沒有什么深奧的都是很簡單的知識,希望大家不要想入非非去做一些不該做的事情。最后一句:游戲無限,時(shí)光有限,朋友無價(jià),游戲虛擬,希望大家可以珍惜現(xiàn)實(shí)生活,分清虛擬與現(xiàn)實(shí)。
 
1、網(wǎng)絡(luò)游戲分類:
一、封包濾鏡類:
凡是網(wǎng)游,都會通過封包向服務(wù)器(可以認(rèn)為封包就是上網(wǎng)數(shù)據(jù)流)發(fā)送和接收數(shù)據(jù),如買東西、移動、打怪等,而這些封包,不一定都加密,即使加密了,也不會很復(fù)雜。因?yàn)榫W(wǎng)游是耗費(fèi)帶寬太大的東西,如果加密解密過程復(fù)雜了。數(shù)據(jù)量會變大,服務(wù)器處理的數(shù)據(jù)會變多,從而游戲就會變卡。故,封包只要有足夠的耐心和經(jīng)驗(yàn),是完全可以解密的,從而就可以發(fā)送虛假的數(shù)據(jù),欺騙服務(wù)器達(dá)到刷錢、或自動打怪、或攻擊暴增等等不法目的。

二、游戲客戶端脫殼
這個(gè)比較復(fù)雜點(diǎn),也就是把游戲的客戶端進(jìn)行脫殼(也就是讓游戲原代碼能夠看到),分析里面的數(shù)據(jù),從而避免某些不利的分支執(zhí)行。在游戲里的表現(xiàn)就可以達(dá)到例如:無敵(攔截死亡分支程序的執(zhí)行)??植腊珊迷凇_@種高手極為稀少,即使有也不屑于做破壞游戲這種低級的事。大家還是安全的,呵呵。

三、動作模擬類
這種就非常大眾化了,我也是看到了官方的日志,才接觸到的按鍵精靈,呵呵。在我看來,這是一種集成了某種開發(fā)軟件對計(jì)算機(jī)外設(shè)硬件操作代碼。并把對用戶有用的部分簡單化的工具,也支持簡單的編程。這類工具,不可能做成變態(tài)的外掛,但是可以避免很多的手工重復(fù)操作。封不封個(gè)人認(rèn)為無所謂。像這個(gè)游戲就提供了搜尋目標(biāo)的圖標(biāo),對不變態(tài)的這類工具,好像官方留有一定余地。

四、還有其它的很多外掛:
極少見,最狂的一類,呵呵。攻擊服務(wù)器。修改數(shù)據(jù)。這是官方與駭客的對戰(zhàn)。偶怕怕,精神上支持官方。:)
 
2、完美世界加密封包代碼:
10002FBE    55              push ebp
10002FBF    8BEC            mov ebp,esp
10002FC1    53              push ebx
10002FC2    56              push esi
10002FC3    57              push edi
10002FC4    8B4D 08         mov ecx,dword ptr ss:[ebp+8]
10002FC7    8B55 0C         mov edx,dword ptr ss:[ebp+C]
10002FCA    837D 10 00      cmp dword ptr ss:[ebp+10],0
10002FCE    76 6B           jbe short 1000303B
10002FD0    8A99 00010000   mov bl,byte ptr ds:[ecx+100]
10002FD6    FEC3            inc bl
10002FD8    8899 00010000   mov byte ptr ds:[ecx+100],bl
10002FDE    81E3 FF000000   and ebx,0FF
10002FE4    8A040B          mov al,byte ptr ds:[ebx+ecx]
10002FE7    8D340B          lea esi,dword ptr ds:[ebx+ecx]
10002FEA    8A99 01010000   mov bl,byte ptr ds:[ecx+101]
10002FF0    02D8            add bl,al
10002FF2    8899 01010000   mov byte ptr ds:[ecx+101],bl
10002FF8    81E3 FF000000   and ebx,0FF
10002FFE    8A040B          mov al,byte ptr ds:[ebx+ecx]
10003001    8D3C0B          lea edi,dword ptr ds:[ebx+ecx]
10003004    8A1E            mov bl,byte ptr ds:[esi]
10003006    8806            mov byte ptr ds:[esi],al
10003008    33C0            xor eax,eax
1000300A    881F            mov byte ptr ds:[edi],bl
1000300C    8A81 01010000   mov al,byte ptr ds:[ecx+101]
10003012    33DB            xor ebx,ebx
10003014    8A99 00010000   mov bl,byte ptr ds:[ecx+100]
1000301A    8A0408          mov al,byte ptr ds:[eax+ecx]
1000301D    02040B          add al,byte ptr ds:[ebx+ecx]
10003020    8A1A            mov bl,byte ptr ds:[edx]
10003022    25 FF000000     and eax,0FF
10003027    8A0408          mov al,byte ptr ds:[eax+ecx]
1000302A    32D8            xor bl,al
1000302C    8B45 10         mov eax,dword ptr ss:[ebp+10]
1000302F    881A            mov byte ptr ds:[edx],bl
10003031    42              inc edx
10003032    8BDA            mov ebx,edx
10003034    2B5D 0C         sub ebx,dword ptr ss:[ebp+C]
10003037    3BD8            cmp ebx,eax                  
10003039  ^ 72 95           jb short 10002FD0
1000303B    5F              pop edi
1000303C    5E              pop esi
1000303D    5B              pop ebx
1000303E    C9              leave
1000303F    C2 0C00         retn 0C
 
    需要說明的幾點(diǎn):本程序是用匯編語言編寫,應(yīng)該很多大學(xué)相關(guān)專業(yè)都有涉及這門語言,在這里就不做過多的解釋了,其次在程序中EAX為總字符,EBX為已經(jīng)加密了多少。
arg4:[ebp+8]//加密碼表,長度0x100[0..$FF], 100,101存放臨時(shí)結(jié)果
arg8:[ebp+C]]//Buffer,要加密的數(shù)據(jù);每次加密一個(gè)字節(jié),簡單的xor,add,和碼表運(yùn)算
argc:[ebp+10]//BufferSize,加密的數(shù)據(jù)字節(jié)數(shù)
將以上語句翻譯為高級語言的可以用以下語句表示:
typedef struct {
unsigned char table[256];
unsigned char a;
unsigned char b;
} arg1;
void encrypt(arg1* handle, unsigned char *data, int len)
{
register unsigned char *ptr = data;
register unsigned char m;
if( len <= 0 ) return;
do {
handle->a++;
m = handle->table[handle->a];
handle->b += m;
handle->table[handle->a] = handle->table[handle->b];
handle->table[handle->b] = m;
*(ptr) = handle->table[*(ptr)] ^ handle->table[m+handle->table[handle->a]];
ptr++;
} while(ptr-data<len);
}

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多