В каком формате эта строка представляет буфер serv_addr? - PullRequest
0 голосов
/ 22 марта 2019

Итак, я читал этот урок о том, как использовать Frida: https://www.frida.re/docs/functions/, и я столкнулся со следующим:

$ ./client 127.0.0.1
connect() is at: 0x400780

Here's the serv_addr buffer:
02 00 13 88 7f 00 00 01 30 30 30 30 30 30 30 30
Press ENTER key to Continue

В руководстве говорится, что байтов представляют 0x1388 или 5000, поэтому они явно не в шестнадцатеричном или десятичном виде. Я попытался использовать конвертеры base64 для преобразования строки, чтобы увидеть, подходит ли 0x1388 или 5000, но не повезло.

В каком формате это точно? В последнее время я не занимался низкоуровневым программированием, и, если я помню, байты - это группы из 8 битов 1 и 0.

EDIT: Да, учебник утверждает, что это представляет собой структуру. Но как он узнал, что он представляет 0x1388? Если я получил такую ​​строку, могу ли я понять, что она представляет собой определенное значение, не будучи автором кода, отправившего сообщение?

1 Ответ

1 голос
/ 22 марта 2019

Соответствующие части кода следующие:

printf ("\nHere's the serv_addr buffer:\n");
b = (unsigned char *) &serv_addr;
for (i = 0; i != sizeof (serv_addr); i++)
  printf ("%s%02x", (i != 0) ? " " : "", b[i]);

Он просто печатает необработанные данные из структуры serv_addr (тип struct sockaddr_in).

Здесь нет «строки» (в смысле байтовой строки, оканчивающейся нулем C).

0x1388 - это значение serv_addr.sin_port, которое печатается как третий и четвертый байты(13 и 88 в сетевом порядке ( big endian ) в байтовом порядке).


Зная, что выходные данные являются необработанными данными структуры sockaddr_in, мыможет легко расшифровать данные

  • 02 00 Это элемент sin_family со значением 2 (десятичный).Это значение соответствует AF_INET.Это в порядке байтов хоста.

  • 13 88 Это (как уже упоминалось) сетевой порядок байтов порта в sin_port.

  • 7f 00 00 01 Это элемент sin_addr, соответствующий IP-адресу 127.0.0.1 (7f равен 127).Это также в порядке байтов в сети.

  • Остальное, 30 30 30 30 30 30 30 30, является "мусором", который заполняет структуру до общего размера для struct sockaddr, который составляет 16 байтов длиной.

...