Перейти к содержанию
SeMgA

IDA вопрос по структуре и не только

Рекомендуемые сообщения

Всех с наступившим новым годом!

 

Помогите пожалуйста  несколькими советами, имеем:
1. Две функции в игре.

2. Функция по имени (send_npc_02) формирует переменные и отправляет их в функцию по имени (send_NPC_01) 

Спойлер

---send_npc_02---


_BYTE __cdecl send_npc_02(_DWORD arg0)
{
  _DWORD eax1; // eax
  _BYTE result; // al
  _DWORD esi3; // esi
  _DWORD ebx4; // ebx
  _DWORD edi5a; // edi
  _DWORD edi5; // edi
  _DWORD eax9; // eax
  _BYTE zf12; // zf
  _DWORD var8; // [esp+0h] [ebp-8h]
  _DWORD var4; // [esp+4h] [ebp-4h]

  eax1 = dword_D8DA70;
  if ( !dword_D8DA70 )
    return 0;
  esi3 = 0;
  if ( dword_D8DA70 <= 0 )
    return 0;
  while ( 1 )
  {
    ebx4 = dword_D8DAC8[esi3];
    if ( ebx4 < 0x4000 )
      break;
LABEL_17:

    if ( ++esi3 >= eax1 )
      return 0;
  }
  edi5a = dword_D8DAA0[esi3];
  var8 = edi5a;
  var4 = *(_DWORD *)(sub_9C4310(dword_D8DAC8[esi3]) + 272);
  edi5 = sub_9C5BF0(edi5a);
  if ( !*(_DWORD *)(sub_9C4310(ebx4) + 28) )
  {
LABEL_16:
    eax1 = dword_D8DA70;
    goto LABEL_17;
  }
  if ( *(_WORD *)(edi5 + 200) )
  {
    send_NPC_01((int *)&stru_D83840, 32, 7, ebx4, 0, var8, var4);
    return 1;
  }
  if ( *(_BYTE *)(edi5 + 202) )
  {
    send_NPC_01((int *)&stru_D83840, 32, 3, ebx4, 0, var8, var4);
    return 1;
  }
  if ( *(_BYTE *)(edi5 + 183) != 1 )
  {
    eax9 = dword_D8DD58;
    if ( dword_D8DD58 == 55 )
      eax9 = 6;
    dword_D8DD58 = eax9;
    if ( dword_A72B54[eax9] != -1 )
    {
      zf12 = *(_BYTE *)(sub_9C5BF0(dword_A72B54[eax9]) + 183) == 6;
      eax9 = dword_D8DD58;
      if ( zf12 )
      {
        send_NPC_01((int *)&stru_D83840, 32, 14, dword_D8DD58 + 0x4000, ebx4, var8, var4);
        dword_D8DD58 = 55;
        return 1;
      }
    }
    if ( eax9 == 6 )
      eax9 = 55;
    dword_D8DD58 = eax9;
    if ( *(_BYTE *)(edi5 + 212) )
    {
      send_NPC_01((int *)&stru_D83840, 32, 8, ebx4, 0, var8, var4);
      return 1;
    }
    goto LABEL_16;
  }
  if ( !(unsigned __int8)sub_9C9A10(edi5, arg0) )
    return 0;
  send_NPC_01((int *)&stru_D83840, 32, 9, ebx4, 0, var8, var4);
  return 1;
}


 

 

Нас интересует кусок кода
 

Спойлер

send_NPC_01((int *)&stru_D83840, 32, 7, ebx4, 0, var8, var4);

 

Данная функция принимает 7 параметров, одним из которых является структура, у меня к сожалению не получилось найти ее в том виде, в котором она передается в функцию, если просто на нее тыкнуть, перекидывает в чистую структуру
Вот код send_npc_01

Спойлер

int __thiscall send_NPC_01(int *this, int ArgList, int a3, int a4, int a5, int a6, int a7)
{
  int result; // eax
  SOCKET v9; // [esp-10h] [ebp-18h]
  const char *v10; // [esp-Ch] [ebp-14h]
  int v11; // [esp-8h] [ebp-10h]
  int v12; // [esp-4h] [ebp-Ch]

  result = sub_9C7360(ArgList);
  if ( (_BYTE)result )
  {
    if ( ArgList == 32 )
    {
      sub_9A9820(a3 & 0x1F | 0x20);
      sub_9A98A0(a4);
      if ( a3 == 14 || a3 == 23 )
        sub_9A98A0(a5);
      sub_9A9860(a6);
      sub_9A9860(a7);
      result = send_01(v9, v10, v11, v12);
    }
    else
    {
      sub_9DCAA0(3, this[113], "`R*ERROR 4-%i", ArgList);
      result = send_01(v9, v10, v11, v12);
    }
  }
  return result;
}

 

 

 

На этой почве у меня 2 вопроса подскажите пожалуйста:
1 Как найти в IDA структуру в том виде в котором она попадает в функцию.

2 Возможно ли передать в функцию структуру в том виде который нужен мне.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 02.01.2021 в 22:40, SeMgA сказал:

&stru_D83840

Это ты сам переименовал, или это IDA задетектил структуру сам? 
И я не совсем понял, что значил "чистая структура". 

Если тебе нужна структура в при реальной работе, хукай эту функцию, да смотри структуру, или я не понимаю, в чём у тебя проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, Xipho сказал:

Это ты сам переименовал, или это IDA задетектил структуру сам? 
И я не совсем понял, что значил "чистая структура". 

Если тебе нужна структура в при реальной работе, хукай эту функцию, да смотри структуру, или я не понимаю, в чём у тебя проблема.

Добрый день спасибо за ответ, ида сама выдала такую штуку, передается по ссылке структура.

Я пытаюсь передать структуру из игры, но пока без успешно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.