Сейчас на форуме: asfa (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Dll Inject |
Посл.ответ | Сообщение |
|
Создано: 27 июня 2010 14:08 · Поправил: a1ien · Личное сообщение · #1 Что нетак в этом коде. Падает на последней строчки. Тоесть на CreateRemoteThread(hProcess,NULL, 0, (LPTHREAD_START_ROUTINE)loadlibrary, dllpoint, 0, ThreadId); int main(int argc, _TCHAR* argv[]) { STARTUPINFO si = {0}; PROCESS_INFORMATION pi = {0}; BOOL result = FALSE; HANDLE hToken; TOKEN_PRIVILEGES state; SIZE_T BytesWriten; DWORD ret; HANDLE hProcessSnap; PROCESSENTRY32 pe32; DWORD dwPriorityClass; HANDLE hProcess; printf( TEXT("CreateToolhelp32Snapshot (of processes)") ); char dllPath[] = "C:\Files\Programming\win32\dll\Release\dll.dll"; hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printf( TEXT("CreateToolhelp32Snapshot (of processes)") ); return( FALSE ); } pe32.dwSize = sizeof( PROCESSENTRY32 ); // Retrieve information about the first process, // and exit if unsuccessful if( !Process32First( hProcessSnap, &pe32 ) ) { printf( TEXT("Process32First") ); // show cause of failure CloseHandle( hProcessSnap ); // clean the snapshot object return( FALSE ); } do { // Retrieve the priority class. dwPriorityClass = 0; hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID ); if(!strcmp(pe32.szExeFile,"notepad.exe")){ _tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile ); break; } } while( Process32Next( hProcessSnap, &pe32 ) ); if ( !OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken )) { ret = GetLastError(); printf(_T("LINE: %u\tError: %u"), __LINE__, ret); } state.PrivilegeCount = 1; if ( !LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &state.Privileges[0].Luid )) { ret = GetLastError(); printf(_T("LINE: %u\tError: %u"), __LINE__, ret); } state.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( !AdjustTokenPrivileges( hToken, false, &state, sizeof(state), NULL, NULL )) { ret = GetLastError(); printf(_T("LINE: %u\tError: %u"), __LINE__, ret); } LPVOID dllpoint = VirtualAllocEx(hProcess, NULL, sizeof(dllPath), MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE); WriteProcessMemory(hProcess, dllpoint, dllPath, sizeof(dllPath), &BytesWriten); _tprintf( TEXT("DLL Name Write") ); FARPROC loadlibrary = NULL; LPDWORD ThreadId; loadlibrary = GetProcAddress(GetModuleHandle("Kernel32.dll"), "LoadLibraryA"); CreateRemoteThread(hProcess,NULL, 0, (LPTHREAD_START_ROUTINE)loadlibrary, dllpoint, 0, ThreadId); return( TRUE ); } ![]() |
|
Создано: 27 июня 2010 17:06 · Личное сообщение · #2 |
|
Создано: 27 июня 2010 17:27 · Личное сообщение · #3 |
|
Создано: 27 июня 2010 17:35 · Личное сообщение · #4 Так тогда вопрос в догонку. Библиотеку подгрузил. Но есть одно но. есть вот такой код dll LRESULT CALLBACK KeyHook(int nCode, WPARAM wParam, LPARAM lParam) { MessageBox(0, "Key Hooked.", "HookeD!", 0); return 0; } // Define the DLL's main function BOOL APIENTRY DllMain(HMODULE hModule, DWORD ulReason, LPVOID lpReserved) { // Get rid of compiler warnings since we do not use this parameter UNREFERENCED_PARAMETER(lpReserved); // If we are attaching to a process if(ulReason == DLL_PROCESS_ATTACH) { // Do not need the thread based attach/detach messages in this DLL MessageBox(0, "Locked and Loaded.", "DLL Injection Successful!", 0); HHOOK hHook=SetWindowsHookEx(WH_KEYBOARD, KeyHook, (HINSTANCE) NULL, 0); DisableThreadLibraryCalls(hModule); } // Signal for Loading/Unloading return (TRUE); } MessageBox(0, "Locked and Loaded.", "DLL Injection Successful!", 0); Вызывается при атаче dll но вот MessageBox(0, "Key Hooked.", "HookeD!", 0); почему-то не вызывается при нажатии клавиш. ![]() |
|
Создано: 27 июня 2010 18:16 · Личное сообщение · #5 |
|
Создано: 27 июня 2010 18:33 · Личное сообщение · #6 Дело вот в чем хук по разному пробовал пробовал еще вот так HHOOK hHook=SetWindowsHookEx(WH_KEYBOARD, KeyHook, (HINSTANCE) NULL, GetCurrentThreadId()); Дак вот. если я напишу маленькое gui в котором просто по клику кнопки будет вот такой код HINSTANCE hinstDLL = LoadLibrary(TEXT("dll.dll")); То хук работает а когда подгружаю либу через CreateRemoteThread то неработает. ![]() |
|
Создано: 27 июня 2010 20:36 · Личное сообщение · #7 В мсдн написано: An error may occur if the hMod parameter is NULL and the dwThreadId parameter is zero or specifies the identifier of a thread created by another process. Хотя не уверен, что это относится к удалённым потокам. Скорее твой поток и не должен их получать, потому что получают другие потоки приложения, в который был инжект, а он их не хукает. Либо потому, что твой поток тупо подыхает сразу после исполнения внедрённого кода. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Dll Inject |