首页
社区
课程
招聘
[原创]GoParser——Yet Another Golang binary parser for IDAPro
发表于: 2020-8-7 10:36 8721

[原创]GoParser——Yet Another Golang binary parser for IDAPro

2020-8-7 10:36
8721

golang_loader_assistjeb-golang-analyzer 启发,本菜为 IDAPro 写了一个更完备的 Go 二进制文件解析工具。现开源出来:

GitHub Repo: 041K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5H3P5r3A6A6j5i4W2#2i4K6u0r3k6$3!0Q4y4h3k6H3j5i4u0K6k6i4t1`.

关于 PIE mode,多说一句。很多人编译 Go 程序时没注意过 go buildmode,其中一个比较特殊的 buildmode=pie,可以生成地址无关的二进制文件,进而结合 ASLR 技术加强自身安全性。这对 Go 自身的内存安全机制来说,是个锦上添花的特性。详情参考:

其实这个 buildmode 还有一个鲜为人知的效果:在用此模式编译出的二进制文件面前,当前业界公开的 Go binary parse script/plugin for disassemblers 就跪了,分析不了。连鄙人眼中曾经最强的 Go 二进制逆向解析工具 redress( hxxps://go-re.tk/redress/ ) 也无能为力:

redress with PIE mode Go binary

使用 GoParser 在 IDA 中分析 DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) 样本中核心的配置文件 struct 解析结果示例如下:

样本源码文件列表:

 
 
 
 
 
 
  • go_parser.py :整套工具的入口文件,在 IDAPro 中 [Alt+F7] 组合键,执行此脚本;
  • common.py: 通用变量和函数定义;
  • pclntbl.py: 解析 pclntab(PC Line Table);
  • strings.py: 解析 strings 和 string pointers;
  • moduldata.py: 解析 firstmoduledata
  • types_builder.py: 解析所有 types
  • itab.py: 解析 itab(Interface Table);.
  1. 自动定位 firstmoduledata 的位置并解析;
  2. 根据 firstmoduledata 中的信息定位到 pclntab(PC Line Table),并从 pclntab 入手解析、恢复函数符号,抽取源码文件列表
  3. 解析 strings 和 string pointers
  4. 根据 firstmoduledata 中的信息,解析所有 types 并为 types 各种属性打上有意义的 comment 或 dref;
  5. 解析 itab(Interface Table);
  6. 以上功能对于 buildmode=pie 类型的 Go binary 文件依然有效。
  1. f7eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4L8$3I4S2L8X3N6Q4x3X3g2G2M7X3N6Q4x3V1k6V1L8$3y4Q4x3V1k6Y4L8K6q4Q4x3X3f1$3i4K6t1K6j5$3!0E0M7r3W2D9k6i4t1`.
  2. a6cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0U0N6h3#2W2L8Y4c8Q4x3V1k6V1i4K6u0r3x3h3&6J5i4K6u0V1g2q4q4t1N6#2)9#2k6X3g2J5y4V1N6a6f1g2u0K6c8U0k6f1y4o6y4s2c8$3S2r3c8r3g2D9M7V1q4b7x3p5&6I4f1#2y4Q4y4h3j5H3x3q4u0Y4h3W2q4Q4x3V1k6W2k6r3W2@1i4K6y4r3M7r3I4A6i4K6y4p5x3g2)9J5x3H3`.`.
  1. 此工具只在 IDA7.2/IDA7.0 上测试过,其他的 IDA 版本未经测试;
  2. strings 解析模块从 golang_loader_assist 移植过来,我自己又增加了 string pointers 解析的功能,目前只支持 x86 架构。
  1. Analyzing Golang Executables
  2. Reversing GO binaries like a pro
  3. Reconstructing Program Semantics from Go binaries.pdf

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2020-8-7 12:14 被无敌甲鱼编辑 ,原因: 新增 PIE module 相关的 refer
收藏
免费 8
支持
分享
最新回复 (7)
雪    币: 968
活跃值: (6863)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
2
感谢大佬分享!  看样子又是一款golang解析神器
2020-8-7 11:32
0
雪    币: 318
活跃值: (418)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
欢迎各位师傅试用,有什么问题直接提
2020-8-7 11:38
0
雪    币: 6266
活跃值: (1276)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4

大佬,与它(65dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9h3u0W2j5i4u0K6i4K6u0r3d9f1c8m8c8$3!0D9j5h3&6Y4d9r3g2D9M7r3g2J5i4@1g2r3i4@1u0o6i4K6R3&6i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1$3i4@1q4r3i4K6V1@1i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0o6i4K6V1^5i4@1f1%4i4@1u0o6i4@1u0m8i4@1f1%4i4K6R3J5i4@1t1&6i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1@1i4@1u0p5i4K6V1#2i4@1f1#2i4K6V1I4i4@1p5J5i4@1g2r3i4@1u0o6i4K6W2r3

最后于 2020-8-7 12:42 被xmhwws编辑 ,原因:
2020-8-7 12:41
0
雪    币: 367
活跃值: (317)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
請問DDGS是什麼項目? O_O
2020-8-7 12:43
0
雪    币: 318
活跃值: (418)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
CuteMiyu 請問DDGS是什麼項目? O_O

DDG 是一个核心样本由 Go 语言编写的挖矿僵尸网络,详情戳:66dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2L8X3g2@1L8r3q4T1i4K6u0W2x3K6j5H3i4K6u0W2j5$3!0E0i4K6u0r3N6r3q4Y4i4K6u0r3k6r3c8Y4i4K6u0r3

最后于 2020-8-7 13:37 被无敌甲鱼编辑 ,原因: 添加 URL
2020-8-7 13:35
0
雪    币: 318
活跃值: (418)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
xmhwws 大佬,与它(2f9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9h3u0W2j5i4u0K6i4K6u0r3d9f1c8m8c8$3!0D9j5h3&6Y4d9r3g2D9M7r3g2J5i4@1g2r3i4@1u0o6i4K6R3&6i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1$3i4@1q4r3i4K6V1@1i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0o6i4K6V1^5i4@1f1%4i4@1u0o6i4@1u0m8i4@1f1%4i4K6R3J5i4@1t1&6i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1@1i4@1u0p5i4K6V1#2i4@1f1#2i4K6V1I4i4@1p5J5i4@1g2r3i4@1u0o6i4K6W2r3
我对 IDAGolangHelper 研究不深入,简单看了下它的源码,有几个点:
1. 现在从它 GitHub Repo 上直接 git clone 下来,无法在 IDA7.0/IDA7.2 上执行;
2. 它不解析 source file paths list;
3. 它不解析 Itab(Interface Table)
4. 它解析 Runtime Type Information 的时候,是把每一种 type 的结构在 IDA 中定义成了 ida_struct,在 IDA 中展示的时候就不那么直观了;
5. 看起来它支持的 Go 版本更多,我的 GoParser 只测试过 Go 1.13+
2020-8-7 14:07
1
雪    币: 318
活跃值: (418)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
xmhwws 大佬,与它(f86K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9h3u0W2j5i4u0K6i4K6u0r3d9f1c8m8c8$3!0D9j5h3&6Y4d9r3g2D9M7r3g2J5i4@1g2r3i4@1u0o6i4K6R3&6i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1$3i4@1q4r3i4K6V1@1i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0o6i4K6V1^5i4@1f1%4i4@1u0o6i4@1u0m8i4@1f1%4i4K6R3J5i4@1t1&6i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1@1i4@1u0p5i4K6V1#2i4@1f1#2i4K6V1I4i4@1p5J5i4@1g2r3i4@1u0o6i4K6W2r3
更多对比&工具盘点参考这篇:
《Go二进制文件逆向分析从基础到进阶(1)——综述》
244K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7K9h3q4&6N6e0m8^5i4K6u0W2j5$3!0E0i4K6u0r3x3U0l9J5x3q4)9J5c8U0l9^5i4K6u0r3x3U0u0Q4x3V1k6Y4L8#2)9J5k6r3u0A6L8X3q4J5P5g2)9J5k6s2u0W2N6X3g2J5M7$3g2Q4x3X3c8W2L8X3N6A6L8X3g2W2M7X3W2F1k6#2)9J5k6s2y4#2L8h3#2S2M7Y4W2Q4x3V1j5`.
2020-11-16 16:42
0
游客
登录 | 注册 方可回帖
返回