0x00 分析

这题是go语言(是没见过的语言)

用了IDA8.3(かみ さま),标志什么的好像都有,所以就稀里糊涂地做了

有空一定要专门出一篇GO语言的逆向

然后这题还有反调试(也是第一次见上这个的)

不过还是SharpOD技高一筹

0x01 解

查壳省略(not packed)

上IDA直接搜字符串

可能是go语言的特性(?),字符串并没有直接出现在函数内,而是经过了一个转换

因为这个特性不是很好找密文、加密方法

不过还是试一试

上一下findcrypt

看来有个base64

跟出去发现在main函数中

这个runtime_intstring比较可疑,进去看看

这个v就是base64的表,看来可能是一个换表base64

但是具体怎么换的不太清楚

再回到main函数看看

这个base64换表下面有个equal,猜测是进行对比

然后下面有个main__stmp_3

看来确实是,那么密文呢?

有一说一这个地方蛮麻烦的,不知道是不是go语言的原因

要去到汇编才能看到

这个就是密文了

cPQebAcRp+n+ZeP+YePEWfP7bej4YefCYd/7cuP7WfcPb/URYeMRbesObi/=

看起来就是个base64换表

所以去动调看看表

记录一下位置

开IDA发现运行不起来

查了一下有个这个

看来是加了个反调试,普通的调试不太行

上x64dbg了

下个断运行一下

看来不是一次就出表

那就运行到整个表出来

得到表是

LMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJK

写脚本咯

1
2
3
4
5
6
7
import base64
enc = "cPQebAcRp+n+ZeP+YePEWfP7bej4YefCYd/7cuP7WfcPb/URYeMRbesObi/="
tab1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tab2 = "LMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJK"
print(base64.b64decode(enc.translate(enc.maketrans(tab2, tab1))))

# DASCTF{73913519-A0A6-5575-0F10-DDCBF50FA8CA}