红明谷-g0
看名字就是go语言题目,用IDA-golang-helper
还原符号表之后,看到只有几个函数,其中main_Encode
就是加密函数
函数逻辑比较简单,输入长度等于20,打乱位置,进入main_Encode
加密,最后进入main_fun1
进行比较,直接看main_Encode
中的加密算法
动态调试后发现一张表,表的长度为58位,判断为换表base58加密
进入main_fun1
函数中找到加密后的字符串,注意 runtime_memequal
这个比较的函数需要在汇编中寻找比较的字符串首地址,在伪代码中是找不到的
import base58
Cipher = '2GVdudkYo2CBXoQii7gfpkjTc4gT'
Plain = ''
new_table = '12Nrst6CDquvG7BefghJKLMEFHPQZabRSTUVmyzno89ApwxWXYcdkij345'
old_table = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
for i in range(len(Cipher)):
Plain += old_table[new_table.index(Cipher[i])]
print(base58.b58decode(Plain.encode