技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种针对编译优化后的go二级制文件的符号恢复方法与流程  >  正文

一种针对编译优化后的go二级制文件的符号恢复方法与流程

  • 国知局
  • 2024-10-21 15:20:35

本发明实施例涉及网络信息安全,特别是涉及一种针对编译优化后的go二级制文件的符号恢复方法。

背景技术:

1、go语言因其高效的编码能力和跨平台特性,吸引了恶意软件开发者的关注。安全公司逐渐发现越来越多采用go语言编写的恶意软件,这些恶意软件已经跨越了windows、linux和mac三大主流平台。go语言的编译工具链采用全静态链接,将标准库函数和第三方包一并静态编译进二进制文件,同时还包含了运行时和垃圾回收模块的代码。即使经过strip处理,生成的二进制文件仍然体积庞大。在反汇编工具中打开go语言二进制文件,可以看到包含数千个函数,而go语言特有的函数调用约定、栈结构和多返回值机制,使得对go二进制文件进行静态和动态分析都极具挑战性。

2、因此,有必要提供一种针对编译优化后的go二级制文件的符号恢复方法,以解决上述问题。

技术实现思路

1、本发明提供一种针对编译优化后的go二级制文件的符号恢复方法及系统,通过提取段头信息以去除符号信息并获取pclntab地址以恢复符号,极大地提高了go二进制文件的分析效率。

2、本发明实施例提供一种编译优化后的go二级制文件的符号恢复方法,包括:

3、获取go二进制文件;

4、当提取到所述go二进制文件的段头信息时,判断所述go二进制文件是否去除符号信息,若未去除所述符号信息,则提取所述符号信息,若去除所述符号信息,则获取pclntab段地址,以恢复所述go二进制文件的符号;

5、当无法提取到所述go二进制文件的段头信息时,提取所述go二进制文件的程序头信息,恢复text段和pclntab段地址,以恢复所述go二进制文件的符号。

6、优选地,恢复所述go二进制文件的符号包括:

7、当所述go二进制文件包含.symtab段和.strtab段时,分别获取所述.symtab段和.strtab段的位置信息.symtab.location和.strtab.location以及大小信息symtab.size和strtab.size;

8、当所述go二进制文件包含.go.buildinfo段时,获取所述.go.buildinfo段的位置信息.go.buildinfo.location以及大小信息go.buildinfo.size;

9、当所述go二进制文件包含.pclntab段时,获取所述.pclntab段的位置信息.pclntab.location;

10、当所述go二进制文件包含.text段时,获取所述.text段的位置信息.text.location。

11、优选地,当所述.symtab.location和.strtab.location能够定位时进行以下处理:

12、设置n=0;

13、取符号名偏移值,取符号名,取值完n自增1;

14、取符号地址,取值完n自增1;

15、取符号长度,取值完n自增1;

16、如果n未超出pclntab.size的所表示的大小信息,则重复上述步骤,恢复所述go二进制文件的符号。

17、优选地,当所述.symtab.location和.strtab.location无法定位时,进行以下处理:

18、获取.gopclntab段的位置信息,在偏移为8处得到方法数量;

19、获取方法名称表的偏移;

20、获取所述方法名称表的地址;

21、获取方法表的偏移;

22、获取所述方法表的地址;

23、设置初始循环值n=0;

24、取所述方法的偏移,取值完n自增1;

25、得到所述方法的实际地址;

26、取方法名的偏移,取值完n自增1;

27、获取方法名称;

28、如果n未超出所述方法数量,则根据所述方法名称和所述方法的实际地址恢复所述go二进制文件的符号。

29、优选地,当所有段位无法定位时,进行以下处理:

30、获取二进制文件的程序头信息;

31、获得第二个程序头的地址和大小;

32、得到.text的地址;

33、获取pcnlntab的magic信息,搜索所述go二进制文件找到多个magic.location;

34、判断从magic.location+4的地址取16bit位是否为00 00,是则继续;

35、判断从magic.location+6的地址取8bit位是否为01或02或04,是则继续;

36、判断从magic.location+7的地址取8bit位是否为04或08,是则继续;

37、根据判断获取到确定的magic.location,将其设置为pclntab.location。

38、本发明实施例还提供一种针对编译优化后的go二级制文件的符号恢复系统,包括:

39、文件获取模块,其用于获取go二进制文件;

40、去除符号信息判断模块,其用于当提取到所述go二进制文件的段头信息时,判断所述go二进制文件是否去除符号信息,若未去除所述符号信息,则提取所述符号信息,若去除所述符号信息,则获取pclntab段地址,以恢复所述go二进制文件的符号;

41、程序头信息提取模块,其用于当无法提取到所述go二进制文件的段头信息时,提取所述go二进制文件的程序头信息,恢复text段和pclntab段地址,以恢复所述go二进制文件的符号。

42、优选地,恢复所述go二进制文件的符号包括:

43、当所述go二进制文件包含.symtab段和.strtab段时,分别获取所述.symtab段和.strtab段的位置信息.symtab.location和.strtab.location以及大小信息symtab.size和strtab.size;

44、当所述go二进制文件包含.go.buildinfo段时,获取所述.go.buildinfo段的位置信息.go.buildinfo.location以及大小信息go.buildinfo.size;

45、当所述go二进制文件包含.pclntab段时,获取所述.pclntab段的位置信息.pclntab.location;

46、当所述go二进制文件包含.text段时,获取所述.text段的位置信息.text.location。

47、优选地,当所述.symtab.location和.strtab.location能够定位时进行以下处理:

48、设置n=0;

49、取符号名偏移值,取符号名,取值完n自增1;

50、取符号地址,取值完n自增1;

51、取符号长度,取值完n自增1;

52、如果n未超出pclntab.size的所表示的大小信息,则重复上述步骤,恢复所述go二进制文件的符号。

53、优选地,当所述.symtab.location和.strtab.location无法定位时,进行以下处理:

54、获取.gopclntab段的位置信息,在偏移为8处得到方法数量;

55、获取方法名称表的偏移;

56、获取所述方法名称表的地址;

57、获取方法表的偏移;

58、获取所述方法表的地址;

59、设置初始循环值n=0;

60、取所述方法的偏移,取值完n自增1;

61、得到所述方法的实际地址;

62、取方法名的偏移,取值完n自增1;

63、获取方法名称;

64、如果n未超出所述方法数量,则根据所述方法名称和所述方法的实际地址恢复所述go二进制文件的符号。

65、优选地,当所有段位无法定位时,进行以下处理:

66、获取二进制文件的程序头信息;

67、获得第二个程序头的地址和大小;

68、得到.text的地址;

69、获取pcnlntab的magic信息,搜索所述go二进制文件找到多个magic.location;

70、判断从magic.location+4的地址取16bit位是否为00 00,是则继续;

71、判断从magic.location+6的地址取8bit位是否为01或02或04,是则继续;

72、判断从magic.location+7的地址取8bit位是否为04或08,是则继续;

73、根据判断获取到确定的magic.location,将其设置为pclntab.location。

74、与现有技术相比,本发明实施例的技术方案具有以下有益效果:

75、本发明实施例提供的针对编译优化后的go二级制文件的符号恢复方法及系统,方法包括:获取go二进制文件;当提取到所述go二进制文件的段头信息时,判断所述go二进制文件是否去除符号信息,若未去除所述符号信息,则提取所述符号信息,若去除所述符号信息,则获取pclntab段地址,以恢复所述go二进制文件的符号;当无法提取到所述go二进制文件的段头信息时,提取所述go二进制文件的程序头信息,恢复text段和pclntab段地址,以恢复所述go二进制文件的符号,通过提取段头信息以去除符号信息并获取pclntab地址以恢复符号,极大地提高了go二进制的分析效率。

本文地址:https://www.jishuxx.com/zhuanli/20241021/321265.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。