因此,我一直在阅读有关如何使用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的组。

编辑:
是的,本教程指出这代表一个结构。但是他怎么知道它代表0x1388?如果我收到这样的字符串,是否可以让我理解它表示特定的值,而不必是发送消息的代码的作者?

最佳答案

代码的相关部分是这样的:

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空终止的字节字符串而言)。

0x1388serv_addr.sin_port的值,它被打印为第三个和第四个字节(1388,以网络(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.17f127)。这也是网络字节顺序。
其余的30 30 30 30 30 30 30 30是“垃圾”,它将结构填充到struct sockaddr的公共大小,该大小为16个字节长。

10-06 04:10
查看更多