Сейчас на форуме: asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Dll Inject
Посл.ответ Сообщение

Ранг: 6.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 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 );
}




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 27 июня 2010 17:06
· Личное сообщение · #2

А поглядеть в отладчике не катит?



Ранг: 6.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июня 2010 17:27
· Личное сообщение · #3

Сори сам дурак. Не прочитал внимательно msdn.



Ранг: 6.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 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); почему-то не вызывается при нажатии клавиш.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 27 июня 2010 18:16
· Личное сообщение · #5

Параметры функции SetWindowsHookEx проверяй. Вряд ли вообще ставится. И ещё раз мсдн прочитай. И кнопку Правка освой.



Ранг: 6.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июня 2010 18:33
· Личное сообщение · #6

Дело вот в чем
хук по разному пробовал
пробовал еще вот так
HHOOK hHook=SetWindowsHookEx(WH_KEYBOARD, KeyHook, (HINSTANCE) NULL, GetCurrentThreadId());
Дак вот.
если я напишу маленькое gui в котором просто по клику кнопки будет вот такой код
HINSTANCE hinstDLL = LoadLibrary(TEXT("dll.dll"));
То хук работает а когда подгружаю либу через CreateRemoteThread то неработает.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 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
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати