用命令strings看文件会发现两个base64,但是直到解完好像都没看到咋用到的,我们直接将文件放入ida,可以看到文件其实是会有个反调试的,在tls回调函数上,可是,远程调试直接无视掉,他并没有check远程的那个进程,那么发现用户名必须是nsfocus,然后会将它取MD5小写存起来,然后在tls那里会置一个特征flag值为2,然后初始化一个字符串入栈nomoney,这个同样作为key存起来,这时候将输入的密码的最后一位xor 2 xor key中对应长度的那个 xor 用户名md5逐位,所以得到脚本。
import osmd5_key = 'b9b7dd1c421e005bc9a7f70b848e3d0e'nokey = list('nomoney')flag_index = 2ff = [0x51, 0x3C, 0x0F, 0x67, 0x5C, 0x2C, 0x41, 0x53, 0x6A, 0x49, 0x70, 0x51, 0x68, 0x54, 0x2B, 0x23, 0x5B, 0x64, 0x0E, 0x60, 0x6A, 0x43, 0x69, 0x46, 0x69, 0x0C, 0x25, 0x41, 0x72, 0x44, 0x16, 0x72]# print chr(0x72^ord(md5_key[1])^ord(nokey[2])^0x16)flag = [0 for i in range(32)]for i in range(len(ff)):if i == 0:num = 2else:num = ff[len(ff)-i]flag[len(ff) - i - 1] = chr(num^ord(md5_key[i])^ord(nokey[(len(ff)-1-i)%7])^ff[len(ff)-1-i])print "".join(flag)
