原创 PE病毒之API函數地址獲取

編寫病毒程序時,由於各種原因不能直接調用函數,所以需要手動獲取到函數然後調用它。最常見手動獲取函數地址的方法是通過獲取kernel32.dll句柄,然後遍歷kernel32.dll的導出表找到它的GetProcAddress()函數,

原创 PE病毒之代碼重定位技術

int g_nTest; __asm { call Dels Dels: pop ebx lea

原创 Windows網絡編程(六):IP Helper

IP Helper是Windows系統與IP配置和管理的重要接口,通過IP Helper 可以獲得很多跟網絡配置相關的信息。比如說本機IP、網關設置、網卡數量和連接信息。 #include <windows.h> #include "

原创 Windows網絡編程(二):Socket簡介

Socket簡介 Socket被稱爲套接字,描述了IP和端口等信息,是一個通信鏈的句柄。 微軟專門開發了一套支持多種網絡協議的網絡編程接口,叫做Winsock,Winsock是Windos SDK的一部分,全稱Windows Sock

原创 Windows網絡編程(三):建立TCP連接和收發消息

先看服務端: // ConsoleApplication3.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #define _WINSOCK_DEPRECATED_NO_WARNINGS

原创 Windows程序和消息機制(二):消息有關的函數

不同窗口程序可以通過消息進行交互,主要用到的函數如下: FindWindow 獲取一個窗口的句柄。 HWND FindWindow( LPCTSTR lpClassName,// 類名 LPCTSTR lpWindowN

原创 Windows網絡編程(一):TCP/IP協議

概述 這個協議是一個四層協議: 應用層,主要協議有HTTP、FTP等 傳輸層,主要協議有TCP、UDP等 網絡層,主要協議有IP等 鏈路層,主要協議有ICMP等 下層中的協議總是爲上層中的協議服務的,比如說應用層的HTTP、FTP

原创 Windows內核基礎(一):權限級別

權限級別是CPU中的一個概念,CPU中包含4個權限級別,分別是0環,1環,2環,3環,CPU設計製造商最初希望0環用於運行內核,1環和2環運行設備驅動,3環運行應用程序,但是系統設計者爲了簡單將驅動和內核都放在0環,應用程序放在3環

原创 Windows內核基礎(二):虛擬內存空間佈局

32位Windows操作系統支持32位尋址,因此2的32次方就等於4GB,每個程序在運行時都會被映射進4GB空間的內存空間,這4GB空間不全是用戶可以使用的,其中0x7fffffff-0xffffffff是2GB的內核空間,這部分用

原创 Windows網絡編程(五):多線程消息處理

對於服務端來說,調用accept()函數同意客戶端連接的請求後,需要處理完與這個客戶端的通信後回到accept()繼續等待下一個客戶端的連接,如果一個客戶端請求連接時服務端並沒有在accept()處等待,客戶端是無法成功連上服務端的,

原创 Windows網絡編程(九):消息選擇模型

概述 之前介紹過,系統提供了幾種網絡模型用於異步的網絡交互,消息選擇模型就是其中一種。 這種模型的使用需要在調用完socket()函數以後調用WSAAsyncSelect(),這個函數的聲明如下: int WSAAsyncSele

原创 Windows網絡編程(八):非阻塞模式(異步模式)

前面幾篇文章介紹的無論是TCP通信還是UDP通信都是阻塞式的,它們在執行recv或recvfrom時會在線程中等待,直到接收到信息爲止,所以在應用的時候一般都需要開闢子線程,在子線程裏專門做這類事情,不然它會影響主線程的運行。 

原创 Windows網絡編程(四):建立UDP連接和收發消息

UDP消息的發送和接收需要UDP連接,所以,上面的TCP連接已經不適用了,具體的區別主要有: 創建Socket時參數不同創建服務端時不需要listen和accept操作創建客戶端時不需要connect操作服務器需要bind操作,客戶端

原创 Windows程序和消息機制(三):消息與進程間通信

自定義消息與進程間通信 窗口程序可以接收自定義的消息類型,前提是通信的進程聲明瞭這種消息類型,聲明的方法很簡單,WM_USER加一個值就可以了,一般加的值從0x400開始,其他的值已經被系統使用了。 實現一個完整的自定義消息

原创 Windows網絡編程(七):原始套接字開發

在調用socket()函數時,如果將第二個參數填爲SOCK_RAW,代表創建的是原始套接字類型,第三個參數可以選擇IPPROTO_ICMP、IPPROTO_TCP、IPPROTO和IPPROTO_RAW。 #include <wins