京东网站开发费用,做信息网站怎么样,网站推广策略含义,目前建设网站前言
之前一直没怎么重视#xff0c;结果发现每次遇到go的题都是一筹莫展#xff0c;刷几道题练习一下吧
准备
go语言写的程序一般都被strip去掉符号了#xff0c;而且ida没有相关的签名文件#xff0c;没办法完成函数名的识别与字符串的定位#xff0c;所以第一步通常…前言
之前一直没怎么重视结果发现每次遇到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 bfiAGBkgXN3McFy9hAHRfCwYaIjQCRDFsXC8ZYBFmEDUstr2 base64.b64decode(str1)
print(str2)rand bTcR3t_3hp_5_G1Hflag
for i in range(len(str2)):flag chr(rand[i % 16] ^ str2[i])print(flag)
easy_go
被strip掉了用golang_loader_assist恢复符号
#includestdio.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 i0;i13;i){for(int k0;k128;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/