Помогите разобрать псевдокод IDA

Discussion in 'Реверсинг' started by Rassamaha78, 7 Jul 2022.

  1. Rassamaha78

    Rassamaha78 New Member

    Joined:
    7 Dec 2017
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Сама прога написана на Delphi (2010-XE6). Функция получения своеобразного хеша, на вход принимает порт сервера, должна возвращать хеш (32).

    Code:
    int __fastcall Serverfunctionscontrol::TestMd5(int a1, char *a2)
    {
      Serverfunctionscontrol *v2; // eax
      Serverfunctionscontrol *v3; // eax
      int v5; // [esp-18h] [ebp-34h]
      int v6; // [esp-14h] [ebp-30h]
      char v7; // [esp-10h] [ebp-2Ch]
      unsigned int v8; // [esp-10h] [ebp-2Ch]
      struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; // [esp-Ch] [ebp-28h] BYREF
      void *v10; // [esp-8h] [ebp-24h]
      int *v11; // [esp-4h] [ebp-20h]
      int v12; // [esp+0h] [ebp-1Ch] BYREF
      int v13; // [esp+4h] [ebp-18h] BYREF
      int v14; // [esp+8h] [ebp-14h] BYREF
      int v15; // [esp+Ch] [ebp-10h] BYREF
      char v16[4]; // [esp+10h] [ebp-Ch] BYREF
      char *v17; // [esp+14h] [ebp-8h]
      char SelfInsert[4]; // [esp+18h] [ebp-4h] BYREF
      int savedregs; // [esp+1Ch] [ebp+0h] BYREF
    
      *(_DWORD *)v16 = 0;
      v15 = 0;
      v14 = 0;
      v13 = 0;
      v12 = 0;
      v17 = a2;
      *(_DWORD *)SelfInsert = a1;
      System::__linkproc__ UStrAddRef(a1);
      v11 = &savedregs;
      v10 = &loc_A69E85;
      ExceptionList = NtCurrentTeb()->NtTib.ExceptionList;
      __writefsdword(0, (unsigned int)&ExceptionList);
      v7 = SelfInsert[0];
      Serverfunctionscontrol::GetIPs((Serverfunctionscontrol *)&v13);
      v5 = v13;
      System::__linkproc__ UStrCatN(&v14, 3);
      System::__linkproc__ LStrFromUStr(v5);
      v2 = (Serverfunctionscontrol *)System::__linkproc__ LStrToPChar(v15);
      Serverfunctionscontrol::MD5(v2, v16);
      System::__linkproc__ UStrInsert((int)L"r2d2", v7);
      System::__linkproc__ LStrFromUStr(v6);
      v3 = (Serverfunctionscontrol *)System::__linkproc__ LStrToPChar(v12);
      Serverfunctionscontrol::MD5(v3, v17);
      __writefsdword(0, v8);
      v10 = &loc_A69E8C;
      System::__linkproc__ LStrClr(&v12);
      System::__linkproc__ UStrArrayClr(&v13, 2);
      System::__linkproc__ LStrClr(&v15);
      System::__linkproc__ UStrClr(v16);
      return System::__linkproc__ UStrClr(SelfInsert);
    }
    Внутри получаем IP машины (GetIPs), а вот что происходит дальше, не совсем понимаю:
    Вижу, что порт преобразуем в строку длиной 4 символа, вроде как:
    1. Получаем MD5 хеш IP адреса
    2. В начало строки номера порта добавляем соли "r2d2"
    3. Складываем md5IP + соль + порт и возвращаем MD5 всего этого.
    Но, увы нет, на выходе не то, что ожидается (есть валидный хеш от конкретного IP и Порта)

    Может кто поправит/подскажет что же всё таки делает функция ?
     
    #1 Rassamaha78, 7 Jul 2022
    Last edited: 7 Jul 2022
  2. Rassamaha78

    Rassamaha78 New Member

    Joined:
    7 Dec 2017
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Вопрос больше не актуален, разобрался сам. Тему можно закрывать.
     
    KIR@PRO likes this.