А как структуры то достать

Статус
В этой теме нельзя размещать новые ответы.

MrKirill1232

Великий мудрец
Проверенный
Магистр реакций
Знаток письма высшего ранга
Куратор Данных
Победитель в номинации 2023
Мастер реакций
Неукротимое пламя
Медаль Благодарности
Победитель в номинации 2022
Старожил I степени
Сообщения
2 307
Розыгрыши
0
Решения
47
Репутация
1 245
Реакции
2 083
Баллы
2 058
Привет!
Завалялся у меня дамп engine.dll (декомпилированный так сказать), и теперь думаю, а как структуру пакета от туда достать :(
Смотрю - а там коды какие-то, ищу по кодам - фигня какая-то...
Если есть гайд где-то - прошу ссылку.
( искомый пакет - S_EX_DIE_INFO )
 
Решение
Там сборная структура пакета
sub_204F5950 - эта ф-ция считывает инфу из пакетов
- первая > v35 = sub_204F5950(*(char **)(a1 + 72), a2, (int)"h", (unsigned int)&v33); считывает H - это скорее всего размер следующего блока(в цикле)

считываем второй блок (столько раз, сколько в H)
v35 = sub_204F5950(*(char **)(a1 + 72), v35, (int)&dword_20ADB750, (unsigned int)&v30);
dword_20ADB750 - если перейти, тут будет структура этого блока, скорее всего DDD

v36 = sub_204F5950(*(char **)(a1 + 72), v35, (int)"h", (unsigned int)&v34); тут опять идет H........
ну вы поняли
Привет!
Завалялся у меня дамп engine.dll (декомпилированный так сказать), и теперь думаю, а как структуру пакета от туда достать :(
Смотрю - а там коды какие-то, ищу по кодам - фигня какая-то...
Если есть гайд где-то - прошу ссылку.
( искомый пакет - S_EX_DIE_INFO )
А протокол какой?
В иде ищешь exDieInfo в строках (shift + f12 открывает окно строк) и там будут ссылки на нужную ф-цию в которой будет структура
 
А протокол какой?
В иде ищешь exDieInfo в строках (shift + f12 открывает окно строк) и там будут ссылки на нужную ф-цию в которой будет структура
Я вижу просто v×циферки× S_EX_DIE_INFO
и по поиску идет (int) (int) (int) S_Ex_DIE_INFO
 
@MrKirill1232, а если поиском по фразе S_EX_DIE_INFO по "декомпилированному" файлу engine, как выглядит код строки с S_EX_DIE_INFO, +предыдущая?

пример о чем речь
C:
  dword_20B19C5C = (int)sub_20307C00;
  appStrncpy((wchar_t *)dword_20B19C60, L"S_EX_DIE_IN_ARENA_TMP", 32);
Код:
sub_2022B8B0((char *)&off_20FD98BC, (int)sub_2057AEB0, (int)L"S_EX_PAYBACK_UI_LAUNCHER", v797);
  sub_2022B8B0((char *)&off_20FD9900, (int)sub_2057AEB0, (int)L"S_EX_DIE_INFO", v798);
  sub_2022B8B0((char *)&off_20FD9944, (int)sub_2057AEB0, (int)L"S_EX_AUTOPLAY_SETTING", v799);
Код:
sub_2022B8B0((char *)&off_20FD98BC, (int)sub_20521BC0, (int)L"S_EX_PAYBACK_UI_LAUNCHER", v1736);
  sub_2022B8B0((char *)&off_20FD9900, (int)sub_20521580, (int)L"S_EX_DIE_INFO", v1737);
  sub_2022B8B0((char *)&off_20FD9944, (int)sub_2051E6B0, (int)L"S_EX_AUTOPLAY_SETTING", v1738);
Код:
// 20B3179C: using guessed type wchar_t aS_ex_payback_u[25];
// 20B317D0: using guessed type wchar_t aS_ex_die_info[14];
// 20B317EC: using guessed type wchar_t aS_ex_autoplay_[22];
Код:
  v1500AA30(&v320, L"S_EX_PAYBACK_UI_LAUNCHER");
  v1983 = 1813;
  sub_2039B880((int)&v1981, (int)&v320);
  v1983 = 1;
  v1500ACE0(&v320);
  v1500AA30(&v318, L"S_EX_DIE_INFO");
  v1983 = 1814;
  sub_2039B880((int)&v1981, (int)&v318);
  v1983 = 1;
  v1500ACE0(&v318);
  v1500AA30(&v316, L"S_EX_AUTOPLAY_SETTING");
Код:
// 20B3179C: using guessed type wchar_t aS_ex_payback_u[25];
// 20B317D0: using guessed type wchar_t aS_ex_die_info[14];
// 20B317EC: using guessed type wchar_t aS_ex_autoplay_[22];
Это все что мне оно показывает.
 
а по этим двум? там функции вроде должны быть
Код:
// 20B0D20C: using guessed type wchar_t aNone_3[5];
// 20B0D31C: using guessed type wchar_t aNone_18[7];
// 20B0D32C: using guessed type wchar_t aSSS[10];
// 20B1F790: using guessed type wchar_t[46];

//----- (20521580) --------------------------------------------------------
char __cdecl sub_20521580(int a1, _BYTE *a2)
{
  const wchar_t *v2; // esi@4
  const wchar_t *v3; // eax@7
  signed int i; // esi@10
  signed int j; // edi@13
  _BYTE *v6; // eax@15
  int v7; // eax@16
  int v8; // eax@17
  _BYTE *v9; // eax@18
  int v10; // ecx@19
  int v11; // eax@19
  int v12; // ecx@19
  int v13; // eax@21
  int v14; // eax@23
  int v15; // eax@23
  int v16; // eax@23
  int v17; // edx@23
  int v19; // [sp+0h] [bp-ECh]@1
  __int16 v20; // [sp+Ch] [bp-E0h]@15
  __int16 v21; // [sp+3Ch] [bp-B0h]@15
  int v22; // [sp+78h] [bp-74h]@13
  int v23; // [sp+84h] [bp-68h]@13
  unsigned __int64 v24; // [sp+90h] [bp-5Ch]@15
  int v25; // [sp+98h] [bp-54h]@14
  int v26; // [sp+A0h] [bp-4Ch]@11
  char v27; // [sp+A4h] [bp-48h]@10
  int v28; // [sp+B8h] [bp-34h]@16
  int v29; // [sp+BCh] [bp-30h]@15
  int v30; // [sp+C0h] [bp-2Ch]@12
  int v31; // [sp+C4h] [bp-28h]@15
  int v32; // [sp+C8h] [bp-24h]@12
  int v33; // [sp+CCh] [bp-20h]@10
  int v34; // [sp+D0h] [bp-1Ch]@13
  _BYTE *v35; // [sp+D4h] [bp-18h]@10
  _BYTE *v36; // [sp+D8h] [bp-14h]@12
  int *v37; // [sp+DCh] [bp-10h]@1
  int v38; // [sp+E8h] [bp-4h]@1

  v37 = &v19;
  v38 = 0;
  if ( v151906E8 )
  {
    if ( vCB58068 && (*(int (**)(void))(*vCB58068 + 208))() )
      v2 = (const wchar_t *)(*(int (**)(void))(*vCB58068 + 208))();
    else
      v2 = L"NONE";
    if ( vCB58068 )
      v3 = (const wchar_t *)(*(int (**)(void))(*vCB58068 + 2228))();
    else
      v3 = L"(None)";
    v1509F460(v151906E8, (const char *)L"%s[%s] %s", v3, v2, L"ExDieInfo");
  }
  v150A3540(&v27);
  LOBYTE(v38) = 1;
  v33 = 0;
  v35 = sub_204F5950(*(char **)(a1 + 72), a2, (int)"h", (unsigned int)&v33);
  v150A33B0(&v27, (signed __int16)v33, (unsigned __int64)(signed __int16)v33 >> 32);
  for ( i = 0; ; ++i )
  {
    v26 = i;
    if ( i >= (signed __int16)v33 )
      break;
    v30 = 0;
    v32 = 0;
    v36 = 0;
    v35 = sub_204F5950(*(char **)(a1 + 72), v35, (int)&dword_20ADB750, (unsigned int)&v30);
    v150A33B0(&v27, v30, (unsigned __int64)v30 >> 32);
    v150A33B0(&v27, v32, (unsigned __int64)v32 >> 32);
    v150A33B0(&v27, v36, (unsigned __int64)(signed int)v36 >> 32);
  }
  v34 = 0;
  v36 = sub_204F5950(*(char **)(a1 + 72), v35, (int)"h", (unsigned int)&v34);
  v150A33B0(&v27, (signed __int16)v34, (unsigned __int64)(signed __int16)v34 >> 32);
  sub_201B4A00((int)&v22);
  LOBYTE(v38) = 2;
  sub_201B4A00((int)&v23);
  LOBYTE(v38) = 3;
  for ( j = 0; ; ++j )
  {
    v25 = j;
    if ( j >= (signed __int16)v34 )
      break;
    v35 = 0;
    v21 = 0;
    v20 = 0;
    v31 = 0;
    v24 = 0i64;
    v29 = 0;
    v6 = sub_204F5950(*(char **)(a1 + 72), v36, (int)"h", (unsigned int)&v35);
    if ( (_WORD)v35 == 1 )
    {
      v28 = 0;
      v36 = sub_204F5950(*(char **)(a1 + 72), v6, (int)&dword_20ADB74C, (unsigned int)&v28);
      v7 = sub_20204190(0, &v28);
      if ( v7 )
      {
        v8 = v1500AFF0(v7);
        v15079520(&v21, v8, 24);
      }
      v9 = v36;
    }
    else
    {
      v9 = sub_204F5950(*(char **)(a1 + 72), v6, (int)&dword_20ADB748, 48);
    }
    v36 = sub_204F5950(*(char **)(a1 + 72), v9, (int)"Sdfh", 48);
    v11 = sub_201FB920(v10, &v22);
    if ( v11 )
      v1500AA30(v11, &v21);
    v13 = sub_201FB920(v12, &v23);
    if ( v13 )
      v1500AA30(v13, &v20);
    v150A33B0(&v27, (signed __int16)v35, (unsigned __int64)(signed __int16)v35 >> 32);
    v14 = v1500AFF0(v22 + 12 * j);
    v150A33B0(&v27, v14, (unsigned __int64)v14 >> 32);
    v15 = v1500AFF0(v23 + 12 * j);
    v150A33B0(&v27, v15, (unsigned __int64)v15 >> 32);
    v150A33B0(&v27, v31, (unsigned __int64)v31 >> 32);
    sub_209323FD((__m128d)v24);
    v150A33B0(&v27, v16, v17);
    v150A33B0(&v27, (signed __int16)v29, (unsigned __int64)(signed __int16)v29 >> 32);
  }
  (*(void (__stdcall **)(char *))(*(_DWORD *)GL2Console + 5196))(&v27);
  LOBYTE(v38) = 2;
  sub_201B4AF0((int)&v23);
  LOBYTE(v38) = 1;
  sub_201B4AF0((int)&v22);
  LOBYTE(v38) = 0;
  v150A3450(&v27);
  return 0;
}
// 20ADB748: using guessed type int dword_20ADB748;
// 20ADB74C: using guessed type int dword_20ADB74C;
// 20ADB750: using guessed type int dword_20ADB750;
// 20B0D20C: using guessed type wchar_t aNone_3[5];
// 20B0D31C: using guessed type wchar_t aNone_18[7];
// 20B0D32C: using guessed type wchar_t aSSS[10];
// 20B1F714: using guessed type wchar_t aExdieinfo[10];
 
Там сборная структура пакета
sub_204F5950 - эта ф-ция считывает инфу из пакетов
- первая > v35 = sub_204F5950(*(char **)(a1 + 72), a2, (int)"h", (unsigned int)&v33); считывает H - это скорее всего размер следующего блока(в цикле)

считываем второй блок (столько раз, сколько в H)
v35 = sub_204F5950(*(char **)(a1 + 72), v35, (int)&dword_20ADB750, (unsigned int)&v30);
dword_20ADB750 - если перейти, тут будет структура этого блока, скорее всего DDD

v36 = sub_204F5950(*(char **)(a1 + 72), v35, (int)"h", (unsigned int)&v34); тут опять идет H........
ну вы поняли
 
Решение
@MrKirill1232, такая вот еще тема есть, может что нового для себя откроете
 
Код:
H1
for(H1.size)
{
    ddd
}
H2
for(H2.size)
{
    H3
    if(H3 = 1)
        D
    else
       S
    S
    D
    F
    H
}
структура
 
Последнее редактирование:
Код:
H1
for(H1.size)
{
    ddd
}
H2
for(H2.size)
{
    H3
    if(H3 = 1)
        D
    else
       S
    S
    D
    F
    H
}
структура
Ну кстати, примерно такая структура и получается в конце :)
Java:
@Override
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.EX_DIE_INFO.writeId(packet);
        
        packet.writeH(_droppedItems.size());
        for (ItemInstance item : _droppedItems)
        {
            packet.writeD(item.getId());
            packet.writeD(item.getEnchantLevel());
            packet.writeD((int) item.getCount());
        }
        
        packet.writeD(_lastDamageTaken.size());
        for (DamageTakenHolder damageHolder : _lastDamageTaken)
        {
            packet.writeS(damageHolder.getCreature().getName());
            packet.writeH(0x00);
            packet.writeD(damageHolder.getSkillId());
            packet.writeF(damageHolder.getDamage());
            packet.writeD(0x00);
        }
        
        return true;

Оффтоп:
вообщем в моих поисках потребуется какой-то другой пакет...
Где же Вы... Кнопки моей мечты...
unknown.png
 
Код:
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.EX_DIE_INFO.writeId(packet);
       
        packet.writeH(_droppedItems.size());
        for (ItemInstance item : _droppedItems)
        {
            packet.writeD(item.getId());
            packet.writeD(item.getEnchantLevel());
            packet.writeD((int) item.getCount());
        }
       
        packet.writeH(_lastDamageTaken.size());
        for (DamageTakenHolder damageHolder : _lastDamageTaken)
        {
            packet.writeH(0);
            packet.writeS(damageHolder.getCreature().getName());

            packet.writeS("");
            packet.writeD(damageHolder.getSkillId());
            packet.writeF(damageHolder.getDamage());
            packet.writeH(0x00);
        }
       
        return true;
 
  • Мне нравится
Реакции: kick
Оффтоп:
вообщем в моих поисках потребуется какой-то другой пакет...
Где же Вы... Кнопки моей мечты...
Посмотреть вложение 40261
ох... Вообщем это обычный пакет смерти.
Допиленный ( (с) Gaikotsu )
Код:
sub_204F5950(*(char **)(a1 + 72), a2, (int)"dQddcd", (unsigned int)&v27);

sub_204F5950(*(char **)(a1 + 72), v2, (int)"ddddd", (unsigned int)&v23);

Код:
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.EX_DIE_INFO.writeId(packet);
      
        packet.writeH(_droppedItems.size());
        for (ItemInstance item : _droppedItems)
        {
            packet.writeD(item.getId());
            packet.writeD(item.getEnchantLevel());
            packet.writeD((int) item.getCount());
        }
      
        packet.writeH(_lastDamageTaken.size());
        for (DamageTakenHolder damageHolder : _lastDamageTaken)
        {
            packet.writeH(0);
            packet.writeS(damageHolder.getCreature().getName());

            packet.writeS("");
            packet.writeD(damageHolder.getSkillId());
            packet.writeF(damageHolder.getDamage());
            packet.writeH(0x00);
        }
      
        return true;
Это код я у мобиуса взял. У него пакет этот прописан просто.
 
ох... Вообщем это обычный пакет смерти.
Допиленный ( (с) Gaikotsu )
Код:
sub_204F5950(*(char **)(a1 + 72), a2, (int)"dQddcd", (unsigned int)&v27);

sub_204F5950(*(char **)(a1 + 72), v2, (int)"ddddd", (unsigned int)&v23);


Это код я у мобиуса взял. У него пакет этот прописан просто.
я его изменил же, скомпиль с тем что я написал

1637454220565.png
 
Можете еще помочь, только теперь в этих ваших датниках
dyepotential_ClassicAden-eu.dat - хочу структуру в эдитор нарисовать... Вообще не понимаю что за данные.
Пишет что везде "char" использует
Ну я CHAR и прописал :)
Ну что-то пошло не по плану :0
1637486568362.png
C:
//----- (20312890) --------------------------------------------------------
char *__thiscall sub_20312890(char *this)
{
  char *v1; // esi@1
  signed int v2; // ebx@1
  _WORD *v3; // eax@1
  _WORD *v4; // edi@1
  int v5; // eax@4
  _WORD *v6; // eax@6
  int v7; // eax@9
  _WORD *v8; // eax@11
  int v9; // eax@14
  _WORD *v10; // eax@16
  int v11; // eax@19
  _WORD *v12; // eax@21
  int v13; // eax@24
  _WORD *v14; // eax@26
  int v15; // eax@29
  _WORD *v16; // eax@31
  int v17; // eax@34
  int v19; // [sp+0h] [bp-90h]@1
  char v20; // [sp+Ch] [bp-84h]@32
  char v21; // [sp+18h] [bp-78h]@27
  char v22; // [sp+24h] [bp-6Ch]@22
  char v23; // [sp+30h] [bp-60h]@17
  char v24; // [sp+3Ch] [bp-54h]@12
  char v25; // [sp+48h] [bp-48h]@7
  char v26; // [sp+54h] [bp-3Ch]@2
  char *v27; // [sp+6Ch] [bp-24h]@1
  _WORD *v28; // [sp+74h] [bp-1Ch]@1
  _WORD *v29; // [sp+78h] [bp-18h]@2
  unsigned int v30; // [sp+7Ch] [bp-14h]@1
  int *v31; // [sp+80h] [bp-10h]@1
  int v32; // [sp+8Ch] [bp-4h]@1

  v31 = &v19;
  v1 = this;
  v27 = this;
  v2 = 0;
  v30 = 0;
  sub_20262F70(this);
  v32 = 0;
  *(_DWORD *)v1 = &off_20BCB264;
  LOBYTE(v32) = 1;
  sub_20101D40(16);
  v4 = v3;
  v28 = v3;
  LOBYTE(v32) = 2;
  if ( v3 )
  {
    v1500AA80(&v26, L"dyepotential_begin");
    LOBYTE(v32) = 3;
    v2 = 1;
    v30 = 1;
    v29 = sub_20262B60(v4, (int)&v26, 99);
  }
  else
  {
    v29 = 0;
  }
  v32 = 4;
  v5 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v5) = v29;
  *((_DWORD *)v1 + 10) = v5;
  v32 = 1;
  if ( v2 & 1 )
  {
    v2 &= 0xFFFFFFFE;
    v30 = v2;
    v1500AD30(&v26);
  }
  sub_20101D40(16);
  v28 = v6;
  LOBYTE(v32) = 5;
  if ( v6 )
  {
    v1500AA80(&v25, L"dyepotential_id");
    LOBYTE(v32) = 6;
    v2 |= 2u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v25, 100);
  }
  else
  {
    v29 = 0;
  }
  v32 = 7;
  v7 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v7) = v29;
  *((_DWORD *)v1 + 11) = v7;
  v32 = 1;
  if ( v2 & 2 )
  {
    v2 &= 0xFFFFFFFD;
    v30 = v2;
    v1500AD30(&v25);
  }
  sub_20101D40(16);
  v28 = v8;
  LOBYTE(v32) = 8;
  if ( v8 )
  {
    v1500AA80(&v24, L"dye_slot_id");
    LOBYTE(v32) = 9;
    v2 |= 4u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v24, 100);
  }
  else
  {
    v29 = 0;
  }
  v32 = 10;
  v9 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v9) = v29;
  *((_DWORD *)v1 + 12) = v9;
  v32 = 1;
  if ( v2 & 4 )
  {
    v2 &= 0xFFFFFFFB;
    v30 = v2;
    v1500AD30(&v24);
  }
  sub_20101D40(16);
  v28 = v10;
  LOBYTE(v32) = 11;
  if ( v10 )
  {
    v1500AA80(&v23, L"effect_name");
    LOBYTE(v32) = 12;
    v2 |= 8u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v23, 115);
  }
  else
  {
    v29 = 0;
  }
  v32 = 13;
  v11 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v11) = v29;
  *((_DWORD *)v1 + 13) = v11;
  v32 = 1;
  if ( v2 & 8 )
  {
    v2 &= 0xFFFFFFF7;
    v30 = v2;
    v1500AD30(&v23);
  }
  sub_20101D40(16);
  v28 = v12;
  LOBYTE(v32) = 14;
  if ( v12 )
  {
    v1500AA80(&v22, L"skill_id");
    LOBYTE(v32) = 15;
    v2 |= 0x10u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v22, 100);
  }
  else
  {
    v29 = 0;
  }
  v32 = 16;
  v13 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v13) = v29;
  *((_DWORD *)v1 + 14) = v13;
  v32 = 1;
  if ( v2 & 0x10 )
  {
    v2 &= 0xFFFFFFEF;
    v30 = v2;
    v1500AD30(&v22);
  }
  sub_20101D40(16);
  v28 = v14;
  LOBYTE(v32) = 17;
  if ( v14 )
  {
    v1500AA80(&v21, L"max_skill_level");
    LOBYTE(v32) = 18;
    v2 |= 0x20u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v21, 100);
  }
  else
  {
    v29 = 0;
  }
  v32 = 19;
  v15 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v15) = v29;
  *((_DWORD *)v1 + 15) = v15;
  v32 = 1;
  if ( v2 & 0x20 )
  {
    v2 &= 0xFFFFFFDF;
    v30 = v2;
    v1500AD30(&v21);
  }
  sub_20101D40(16);
  v28 = v16;
  LOBYTE(v32) = 20;
  if ( v16 )
  {
    v1500AA80(&v20, L"dyepotential_end");
    LOBYTE(v32) = 21;
    v2 |= 0x40u;
    v30 = v2;
    v29 = sub_20262B60(v28, (int)&v20, 101);
  }
  else
  {
    v29 = 0;
  }
  v32 = 22;
  v17 = v1500A700(v1 + 4, 1, 4);
  *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v17) = v29;
  *((_DWORD *)v1 + 16) = v17;
  v32 = 1;
  if ( v2 & 0x40 )
  {
    v30 = v2 & 0xFFFFFFBF;
    v1500AD30(&v20);
  }
  return v1;
}
// 20101D40: using guessed type double __cdecl sub_20101D40(_DWORD);
// 20BA5788: using guessed type wchar_t aSkill_id[9];
// 20BA872C: using guessed type wchar_t aEffect_name[12];
// 20BB60A8: using guessed type wchar_t aMax_skill_leve[16];
// 20BB96EC: using guessed type wchar_t aDyepotential_b[19];
// 20BB9778: using guessed type wchar_t aDye_slot_id[12];
// 20BB9790: using guessed type wchar_t aDyepotential_i[16];
// 20BB97D0: using guessed type wchar_t aDyepotential_e[17];
// 20BCB264: using guessed type int (__stdcall *off_20BCB264)(char);
По логике, структура должна выглядеть как-то так...
XML:
<for name="dyepotential" size="#data" hidden="false">
            <node name="dyepotential_id" reader="UINT" />
            <node name="dye_slot_id" reader="UINT" />
            <node name="effect_name" reader="UNICODE" />
            <node name="skill_id" reader="UINT" />
            <node name="max_skill_level" reader="UINT" />
        </for>
Но это не так :(
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу