一种针对编译优化后的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 举报,一经查实,本站将立刻删除。
下一篇
返回列表