当前位置: 首页 > news >正文

go逆向符号恢复

前言

之前一直没怎么重视,结果发现每次遇到go的题都是一筹莫展,刷几道题练习一下吧

准备

go语言写的程序一般都被strip去掉符号了,而且ida没有相关的签名文件,没办法完成函数名的识别与字符串的定位,所以第一步通常为恢复相应符号文件,网上有许多脚本可以用来恢复
**golang_loader_assist :**靠汇编代码的特征来找出 runtime_morestack 和 runtime_morestack_noctxt 函数,然后在 IDAPro 种遍历对这两个函数交叉引用的位置来找出函数体。
https://github.com/strazzere/golang_loader_assist
**IDAGolangHelper :**从 pclntab 结构中解析、恢复函数符号,Go 二进制文件中还有大量的类型、方法定义的信息,也可以解析出来
https://github.com/sibears/IDAGolangHelper
**go_parser:**功能比前面几个工具更加完善的 Go 二进制文件解析工具,除了解析前面提到的函数名、字符串和数据类型信息
https://github.com/0xjiayu/go_parser
直接用ida运行下载的python文件即可恢复

go go go!

gorev

*ctf的一道签到题,可恶
使用前两个脚本的时候显示代码错误和恢复失败,第三个可以使用
在这里插入图片描述
其中v16是输入前由随机数产生,可以动调产生,比较函数里面应该是直接实现了比较函数,所以看着比较奇怪可以直接看第一个寄存器比较,得到最终的比较字符串

import base64str1 = b'fiAGBkgXN3McFy9hAHRfCwYaIjQCRDFsXC8ZYBFmEDU='str2 = base64.b64decode(str1)
print(str2)rand = b'TcR@3t_3hp_5_G1H'flag =''
for i in range(len(str2)):flag += chr(rand[i % 16] ^ str2[i])print(flag)

easy_go

被strip掉了,用golang_loader_assist恢复符号
在这里插入图片描述

#include"stdio.h"
int main(){int byte_561538[] =
{0xDB, 0x9E, 0xB7, 0x9A, 0x91, 0xCA, 0xA1, 0x6B, 0x97, 0xC1, 0x74, 0xB3, 0x90, 0x00, 0x00, 0x00
};int byte_561518[] =
{0xD3, 0x75, 0x9B, 0xF9, 0xA3, 0x87, 0xED, 0x93, 0x8D, 0xDD, 0x77, 0xED, 0x67, 0x00, 0x00, 0x00
};int byte_561528[] =
{0xB7, 0x9C, 0x79, 0x43, 0x9B, 0xAF, 0x94, 0xE4, 0x94, 0x71, 0xEC, 0xEA, 0x8E, 0x00, 0x00, 0x00
};for(int i=0;i<13;i++){for(int k=0;k<128;k++){if(((byte_561538[i] + byte_561518[i] * k )&0xff) ==byte_561528[i] ){putchar(k);break;}}}getchar();
return 0;
}

注意&与==的优先级,操作单位是字节所以需要异或0xff

go_get_the_flag

先符号恢复然后发现输入是和程序一起输入的,分析程序
在这里插入图片描述
发现有一个比较字符串和输入的长度为18也正好契合
输入得到

fb{.60pcln74b_15_4w350m3}

参考链接:
https://jiayu0x.com/2020/09/28/go-binary-reverse-engineering-tips-and-example/

http://www.lryc.cn/news/107004.html

相关文章:

  • 论文阅读- Uncovering Coordinated Networks on Social Media:Methods and Case Studies
  • 应急响应-Linux
  • 利用spinal的伴生对象简化集成rtl代码过程
  • C# Blazor 学习笔记(7):组件嵌套开发
  • DAY1,C高级(命令,Linux的文件系统,软、硬链接文件)
  • Race竞争型漏洞
  • 基于 FFlogs API 快速实现的 logs 颜色查询小爬虫
  • 【牛客】统计字符
  • 测试|Junit相关内容
  • 19-2.vuex
  • 微信小程序 选择年和月以及回显 使用picker-view组件
  • 助力工业物联网,工业大数据之ST层的设计【二十五】
  • MySQL实践——参数SQL_SLAVE_SKIP_COUNTER的奥秘
  • 小程序面试题
  • 微信小程序接入腾讯云天御验证码
  • Docker build 命令详解
  • 基于Translators的多语言翻译解决方案
  • Unity 性能优化五:渲染模块压力
  • Redis数据库 | 事务、持久化
  • 浅析大数据时代下的视频技术发展趋势以及AI加持下视频场景应用
  • TensorRT学习笔记--基于YoloV8检测图片和视频
  • 【C++】开源:matplotlib-cpp静态图表库配置与使用
  • 香港IT软件开发服务公司Alpha Technology 申请纳斯达克IPO上市
  • JavaScript:数组深拷贝
  • 干翻Dubbo系列第七篇:@EnableDubbo、@DubboService、@DubboReference注解的作用
  • clickhouse断电重启故障解决方案
  • Spring学习笔记之Bean的实例化方式
  • JVM-类加载器
  • ChatGPT在法律行业的市场潜力
  • Python编程从入门到实践练习第三章:列表简介