程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB從零開始編外掛(十)

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改成一個E9XXXXXXXX9090,
  JMP到進程中.rsrc和.data之間的空余地址,
  把(XXXXXXXX) 0x4B2C74 5處的代碼修改成MOVY,EDI,
  下一條做原來的MOVDWORDPTRDS:[EAX ECX*8 EB4],EDI,
  再來個E9ZZZZZZZZ,
  設置好ZZZZZZZZ使其再跳到原來DWORDPTRDS:[EAX ECX*8 EB4],
  EDI的下一句,就是0x4B2C7B處,
  這樣HP的地址就固定下來了,只要看Y就知道HP了。
  

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


  
  下面說說客服端的破解(小試牛刀!)有興趣的朋友可以制作一個DLL
  來實現加血鎖定血量!
  .text:004E8EF0sub_4E8EF0procnear
  .text:004E8EF0
  .text:004E8EF0arg_0=dwordptr4
  .text:004E8EF0arg_4=dwordptr8
  .text:004E8EF0arg_8=dwordptr0Ch
  .text:004E8EF0
  .text:004E8EF0movecx,[esp arg_0];可能是長度LEN地址
  .text:004E8EF4pushebx
  .text:004E8EF5moveax,[esp 4 arg_4];緩存地址
  .text:004E8EF9pushesi
  .text:004E8EFAmovesi,ecx
  .text:004E8EFCpushedi
  .text: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:004E8F11
  .text:004E8F11loc_4E8F11:
  .text:004E8F11movebx,[eax]
  .text:004E8F13addeax,4
  .text:004E8F16xorebx,edx;異或運算,EDX=KEY的值,核心運算
  .text:004E8F18dececx
  .text:004E8F19mov[eax-4],ebx
  .text:004E8F1Cjnzshortloc_4E8F11;相當於FOR循環運算
  .text:004E8F1E
  .text:004E8F1Eloc_4E8F1E:
  .text:004E8F1Emovecx,esi
  .text:004E8F20decesi
  .text:004E8F21testecx,ecx
  .text:004E8F23jbeshortloc_4E8F35
  .text:004E8F25leaecx,[esi 1]
  .text:004E8F28
  .text:004E8F28loc_4E8F28:
  .text:004E8F28movbl,[eax]
  .text:004E8F2Axorbl,dl;異或運算
  .text:004E8F2Cmov[eax],bl
  .text:004E8F2Einceax
  .text:004E8F2Fshredx,8
  .text:004E8F32dececx
  .text:004E8F33jnzshortloc_4E8F28;相當於FOR循環運算
  .text:004E8F35
  .text:004E8F35loc_4E8F35:KEY付值運算;
  .text:004E8F35moveax,[edi]
  .text:004E8F37movedx,eax
  .text:004E8F39shledx,5
  .text:004E8F3Csubedx,eax
  .text:004E8F3Emoveax,1
  .text:004E8F43addedx,8088405h
  .text:004E8F49mov[edi],edxKEY付值
  .text:004E8F4Bpopedi
  .text:004E8F4Cpopesi
  .text:004E8F4Dpopebx
  .text:004E8F4Eretn
  .text:004E8F4Esub_4E8EF0endp
  

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

今天就到這裡

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved