_main
首先用ida打开这个程序

然后跳转到main函数,按F5查看伪代码
aE3nifih9bCNDh = "e3nifIH9b_C@n@dH"
这是加密之后的字符串。Dest经过for循环的变化,对应位加上了常数。之后就剩sub_4110BE这个函数没有分析了。
sub_4110BE
进入该函数之后发现跳转到另一个函数sub_411AB0中,然后查看其中的内容。

不难发现这里是base64的加密算法。base64的特征运算如下
1 | b1 = c1 >> 2; |
然后aAbcdefghijklmn = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
进一步说明了这是base64
总结
于是整个流程就是先将输入的flag进行base64编码,然后对应位加上常数,得到加密后的字符串。
1 | import base64 |