Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Улучшение ИИ

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 10:51

А с функцией 0x524B70 Hydra может справиться ?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Улучшение ИИ

Сообщение AlexSpl » 05 май 2020, 10:55

Код: Выделить всё
int __fastcall FUN_00524b70(int param_1,uint param_2,char param_1_00)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  int *piVar4;
  int iVar5;
  int local_c;
 
  cVar1 = *(char *)(param_1 + 0xc9 + param_2);
  if (cVar1 == '\x03') {
    return 0;
  }
  if ((cVar1 == '\0') && (*(int *)(param_1 + 0x101) == 8)) {
    return 0;
  }
  iVar5 = 1000;
  local_c = 500;
  if (param_1_00 != '\0') {
    piVar4 = (int *)(param_1 + 0xad);
    _param_1_00 = 7;
    do {
      if (piVar4[-7] != -1) {
        iVar2 = *(int *)(PTR_DAT_006747b0 + piVar4[-7] * 0x74 + 0x40) * *piVar4;
        iVar5 = iVar5 + iVar2;
        if (((PTR_DAT_006747b0 + piVar4[-7] * 0x74)[0x10] & 4) != 0) {
          local_c = local_c + iVar2;
        }
      }
      piVar4 = piVar4 + 1;
      _param_1_00 = _param_1_00 + -1;
    } while (_param_1_00 != 0);
  }
  if (0x1b < param_2) {
    return 0;
  }
  switch(param_2) {
  case 0:
    uVar3 = __ftol();
    return uVar3;
  case 1:
    local_c = *(int *)(&DAT_00640390 + (int)cVar1 * 4) * local_c;
    goto LAB_0052502d;
  case 2:
    return iVar5 / 10;
  default:
    return iVar5 / 0x14;
  case 4:
    return iVar5 / 100;
  case 5:
    uVar3 = __ftol();
    return uVar3;
  case 6:
  case 9:
    return iVar5 / 0x32;
  case 7:
    if (param_1_00 == '\0') {
      cVar1 = *(char *)(param_1 + 0x478);
      if ('c' < cVar1) {
        return 0x9ab;
      }
      iVar5 = (int)cVar1;
      if (cVar1 < '\x01') {
        iVar5 = 1;
      }
      return iVar5 * 0x19;
    }
    cVar1 = *(char *)(param_1 + 0x478);
    if ('c' < cVar1) {
      return (*(int *)(param_1 + 0x47e) * 99) / 2;
    }
    iVar5 = (int)cVar1;
    if (cVar1 < '\x01') {
      iVar5 = 1;
    }
    return (iVar5 * *(int *)(param_1 + 0x47e)) / 2;
  case 8:
    if (param_1_00 != '\0') {
      return *(int *)(param_1 + 0x486) / 10;
    }
    return 1;
  case 10:
    return (int)(iVar5 + (iVar5 >> 0x1f & 7U)) >> 3;
  case 0xb:
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 0;
    }
    if (param_1_00 != '\0') {
      return *(int *)(param_1 + 0x47e) / 5;
    }
    return 2;
  case 0xd:
    if (param_1_00 != '\0') {
      uVar3 = __ftol();
      return uVar3;
    }
    return *(undefined4 *)(&DAT_0064039c + (int)cVar1 * 4);
  case 0xe:
    if (param_1_00 != '\0') {
      uVar3 = FUN_00525200();
      return uVar3;
    }
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 0;
    }
    break;
  case 0xf:
    if (param_1_00 != '\0') {
      uVar3 = FUN_00525200();
      return uVar3;
    }
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 0x19;
    }
    break;
  case 0x10:
    if (param_1_00 != '\0') {
      uVar3 = FUN_00525200();
      return uVar3;
    }
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 3;
    }
    break;
  case 0x11:
    if (param_1_00 != '\0') {
      uVar3 = FUN_00525200();
      return uVar3;
    }
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 0x1e;
    }
    break;
  case 0x12:
    if (*(char *)(param_1 + 0xd0) == '\0') {
      return 0;
    }
    if (param_1_00 == '\0') {
      cVar1 = *(char *)(param_1 + 0x478);
      if ('c' < cVar1) {
        return 0x1ef;
      }
      iVar5 = (int)cVar1;
      if (cVar1 < '\x01') {
        iVar5 = 1;
      }
      return iVar5 * 5;
    }
    cVar1 = *(char *)(param_1 + 0x478);
    if (cVar1 < 'd') {
      iVar5 = (int)cVar1;
      if (cVar1 < '\x01') {
        iVar5 = 1;
      }
    }
    else {
      iVar5 = 99;
    }
    return (iVar5 * *(int *)(param_1 + 0x47e)) / 10;
  case 0x13:
    return iVar5 / 0x32;
  case 0x14:
    if ((param_1_00 != '\0') && (cVar1 = FUN_004d9460(4), cVar1 == '\0')) {
      return 0;
    }
    cVar1 = *(char *)(param_1 + 0x476);
    if ('c' < cVar1) {
      return 0x3de;
    }
    if ('\0' < cVar1) {
      return (int)cVar1 * 10;
    }
    return 0;
  case 0x16:
    return (iVar5 * 7) / 100;
  case 0x17:
    local_c = iVar5 * 7;
LAB_0052502d:
    return local_c / 100;
  case 0x18:
    if (param_1_00 != '\0') {
      cVar1 = *(char *)(param_1 + 0x479);
      if ('c' < cVar1) {
        iVar5 = *(int *)(param_1 + 0x486) * 99;
        return (int)(iVar5 + (iVar5 >> 0x1f & 3U)) >> 2;
      }
      iVar5 = (int)cVar1;
      if (cVar1 < '\x01') {
        iVar5 = 1;
      }
      iVar5 = iVar5 * *(int *)(param_1 + 0x486);
      return (int)(iVar5 + (iVar5 >> 0x1f & 3U)) >> 2;
    }
    cVar1 = *(char *)(param_1 + 0x479);
    if ('c' < cVar1) {
      return 0x3de;
    }
    goto LAB_005250b1;
  case 0x19:
    if (param_1_00 != '\0') {
      cVar1 = *(char *)(param_1 + 0x478);
      if (cVar1 < 'd') {
        iVar5 = (int)cVar1;
        if (cVar1 < '\x01') {
          iVar5 = 1;
        }
      }
      else {
        iVar5 = 99;
      }
      return (iVar5 * *(int *)(param_1 + 0x47e)) / 0x14;
    }
    cVar1 = *(char *)(param_1 + 0x478);
    if ('c' < cVar1) {
      return 0xc6;
    }
    iVar5 = (int)cVar1;
    if (cVar1 < '\x01') {
      iVar5 = 1;
    }
    return iVar5 * 2;
  case 0x1a:
    return iVar5 / 0x28;
  case 0x1b:
    if ((param_1_00 != '\0') && (cVar1 = FUN_004d9460(6), cVar1 == '\0')) {
      return 0;
    }
    return 0xfa;
  }
  cVar1 = *(char *)(param_1 + 0x478);
  if ('c' < cVar1) {
    return 0x3de;
  }
LAB_005250b1:
  iVar5 = (int)cVar1;
  if (cVar1 < '\x01') {
    iVar5 = 1;
  }
  return iVar5 * 10;
}
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 10:58

А ее возможно использовать совместно с IDA базой ? Или нужна какая-то конвертация ? Или ее можно натравить только на сам экзешник ?

Я вообще-то всегда думал, что Hex-Rays - это вершина декомпиляции :smile1:
А декомпилятор, как известно, это для моддера чуть менее, чуть всё.

Справедливости ради, с функцией 0x52c0b0 Hex-Rays в общем тоже справился. Кол-во параметров он определил верно - 4 (то, что в FPU - это не параметр, как все знают, вернее, параметр, но не в стеке). Да, он не написал, что это FASTCALL, но и не написал что это THISCALL. А если мы видим в параметрах и ECX, и EDX, то обычно легко догадываемся, что это FASTCALL.
Последний раз редактировалось Ben80 05 май 2020, 11:10, всего редактировалось 1 раз.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Улучшение ИИ

Сообщение AlexSpl » 05 май 2020, 11:08

Цитата:
А ее возможно использовать совместно с IDA базой ?

Есть плагин для IDA (OOAnalyzer), но я пока не разобрался, как генерировать json-файл для его работы.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Улучшение ИИ

Сообщение AlexSpl » 05 май 2020, 11:16

Он не лучше Hex-Rays. С командами FPU не справляется, как видим. Может, это я какие-то настройки пропустил? Hо ничего не трогал, вроде. Просто запустил анализ экзешника по умолчанию. Ещё Ghidra гораздо медленнее IDA.

Ага. Об этом баге известно: "x87 FPU isn't handled correctly by the decompiler" :smile1:
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 12:04

Попробую как-нибудь на досуге составить список всех функций, которые не осилил Hex-Rays (такие как 0x524b70) и получить код с помощью GHydra. И выложить где-нибудь тут на форуме. Это ведь не совсем бесполезное занятие, правда ? :smile1:
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 12:33

Кстати, производитель GHudra то - АНБ США :smile1: Возможно, они собирают базу данных обо всех, кто является хакером-крэкером или потенциально может быть таковым.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Улучшение ИИ

Сообщение AlexSpl » 05 май 2020, 12:33

Цитата:
Попробую как-нибудь на досуге составить список всех функций, которые не осилил Hex-Rays (такие как 0x524b70)

У меня Hex-Rays её декомпилирует нормально. Правда, есть огрехи (например, не везде распознаёт оптимизированное деление), но, в целом, читабельный код получается, и даже с FPU-инструкциями нет проблем.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 12:35

А, ну, видимо, дело в том, что я до сих пор использую версию IDA 5.5, а многие уже на 7 перешли. Мне она что-то визуально не очень понравилась.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 05 май 2020, 12:36

А можете декомпилированный файлик приложить ?
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron