Изменить псевдокод в IDA Pro для изменения значений - PullRequest
0 голосов
/ 06 октября 2018

Здравствуйте! Я искал какую-нибудь помощь или какое-либо руководство по редактированию или изменению (перезаписи) двоичного файла elf с помощью IDA PRO.Когда я открываю файл с IDA Pro, я ищу, где я хочу редактировать, после чего я нажимаю F5, я вижу псевдокод

    void __usercall TSkillFed::Event(TSkillFed *const this@<esi>, char *a2@<eax>, int a3)
{
  int v3; // ebx
  char *v4; // eax
  signed int v5; // edi
  _DWORD *v6; // ebx
  int v7; // eax
  _DWORD *v8; // edi
  int v9; // eax
  int SecsPerMana; // [esp+18h] [ebp-10h]

  v3 = *(_DWORD *)(a3 + 16);
  if ( v3 )
  {
    if ( !*(_BYTE *)(v3 + 656) && !IsProtectionZone(*(_DWORD *)(v3 + 624), *(_DWORD *)(v3 + 628), *(_DWORD *)(v3 + 632)) )
    {
      SecsPerMana = 6;
      v4 = 0;
      v5 = 12;
      if ( !*(_DWORD *)(v3 + 652) )
        v4 = (char *)TPlayer::GetActiveProfession((TPlayer *const )v3);
      switch ( (unsigned int)v4 )
      {
        case 0u:
        case 1u:
          v5 = 6;
          goto LABEL_9;
        case 2u:
          SecsPerMana = 4;
          v5 = 8;
          break;
        case 3u:
        case 4u:
          v5 = 12;
          goto LABEL_18;
        case 0xBu:
          v5 = 4;
LABEL_9:
          SecsPerMana = 6;
          break;
        case 0xCu:
          v5 = 6;
LABEL_18:
          SecsPerMana = 3;
          break;
        case 0xDu:
        case 0xEu:
          SecsPerMana = 2;
          v5 = 12;
          break;
        default:
          error(v4, "TSkillFed::Event: Unbekannter Beruf %d.\n", v4);
          break;
      }
      if ( !((*(int (__cdecl **)(int))(*(_DWORD *)a3 + 52))(a3) % v5) )
      {
        v8 = *(_DWORD **)(v3 + 12);
        (*(void (__cdecl **)(_DWORD, int))(*v8 + 8))(*(_DWORD *)(v3 + 12), v8[5] + 1);
        v9 = v8[6];
        if ( v8[5] > v9 )
          v8[5] = v9;
      }
      if ( !((*(int (__cdecl **)(int))(*(_DWORD *)a3 + 52))(a3) % SecsPerMana) )
      {
        v6 = *(_DWORD **)(v3 + 16);
        (*(void (__cdecl **)(_DWORD *, int))(*v6 + 8))(v6, v6[5] + 2);
        v7 = v6[6];
        if ( v6[5] > v7 )
          v6[5] = v7;
      }
    }
  }
  else
  {
    error(a2, "TSkillFed::Event: GetMaster liefert NULL zurueck!\n");
  }
}

Как я могу изменить, где он говорит SecsPerMana = 2;?

Я хочу изменить все строки, где SecsPerMana.Я хочу изменить их с номером 1?

Также после этого меняется, как сохранить его в файл?

...