#include <windows.h>
#include <string.h>
#include "ui.h"
#define TEXTBOX_PROCESS 3000
#define TEXTBOX_DLL 3001
#define BUTTON_INJECT 3002
#define BUFFER_SIZE 128
TCHAR processName[BUFFER_SIZE];
TCHAR dllName[BUFFER_SIZE];
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hMainWnd;
MSG msg;
RegisterWndClass(WndProc, TEXT("Injector"), COLOR_WINDOW);
hMainWnd = CreateWindow(TEXT("Injector"), TEXT("Injector"),
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, 0, 250, 130, (HWND)NULL, (HMENU)NULL,
(HINSTANCE)hInstance, NULL);
if (!hMainWnd)
{
MessageBox(NULL, TEXT("Can\'t create main window."), TEXT("Error"), MB_OK);
return GetLastError();
}
ShowWindow(hMainWnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
TCHAR buffer[BUFFER_SIZE];
switch (uMsg)
{
case WM_CREATE:
/* Create text box containing process name */
CreateWindow(TEXT("EDIT"), NULL, WS_BORDER | WS_VISIBLE | WS_CHILD | ES_LEFT | ES_MULTILINE,
10, 10, 120, 20, hWnd, (HMENU)TEXTBOX_PROCESS, NULL, NULL);
/* Create text box containing dll name */
CreateWindow(TEXT("EDIT"), NULL, WS_BORDER | WS_VISIBLE | WS_CHILD | ES_LEFT | ES_MULTILINE,
10, 35, 120, 20, hWnd, (HMENU)TEXTBOX_DLL, NULL, NULL);
/* Create button to inject dll */
CreateWindow(TEXT("BUTTON"), TEXT("Inject"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
150, 10, 60, 20, hWnd, (HMENU)BUTTON_INJECT, NULL, NULL);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
EndPaint(hWnd, &ps);
break;
case WM_SIZE:
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case BUTTON_INJECT:
GetWindowText(hWnd, buffer, sizeof(buffer));
strncpy(processName
, buffer
, BUFFER_SIZE
); break;
default:
break;
}
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
I2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAidWkuaCIKCiNkZWZpbmUgVEVYVEJPWF9QUk9DRVNTCTMwMDAKI2RlZmluZSBURVhUQk9YX0RMTAkJMzAwMQojZGVmaW5lIEJVVFRPTl9JTkpFQ1QJMzAwMgoKI2RlZmluZSBCVUZGRVJfU0laRQkJMTI4CgpUQ0hBUiBwcm9jZXNzTmFtZVtCVUZGRVJfU0laRV07ClRDSEFSIGRsbE5hbWVbQlVGRkVSX1NJWkVdOwoKTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCB1TXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKCmludCBXSU5BUEkgV2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBTVFIgbHBDbWRMaW5lLCBpbnQgbkNtZFNob3cpCnsKCUhXTkQgaE1haW5XbmQ7CglNU0cgbXNnOwoJCglSZWdpc3RlclduZENsYXNzKFduZFByb2MsIFRFWFQoIkluamVjdG9yIiksIENPTE9SX1dJTkRPVyk7CgoJaE1haW5XbmQgPSBDcmVhdGVXaW5kb3coVEVYVCgiSW5qZWN0b3IiKSwgVEVYVCgiSW5qZWN0b3IiKSwKCQlXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX01JTklNSVpFQk9YLAoJCUNXX1VTRURFRkFVTFQsIDAsIDI1MCwgMTMwLCAoSFdORClOVUxMLCAoSE1FTlUpTlVMTCwKCQkoSElOU1RBTkNFKWhJbnN0YW5jZSwgTlVMTCk7CgoJaWYgKCFoTWFpblduZCkKCXsKCQlNZXNzYWdlQm94KE5VTEwsIFRFWFQoIkNhblwndCBjcmVhdGUgbWFpbiB3aW5kb3cuIiksIFRFWFQoIkVycm9yIiksIE1CX09LKTsKCQlyZXR1cm4gR2V0TGFzdEVycm9yKCk7Cgl9CgoJU2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwoKCXdoaWxlIChHZXRNZXNzYWdlKCZtc2csIE5VTEwsIDAsIDApKQoJewoJCVRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CgkJRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwp9Cn0KCkxSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgdU1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKewoJSERDIGhEQzsKCVBBSU5UU1RSVUNUIHBzOwoJUkVDVCByZWN0OwoJVENIQVIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKCglzd2l0Y2ggKHVNc2cpCgl7CgljYXNlIFdNX0NSRUFURToKCQkvKiBDcmVhdGUgdGV4dCBib3ggY29udGFpbmluZyBwcm9jZXNzIG5hbWUgKi8KCQlDcmVhdGVXaW5kb3coVEVYVCgiRURJVCIpLCBOVUxMLCBXU19CT1JERVIgfCBXU19WSVNJQkxFIHwgV1NfQ0hJTEQgfCBFU19MRUZUIHwgRVNfTVVMVElMSU5FLAoJCQkxMCwgMTAsIDEyMCwgMjAsIGhXbmQsIChITUVOVSlURVhUQk9YX1BST0NFU1MsIE5VTEwsIE5VTEwpOwoJCS8qIENyZWF0ZSB0ZXh0IGJveCBjb250YWluaW5nIGRsbCBuYW1lICovCgkJQ3JlYXRlV2luZG93KFRFWFQoIkVESVQiKSwgTlVMTCwgV1NfQk9SREVSIHwgV1NfVklTSUJMRSB8IFdTX0NISUxEIHwgRVNfTEVGVCB8IEVTX01VTFRJTElORSwKCQkJMTAsIDM1LCAxMjAsIDIwLCBoV25kLCAoSE1FTlUpVEVYVEJPWF9ETEwsIE5VTEwsIE5VTEwpOwoJCS8qIENyZWF0ZSBidXR0b24gdG8gaW5qZWN0IGRsbCAqLwoJCUNyZWF0ZVdpbmRvdyhURVhUKCJCVVRUT04iKSwgVEVYVCgiSW5qZWN0IiksIFdTX0NISUxEIHwgQlNfUFVTSEJVVFRPTiB8IFdTX1ZJU0lCTEUsCgkJCTE1MCwgMTAsIDYwLCAyMCwgaFduZCwgKEhNRU5VKUJVVFRPTl9JTkpFQ1QsIE5VTEwsIE5VTEwpOwoJCWJyZWFrOwoJY2FzZSBXTV9QQUlOVDoKCQloREMgPSBCZWdpblBhaW50KGhXbmQsICZwcyk7CgkJR2V0Q2xpZW50UmVjdChoV25kLCAmcmVjdCk7CgkJRW5kUGFpbnQoaFduZCwgJnBzKTsKCQlicmVhazsKCWNhc2UgV01fU0laRToKCQlicmVhazsKCWNhc2UgV01fQ0xPU0U6CgkJRGVzdHJveVdpbmRvdyhoV25kKTsKCQlicmVhazsKCWNhc2UgV01fREVTVFJPWToKCQlQb3N0UXVpdE1lc3NhZ2UoMCk7CgkJYnJlYWs7CgljYXNlIFdNX0NPTU1BTkQ6CgkJc3dpdGNoIChMT1dPUkQod1BhcmFtKSkKCQl7CgkJY2FzZSBCVVRUT05fSU5KRUNUOgoJCQlHZXRXaW5kb3dUZXh0KGhXbmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwoJCQlzdHJuY3B5KHByb2Nlc3NOYW1lLCBidWZmZXIsIEJVRkZFUl9TSVpFKTsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJYnJlYWs7CgkJfQoJCWJyZWFrOwoJZGVmYXVsdDoKCQlyZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7Cgl9CglyZXR1cm4gMDsKfQo=