vb 從零開始(十)

vb 從零開始(十)

前天晚上我跟封包玩了一晚上,因才開始(第一次跟封包)說一下我一晚上的發現吧

我是直接用wpe截取的,因為金山遊戲本身都有截取封包的保護措施(就像mm所說),直接用wpe截取我是截取不到的,後來用ollydbg調試的時候才截取的到。

經過前面的準備,封報的明文準備已經ok,準備進行加密,加密方式是取一個4位元組的數字,對封包進行xor運算,運算完畢后就直接發送出去,我核對過用wpe截取封包的數據,和我看到的運算結果完全一致,這說明只要用那個4位元組的數字對封包進行反xor運算就可以得到明文的封包。

其實說白了那個4位元組的數字就是每次加密的密匙,也就是伺服器認可的,這個4位元組怎麼得出的我就沒跟了,暫時只發現只要不更換場景,4位元組密匙不會更變。

相同道理,服務返回的信息也是經過4位元組xor運算處理了的,客戶端解密時候取服務端4位元組密匙對封包進行解密就可以得到明文封包。

大體說下封神封包加密解密流程

send:

1,製造明文封包

2,取4位元組send密匙

3,用4位元組密匙對封包進行xor運算(保留前2位),最後不足4位元組進行單位元組運算。

4,發送。

revc:

1,收到封包

2,取4位元組revc密匙

3,用4位元組密匙對封包進行xor運算(保留前2位),最後不足4位元組進行單位元組運算。

4,對明文封包進行分析

--------------------------------------------------------------------------------------------------------------------------------------------------------

以上的方法比較累人!下面說說本地製作吧(既是用大家熟悉的fpe等軟體)

製作輔助外掛(自動加血,自動加藍,免負重等等)

hp的地址是不固定的,我使用金山遊俠先找出當前的那個地址,

然後使用softice對該地址設置斷點,softice應該會立刻斷住,

你會看見movdwordptrds:[eax+ecx*8+eb4],edi,

在客戶端中,位置是0x4b2c74,

你可以修改遊戲的進程,

把movdwordptrds:[eax+ecx*8+eb4],

edi改成一個e9xxxx90,

jmp到進程中.rsrc和.data之間的空餘地址,

把(xxxxxx)+0x4b2c74+5處的代碼修改成movy,edi,

下一條做原來的movdwordptrds:[eax+ecx*8+eb4],edi,

再來個e9zzzz,

設置好zzzzzz使其再跳到原來dwordptrds:[eax+ecx*8+eb4],

edi的下一句,就是0x4b2c7b處,

這樣hp的地址就固定下來了,只要看y就知道hp了。

--------------------------------------------------------------------------------------------------------------------------------------------------------

下面說說客服端的破解(小試牛刀!)有興趣的朋友可以製作一個dll

來實現加血鎖定血量!

.text:004e8ef0sub_4e8ef0probxwx.org:bxwx.org:004e8ef0arg_0=dwordptr4

.text:004e8ef0arg_4=dwordptr8

.text:004e8ef0arg_8=dwordptbxwx.org:bxwx.org:004e8ef0movecx,[esp+arg_0];可能是長度len地址

.text:004e8ef4pusbxwx.org:004e8ef5moveax,[esp+4+arg_4];緩存地址

.text:004e8ef9pusbxwx.org:004e8efamovesi,ecx

.text:004e8efcpusbxwx.org:004e8efdmovedi,[esp+0ch+arg_8];加密key地址

.text:004e8f01andesi,3;相當於緩存長度除以4的餘數

.text:004e8f04shrecx,2;相當於緩存長度除以4的商

.text:004e8f07movedx,[edi];把加密key值放進edx

.text:004e8f09movebx,ecx;

.text:004e8f0bdececx;

.text:004e8f0ctestebx,ebx;

.text:004e8f0ejbeshortloc_4e8f1e;判斷跳轉

.text:004e8f10incecx;

.text:bxwx.org:004e8f11loc_4e8f11:

.text:004e8f11movebx,[eax]

.text:004e8f13addeax,4

.text:004e8f16xorebx,edx;異或運算,edx=key的值,核心運算

.text:004e8f18debxwx.org:004e8f19mov[eax-4],ebx

.text:004e8f1cjnzshortloc_4e8f11;相當於for循環運算

.text:bxwx.org:004e8f1eloc_4e8f1e:

.text:004e8f1emovecx,esi

.text:004e8f20debxwx.org:004e8f21testecx,ecx

.text:004e8f23jbeshortloc_bxwx.org:004e8f25leaecx,[esi+1]

.text:bxwx.org:004e8f28loc_4e8f28:

.text:004e8f28movbl,[eax]

.text:004e8f2axorbl,;異或運算

.text:004e8f2cmov[eax],

.text:004e8f2einbxwx.org:004e8f2fshredx,8

.text:004e8f32debxwx.org:004e8f33jnzshortloc_4e8f28;相當於for循環運算

.text:bxwx.org:004e8f35loc_4e8f35:key付值運算;

.text:004e8f35moveax,[edi]

.text:004e8f37movedx,eax

.text:004e8f39shledx,5

.text:004e8f3csubedx,eax

.text:004e8f3emoveax,1

.text:004e8f43addedx,bxwx.org:004e8f49mov[edi],edxkey付值

.text:004e8f4bpobxwx.org:004e8f4cpobxwx.org:004e8f4dpobxwx.org:004e8f4bxwx.org:004e8f4esub_4e8ef0endp

--------------------------------------------------------------------------------------------------------------------------------------------------------

上一章書籍頁下一章

super紅客

···
加入書架
上一章
首頁 都市青春 super紅客
上一章下一章

vb 從零開始(十)

%