前天晚上我跟封包玩了一晚上,因才開始(第一次跟封包)說一下我一晚上的發(fā)現(xiàn)吧
我是直接用wpe截取的,因為金山游戲本身都有截取封包的保護措施(就像mm所說),直接用wpe截取我是截取不到的,后來用ollydbg調(diào)試的時候才截取的到。
經(jīng)過前面的準備,封報的明文準備已經(jīng)ok,準備進行加密,加密方式是取一個4字節(jié)的數(shù)字,對封包進行xor運算,運算完畢后就直接發(fā)送出去,我核對過用wpe截取封包的數(shù)據(jù),和我看到的運算結(jié)果完全一致,這說明只要用那個4字節(jié)的數(shù)字對封包進行反xor運算就可以得到明文的封包。
其實說白了那個4字節(jié)的數(shù)字就是每次加密的密匙,也就是服務(wù)器認可的,這個4字節(jié)怎么得出的我就沒跟了,暫時只發(fā)現(xiàn)只要不更換場景,4字節(jié)密匙不會更變。
相同道理,服務(wù)返回的信息也是經(jīng)過4字節(jié)xor運算處理了的,客戶端解密時候取服務(wù)端4字節(jié)密匙對封包進行解密就可以得到明文封包。
大體說下封神封包加密解密流程
send:
1,制造明文封包
2,取4字節(jié)send密匙
3,用4字節(jié)密匙對封包進行xor運算(保留前2位),最后不足4字節(jié)進行單字節(jié)運算。
4,發(fā)送。
revc:
1,收到封包
2,取4字節(jié)revc密匙
3,用4字節(jié)密匙對封包進行xor運算(保留前2位),最后不足4字節(jié)進行單字節(jié)運算。
4,對明文封包進行分析
--------------------------------------------------------------------------------------------------------------------------------------------------------
以上的方法比較累人!下面說說本地制作吧(既是用大家熟悉的fpe等軟件)
制作輔助外掛(自動加血,自動加藍,免負重等等)
hp的地址是不固定的,我使用金山游俠先找出當前的那個地址,
然后使用softice對該地址設(shè)置斷點,softice應(yīng)該會立刻斷住,
你會看見mov dword ptr ds:[eax+ecx*8+eb4],edi,
在客戶端中,位置是0x4b2c74,
你可以修改游戲的進程,
把mov dword ptr ds:[eax+ecx*8+eb4],
edi改成一個e9 xx xx xx xx 90 90,
jmp到進程中.rsrc和.data之間的空余地址,
把(xx xx xx xx) + 0x4b2c74 + 5處的代碼修改成mov y, edi,
下一條做原來的mov dword ptr ds:[eax+ecx*8+eb4],edi,
再來個e9 zz zz zz zz,
設(shè)置好zz zz zz zz使其再跳到原來dword ptr ds:[eax+ecx*8+eb4],
edi的下一句,就是0x4b2c7b處,
這樣hp的地址就固定下來了,只要看y就知道hp了。
--------------------------------------------------------------------------------------------------------------------------------------------------------
下面說說客服端的破解(小試牛刀?。┯信d趣的朋友可以制作一個dll
來實現(xiàn)加血鎖定血量!
.text:004e8ef0 sub_4e8ef0 proc near 
.text:004e8ef0
.text:004e8ef0 arg_0 = dword ptr 4
.text:004e8ef0 arg_4 = dword ptr 8
.text:004e8ef0 arg_8 = dword ptr 0ch
.text:004e8ef0
.text:004e8ef0 mov ecx, [esp+arg_0] ; 可能是長度len地址
.text:004e8ef4 push ebx
.text:004e8ef5 mov eax, [esp+4+arg_4] ; 緩存地址
.text:004e8ef9 push esi
.text:004e8efa mov esi, ecx
.text:004e8efc push edi
.text:004e8efd mov edi, [esp+0ch+arg_8] ; 加密key地址
.text:004e8f01 and esi, 3 ;相當于緩存長度除以4的余數(shù)
.text:004e8f04 shr ecx, 2 ;相當于緩存長度除以4的商
.text:004e8f07 mov edx, [edi] ;把加密key值放進edx
.text:004e8f09 mov ebx, ecx ;
.text:004e8f0b dec ecx ;
.text:004e8f0c test ebx, ebx ;
.text:004e8f0e jbe short loc_4e8f1e ;判斷跳轉(zhuǎn)
.text:004e8f10 inc ecx ;
.text:004e8f11
.text:004e8f11 loc_4e8f11: 
.text:004e8f11 mov ebx, [eax]
.text:004e8f13 add eax, 4
.text:004e8f16 xor ebx, edx ;異或運算,edx=key的值,核心運算
.text:004e8f18 dec ecx
.text:004e8f19 mov [eax-4], ebx
.text:004e8f1c jnz short loc_4e8f11 ;相當于for循環(huán)運算
.text:004e8f1e
.text:004e8f1e loc_4e8f1e: 
.text:004e8f1e mov ecx, esi
.text:004e8f20 dec esi
.text:004e8f21 test ecx, ecx
.text:004e8f23 jbe short loc_4e8f35
.text:004e8f25 lea ecx, [esi+1]
.text:004e8f28
.text:004e8f28 loc_4e8f28: 
.text:004e8f28 mov bl, [eax] 
.text:004e8f2a xor bl, dl ;異或運算
.text:004e8f2c mov [eax], bl
.text:004e8f2e inc eax
.text:004e8f2f shr edx, 8
.text:004e8f32 dec ecx
.text:004e8f33 jnz short loc_4e8f28;相當于for循環(huán)運算
.text:004e8f35
.text:004e8f35 loc_4e8f35: key付值運算;
.text:004e8f35 mov eax, [edi]
.text:004e8f37 mov edx, eax
.text:004e8f39 shl edx, 5
.text:004e8f3c sub edx, eax
.text:004e8f3e mov eax, 1
.text:004e8f43 add edx, 8088405h
.text:004e8f49 mov [edi], edx key付值
.text:004e8f4b pop edi
.text:004e8f4c pop esi
.text:004e8f4d pop ebx
.text:004e8f4e retn
.text:004e8f4e sub_4e8ef0 endp
--------------------------------------------------------------------------------------------------------------------------------------------------------
國內(nèi)最大的酷站演示中心!