修改日本1.00.90 GS支持S5韩国第5季

  •     case 0xF1: //登陆
  •         aRecv[1] -= 0x02;
  •         aLen = aRecv[1];
  •         for (int i = 24; i<50; i++)
  •             aRecv[i] = aRecv[i+2];
  •         break;
  •     case 0xF6:
  • //        aRecv[1] = 0x09;
  • //        aRecv[2] = 0x03;
  • //        aRecv[3] = 0x00;
  •         return true;
  •         break;
  • case 0xF6: // S5 pct
  •         return true;
  • OLLYDBG 修改 GS:
    1. 004C256B  |. 33C9           XOR ECX,ECX
    2. 004C256D  |. 8A4D 0C        MOV CL,BYTE PTR SS:[EBP+C]
    3. 004C2570  |. 51             PUSH ECX
    4. 004C2571  |. FF15 80008000  CALL DWORD PTR DS:[800080]
    5. 004C2577  |. 8B75 08        MOV ESI,DWORD PTR SS:[EBP+8]
    6. 004C257A  |. 8846 02        MOV BYTE PTR DS:[ESI+2],AL
    7. 004C257D  |. 5F             POP EDI
    8. 004C257E  |. 5E             POP ESI
    9. 004C257F  |. 5B             POP EBX
    10. 004C2580  |. 8BE5           MOV ESP,EBP
    11. 004C2582  |. 5D             POP EBP
    12. 004C2583  \. C3             RETN
    13. 004B2B95   > 8A51 02        MOV DL,BYTE PTR DS:[ECX+2]
    14. 004B2B98   . 52             PUSH EDX
    15. 004B2B99   . FF15 84008000  CALL DWORD PTR DS:[800084]
    16. 004B2B9F   . 8845 E4        MOV BYTE PTR SS:[EBP-1C],AL
    17. 004B2BA2   . 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
    18. 004B2BA5   .^E9 25F6FFFF    JMP Gameserv.004B21CF
    19. 004B21C0   . 8B8D 6CE4FFFF  MOV ECX,DWORD PTR SS:[EBP-1B94]
    20. 004B21C6   . 33D2           XOR EDX,EDX
    21. 004B21C8   . E9 C8090000    JMP Gameserv.004B2B95
    22. 004B21CD     90             NOP
    23. 004B21CE     90             NOP
    24. 004B21CF   > 0345 EC        ADD EAX,DWORD PTR SS:[EBP-14]
    25. 004B21D2   . 8A08           MOV CL,BYTE PTR DS:[EAX]

    DLL 挂接:
  • _asm
  •         {
  •             MOV DWORD PTR DS:[00800080H],Offset ProtocolServer
  •             MOV DWORD PTR DS:[00800084H],Offset ProtocolClient
  •         }
  • s5.h 文件:
  • __declspec(dllexport)BYTE ProtocolServer(BYTE Type);
  • __declspec(dllexport)BYTE ProtocolClient(BYTE Type);
  • s5.cpp 文件:
  • //s5 客户端-->服务器
  • BYTE ProtocolServer(BYTE Type)
  • {
  •         switch(Type)
  •         {
  •             case 0x1D: return 0xD3; //走路
  •             case 0xD6: return 0xDF; //移动
  •             case 0xDC: return 0xD7; //攻击
  •             //case 0xD7: return 0x10; //技能
  •         }
  •         return Type;
  • }
  • s5 客户端-->服务器:
  • BYTE ProtocolClient(BYTE Type)
  • {    
  •         switch(Type)
  •         {
  •             case 0xD3: return 0x1D; //走路
  •             case 0xDF: return 0xD6; /移动
  •             case 0xD7: return 0xDC; //攻击
  •             //case 0x10: return 0xD7; //技能
  •         }
  •         return Type;
  • }
  • S5Core 加:
  •     BYTE ProtocolType = aRecv[0];
  •     
  •     switch(ProtocolType)
  •     {
  •     case 0xC1:
  •         switch(BYTE(protoNum))
  •         {
  •         case 0x10:
  •             protoNum = 0xD7;
  •             aRecv[2] = 0xD7;
  •             break;
  •         }
  •     }
  • 修正移动 :
  • case 0x8E:
  • // aRecv[1] = 0x09;
  • // aRecv[2] = 0x03;
  • // aRecv[3] = 0x00;
  • return;
  • break;
  • 本文出自 7j45 > 奇迹一条龙