Golang call conversion (Golang 调用规约)

0x00 前言

在逆向 Golang 程序时,发现调用约定和平时遇到的 C/C++ 不太一样,ida 反编译效果也不咋样,于是研究一番。

本次分析的 go 版本为 go1.19.3:

1
2
> go version
go version go1.19.3 windows/amd64

0x01 寄存器还是栈

Go internal ABI specification [2] 中给出了函数调用时参数和返回值传递的规范,总的来说:使用寄存器和栈混合放置的方式,优先使用寄存器,不适用的情况使用栈。

IDA flare-emu 教程

0x00 前言

在逆向工程中,常常会遇到加/解密函数,运气好的话发现是常见算法,找个在线工具直接解就好;运气不好的话就得慢慢厘清算法细节,并尝试写脚本还原算法。之前翻四哥 scz 博客 [1] 的时候发现了 flare-emu 这个模拟执行工具,留了个印象,最近逆向时有个解密字符串的需求,就翻出这个工具试用了一下,体验很棒,这里整理了一些基础用法分享给大家。

Windbg Tips

0x00 断点打印

断点打印 eax 的值,然后继续

1
bp 004046A5 ".printf \"res %d\\n\", @eax;g;"

断点打印 eax 和 poi(ebp-0x35c) 的值,然后继续

1
bp 004040e2 ".printf \"%d vs %d \\n\", @eax, poi(ebp-35Ch);g;"

0x01 条件断点

如果 eax 满足条件,则断下,否则继续运行

1
bp 004046A5 ".if(@eax==7ed){.printf \"res %d\\n\", @eax;} .else {gc;}"

IE, death marches and impact

lcamtfu:

我们的技术社区中,有很多像 Linux Tovalds、Steve Jobs 这样的技术偶像,大家尝试模仿他们去改变世界。但现实是,你的职业生涯几乎肯定不会像他们那样被记住(产生类似的影响)。