SeMgA Опубликовано 2 января, 2021 Поделиться Опубликовано 2 января, 2021 Всех с наступившим новым годом! Помогите пожалуйста несколькими советами, имеем: 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 Возможно ли передать в функцию структуру в том виде который нужен мне. Спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 января, 2021 Поделиться Опубликовано 4 января, 2021 В 02.01.2021 в 22:40, SeMgA сказал: &stru_D83840 Это ты сам переименовал, или это IDA задетектил структуру сам? И я не совсем понял, что значил "чистая структура". Если тебе нужна структура в при реальной работе, хукай эту функцию, да смотри структуру, или я не понимаю, в чём у тебя проблема. Ссылка на комментарий Поделиться на другие сайты Поделиться
SeMgA Опубликовано 4 января, 2021 Автор Поделиться Опубликовано 4 января, 2021 6 часов назад, Xipho сказал: Это ты сам переименовал, или это IDA задетектил структуру сам? И я не совсем понял, что значил "чистая структура". Если тебе нужна структура в при реальной работе, хукай эту функцию, да смотри структуру, или я не понимаю, в чём у тебя проблема. Добрый день спасибо за ответ, ида сама выдала такую штуку, передается по ссылке структура. Я пытаюсь передать структуру из игры, но пока без успешно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения