Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <vector>
  3. #include <iostream>
  4.  
  5.  
  6. struct BinaryReader
  7. {
  8.     const std::vector<byte> &buf;
  9.     size_t index;
  10.  
  11.     BinaryReader(const std::vector<byte> &dataSource) :buf(dataSource), index(0)
  12.     {}
  13.  
  14.     template<typename T>
  15.     T read()
  16.     {
  17.         const byte *p = buf.data();
  18.         T result = *(T*)(p + index);
  19.         index += sizeof(T);
  20.         return result;
  21.  
  22.     }
  23.     void readBytes(std::vector<byte> &out, size_t size)
  24.     {
  25.         out.assign(buf.begin() + index, buf.begin() + index + size);
  26.         index += size;
  27.     }
  28.     bool dataAvailable()
  29.     {
  30.         return index < buf.size() - 1;
  31.     }
  32. };
  33. struct PacketHeader
  34. {
  35.     WORD unknown1;
  36.     DWORD dataSize;
  37.  
  38.     void read(BinaryReader &headerData)
  39.     {
  40.         unknown1 = headerData.read<WORD>();
  41.         dataSize = headerData.read<DWORD>();
  42.     }
  43.  
  44.     void print() const
  45.     {
  46.         printf("header{%X dataSize=%d}\n", unknown1, dataSize);
  47.     }
  48. };
  49.  
  50. struct PacketData
  51. {
  52.     std::vector<byte> packetBuf;
  53.  
  54.     void read(BinaryReader &packetData, PacketHeader &header)
  55.     {
  56.         packetData.readBytes(packetBuf, header.dataSize);
  57.     }
  58.  
  59.     void print() const
  60.     {
  61.         printf("data=");
  62.         for (const byte &b : packetBuf)
  63.             printf("%02X ", b);
  64.         putchar('\n');
  65.     }
  66. };
  67.  
  68. struct Packet
  69. {
  70.     PacketHeader header;
  71.     PacketData data;
  72.  
  73.     void read(BinaryReader &packetData)
  74.     {
  75.         header.read(packetData);
  76.         data.read(packetData, header);
  77.     }
  78.  
  79.     void print() const
  80.     {
  81.         header.print();
  82.         data.print();
  83.     }
  84. };
  85.  
  86. struct PacketParser
  87. {
  88.     std::vector<Packet> packets;
  89.  
  90.     void read(BinaryReader &packetsData)
  91.     {
  92.         Packet packet;
  93.         do
  94.         {
  95.             packet.read(packetsData);
  96.             packets.push_back(packet);
  97.  
  98.         } while (packetsData.dataAvailable());
  99.     }
  100. };
  101.  
  102.  
  103.  
  104. int main()
  105. {
  106.     std::vector<byte> data = { 0xA4, 0xF6, 0x20, 0x00, 0x00, 0x00, 0x11, 0x3B, 0xE2, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x78, 0x58, 0xAF, 0x11, 0x58, 0xA0, 0xB1, 0x66, 0x58, 0xAF, 0x58, 0x31, 0x58, 0xD2, 0x0B, 0xB4, 0x58, 0x58, 0xCC, 0x75, 0xF8, 0x08, 0xBC };
  107.  
  108.     PacketParser parser;
  109.     BinaryReader packetReader(data);
  110.     parser.read(packetReader);
  111.  
  112.     for (const Packet &packet : parser.packets)
  113.         packet.print();
  114.  
  115.     getchar();
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement