2014-10-01 7 views
1

Я разместил недавний вопрос о SO около code injection, этот подобный, но не тот же. Я вставляю dll в Firefox, он внедряется успешно, но код в DLL не запускается. Если я вставляю один и тот же код в пользовательское приложение, он работает. Почему это может быть так. Это код, который я использую.Dll не загружается в Firefox, но загружается в пользовательское приложение

Injector.exe // файл, который инъекционного код

#include <stdio.h> 
#include <windows.h> 

#define procId 2844 
#define dllname "dllinject.dll" // located in same directory 

int main() 
{ 
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, procId); 
    LPVOID allocated = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(dllname), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(hProc, (LPVOID)allocated, dllname, strlen(dllname), NULL); 
    LPVOID libaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 
    CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)libaddr, NULL, NULL); 
    CloseHandle(hProc); 
    return 0; 
} 

Simpleinjected.exe // файл впрыскивается

#include <stdio.h> 

int main() 
{ 
    printf("Hello"); 
    return 0; 
} 

dllinject.dll

#include <windows.h> 

int message(const char *msg) 
{ 
    MessageBox(NULL, msg, "Message from Dll", MB_OK); 
    return 0; 
} 

BOOL WINAPI DLLMain(HINSTANCE hInstDll, DWORD ulReason, LPVOID lpReserved) 
{ 
    switch(ulReason) 
    { 
     case DLL_PROCESS_ATTACH: 
      message("process attach"); 
      break; 
     case DLL_THREAD_ATTACH: 
      message("thread attach"); 
      break; 
     case DLL_PROCESS_DETACH: 
      message("process detach"); 
      break; 
     case DLL_THREAD_DETACH: 
      message("thread detach"); 
      break; 
    } 
    return true; 
} 

Он работает, когда вводится в simpleinjected.exe, но при введении в Firefox ничего не происходит, даже если DLL успешно введена.

ответ

0

Я не могу воспроизвести ваши наблюдения. Мне удалось ввести dllinject.dll в другие процессы (также firefox), но я никогда не видел окна сообщений.

После небольшого рытья я обнаружил, что ваш DLLMain указан неправильно. Измените его на DllMain, и вы увидите окна сообщений в Firefox.

Кстати: Вы Propably хочет изменить MessageBox в MessageBeep поскольку FireFox создает/уничтожает много потоков ... (это раздражает даже для быстрой проверки!)