当前位置: 首页 > 网络应用技术

GO语言反向技术:恒定字符串

时间:2023-03-07 13:18:45 网络应用技术

  将GO语言源代码编译到二进制文件中后,源代码存储中的字符串在哪里?如何组织?

  以下GO语言源代码是一个示例:

  尽管它只是打印一个字符串“ Hello,World!”,但生成的二进制文件中的字符串非常多:

  GO语言二进制文件中存储的字符串在哪里?实际上,存储位置的ELF格式原理在.rodata部分(如上图所示)。

  一些学生会以C语言编译的ELF格式询问字符串。GO语言的字符串组织方法与C语言的字符串组织方法有什么区别?最大的区别是C语言字符串以“ x00”结尾,因此可以轻松地通过'x00轻松切割不同的字符串',GO语言字符串可以发现没有'x00'结束,没有'x00'的结尾,没有'x00'结束,没有'x00'结束。例如,在上图中,”你好世界!”在以下是“ sigkill:”“”,没有'x00'分离。

  GO语言字符串是根据以下方法组织的:

  此外,GO语言字符串通常是从GO_STRING位置存储的,如下图所示

  有两种方法可以在相反的方向上正确切割GO语言字符串:

  基于GO语言弦组织的原理快速切割算法:

  1.搜索并确定GO_STRING的起始位置

  2.将字符串搜索开始长度设置为1

  3.根据当前的字符串长度切割字符串

  4.预切下一个字符串并与当前字符串进行比较,以检查是否违反了原理。如果它符合当前字符串的保存,请继续在步骤3中切下下一个字符串,否则意味着字符串在步骤5操作中更改。

  5.将当前的字符串长度添加到1,然后在步骤3中继续搜索,直到整个搜索正确

  如下图所示(长度为13个字节的字符串):

  [摘要] GO语言字符串的切割可以引用二进制安全检测中字符串的信息,以实现实际代码中字符串的信息,以提高检测的准确性。

  作者:安全技术猿。