Консультация № 87531
18.05.2007, 17:54
0.00 руб.
0 1 1
Здраствуйте
Пытаюсь с помощью удаленных потоков внедриться в процесс, но ничего не выходит. CreateRemoteThread вызывается нормально в hThread чего-то записывает. Но DllEntryPoint не вызывается. Помогите plz найти ошибку

Приложение:
//inj.dll#include <windows.h>#pragma argsusedint WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved){HANDLE file=CreateFile("c:\inject.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); CloseHandle(file); return 1;}//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include <Tlhelp32.h>#include <windows.h>#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------------------------------------------int GetProcessId(AnsiString exename){ HANDLE hSnap; int result = 0; PROCESSENTRY32 pe; int procid; AnsiString procexe; pe.dwSize = sizeof(pe); hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if( Process32First(hSnap,&pe) ) { for(;Process32Next(hSnap,&pe);) { procexe = pe.szExeFile; procid = pe.th32ProcessID; if(ExtractFileName(procexe)==ExtractFileName(exename)) { result = procid; break; } } } CloseHandle(hSnap); return result;}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ char cb[] = "inj.dll"; HANDLE hProcess = NULL, hThread = NULL; LPVOID pszLibFileRemote = NULL; if(!(FindWindow("SciCalc","Калькулятор"))) { WinExec("calc",SW_SHOWNA); FindWindow("SciCalc","Калькулятор"); } int ID = GetProcessId("calc.exe"); hProcess = OpenProcess(PROCESS_QUERY_INFORMATION| PROCESS_CREATE_THREAD| PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, ID); byte cch = sizeof(cb); pszLibFileRemote = VirtualAllocEx(hProcess, NULL, cch, MEM_COMMIT, PAGE_READWRITE);WriteProcessMemory(hProcess, pszLibFileRemote, cb, cch, NULL); HMODULE hMod =GetModuleHandle("kernel32"); PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryA"); hThread = CreateRemoteThread(hProcess, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL);}

Обсуждение

Неизвестный
19.05.2007, 11:53
общий
это ответ
Здравствуйте, Sov!
Скорее всего нужно указывать полное имя библиотеки.
Т.е. - полный путь до нее.
Удачи!
Форма ответа