tinjlib.c

来自「一本已经绝版的好书」· C语言 代码 · 共 114 行

C
114
字号
/*************************************************************
Module name: TInjLib.C
Notices: Copyright (c) 1995-1997 Jeffrey Richter
*************************************************************/


#include "..\CmnHdr.H"                  /* See Appendix C. */
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <tchar.h>
#include "InjLib.H"
#include "Resource.h"


/////////////////////////////////////////////////////////////


BOOL Dlg_OnInitDialog (HWND hwnd, HWND hwndFocus, 
   LPARAM lParam) {

   // Associate an icon with the dialog box.
   chSETDLGICONS(hwnd, IDI_TINJLIB, IDI_TINJLIB);
   
   return(TRUE);
}


/////////////////////////////////////////////////////////////


void Dlg_OnCommand (HWND hwnd, int id, 
   HWND hwndCtl, UINT codeNotify) {
   
   BOOL fTranslated;
   DWORD dwProcessId;
   HANDLE hProcess;

   switch (id) {
      case IDC_INJECT:
         dwProcessId = GetDlgItemInt(hwnd, IDC_PROCESSID, 
            &fTranslated, FALSE);
         if (dwProcessId == 0) {
            // A process ID of 0 causes everything to take 
            // place in the local process; this makes things
            // easier for debugging.
            dwProcessId = GetCurrentProcessId();
         }

         // Get a handle for the target process.
         hProcess = OpenProcess(
            PROCESS_CREATE_THREAD     |   // For CreateRemoteThread
            PROCESS_QUERY_INFORMATION |   // For VirtualQueryEx
            PROCESS_VM_OPERATION      |   // For VirtualProtectEx
            PROCESS_VM_READ           |   // For ReadProcessMemory
            PROCESS_VM_WRITE,             // For WriteProcessMemory
            FALSE, dwProcessId);

         if (hProcess == NULL) {

            chMB((GetLastError() == ERROR_ACCESS_DENIED) ? 
               __TEXT("Insufficient access to process")
                  : __TEXT("Invalid process Id"));
         } else {

            TCHAR szLibFile[MAX_PATH];
            GetModuleFileName(NULL, 
               szLibFile, sizeof(szLibFile));
            _tcscpy(_tcsrchr(szLibFile, 
               __TEXT('\\')) + 1, __TEXT("ImgWalk.DLL"));
            chMB(InjectLib(hProcess, szLibFile) ? 
               __TEXT("Remote DLL Loaded") : 
               __TEXT("Remote DLL failed load"));
            CloseHandle(hProcess);
         }
         break;

      case IDCANCEL:
         EndDialog(hwnd, id);
         break;
   }
}

/////////////////////////////////////////////////////////////


BOOL CALLBACK Dlg_Proc (HWND hwnd, UINT uMsg, 
   WPARAM wParam, LPARAM lParam) {

   switch (uMsg) {
      chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
      chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
   }

   return(FALSE);
}


/////////////////////////////////////////////////////////////


int WINAPI _tWinMain (HINSTANCE hinstExe,
   HINSTANCE hinstPrev, LPTSTR pszCmdLine, int nCmdShow) {

   chWARNIFUNICODEUNDERWIN95();
   DialogBox(hinstExe, MAKEINTRESOURCE(IDD_TINJLIB), 
      NULL, Dlg_Proc);

   return(0);
}


//////////////////////// End Of File ////////////////////////

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?