65.9K
CodeProject 正在变化。 阅读更多。
Home

HackPro:关于网络的一切

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.80/5 (6投票s)

2007年12月18日

CPOL
viewsIcon

58921

downloadIcon

713

HackPro 是一个为系统管理员和软件开发人员开发的实用程序,用于监控、分析和维护他们的网络。

引言

本文介绍了我编写的工具 HackPro。

背景

HackPro 是一个为系统管理员和软件开发人员开发的实用工具,用于监控、分析和维护他们的网络。它包含许多管理员监控和维护网络所需的各种功能。

它基于黑客之前用来监控和攻击网络的概念开发而成。

HackPro ScreenShot

使用代码

HackPro 具有多种功能,您可以将其代码用于编写。

  • DLL 注入器
  • 理解 Socket API
  • 理解 CSocket 细节。
  • 实现原始数据包发送器
  • 理解 ARP 过程

这是一个 DLL 注入的示例

void InjectDll(HANDLE hProc)
{
 DWORD dwFuncSize=0;
    DWORD dwBytesToAlloc=0;
    LPVOID pRemoteAlloc = NULL;
    REMOTE_INFO remInfo;
    HINSTANCE hKernel32=0;
    CHAR szDllName[MAX_PATH];
    DWORD dwBytesWritten;
    HANDLE hRemoteThread = 0;
    DWORD dwIgnored;
  //
    // Prepare the info to send across
    //
 //HANDLE hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
    hKernel32 = LoadLibrary ("Kernel32");
    remInfo.pLoadLibrary = (pLoadLib_t) GetProcAddress (hKernel32, "LoadLibraryA");
    remInfo.pGetProcAddress = (pGetProcAddr_t) GetProcAddress (hKernel32, "GetProcAddress");
    remInfo.pFreeLibrary = (pFreeLib_t) GetProcAddress (hKernel32, "FreeLibrary");
    strncpy (remInfo.szDllName, DllPath, sizeof (remInfo.szDllName));
    strncpy (remInfo.szProcName, "OnLoad", sizeof (remInfo.szProcName));
    
    //
    // Determine amount of memory to allocate
    //
 dwFuncSize = (DWORD)DummyFunc - (DWORD)RemoteFunction;
    dwBytesToAlloc = dwFuncSize + sizeof (REMOTE_INFO) + 4;
    //
    // Allocate memory in remote proc
    //
    pRemoteAlloc = VirtualAllocEx (hProc, NULL, dwBytesToAlloc,MEM_COMMIT, PAGE_READWRITE);
    if (pRemoteAlloc == NULL)
    {
        CString str;
  str.Format("VirtualAllocEx Error code (GetLastError)=%d",GetLastError());
  MessageBox(NULL,str,"Error",0);
        return ;
    }
     //
    // Write data to the proc
    //
    if(!WriteProcessMemory (hProc, pRemoteAlloc, &remInfo, sizeof (remInfo),&dwBytesWritten))
    {
        CString str;
  str.Format("WriteProcessMemory1 Error code (GetLastError)=%d",GetLastError());
  MessageBox(NULL,str,"Error",0);
        goto exit;
    }
    //
    // Write code to the proc
    //
 if (!WriteProcessMemory (hProc,(PBYTE)pRemoteAlloc + sizeof (REMOTE_INFO) + 4,(LPVOID)(DWORD)RemoteFunction, dwFuncSize, &dwBytesWritten))
 {
        
  CString str;
  str.Format("WriteProcessMemory2 Error code (GetLastError)=%d",GetLastError());
  MessageBox(NULL,str,"Error",0);
        goto exit;
    }
    //
    // Create the remote thread
    //
 //hRemoteThread = CreateRemoteThread (hProc, NULL, 0,(LPTHREAD_START_ROUTINE)remInfo.pLoadLibrary,DllPath, 0,&dwIgnored);
    hRemoteThread = CreateRemoteThread (hProc, NULL, 0,(LPTHREAD_START_ROUTINE)((PBYTE) pRemoteAlloc + sizeof (REMOTE_INFO) + 4),pRemoteAlloc, 0, &dwIgnored);
    if (!hRemoteThread)
    {
        MessageBox(NULL,"CreateRemoteThread Error","Dll Injection Failed",NULL);
        goto exit;
    }
 //WaitForSingleObject (hRemoteThread, INFINITE);
  
exit:
 if (hRemoteThread)
        CloseHandle (hRemoteThread);
   // VirtualFreeEx (hProc, pRemoteAlloc, 0, MEM_RELEASE);
   return ;
}        
© . All rights reserved.