2016-04-13 14 views
-3

Dosya çöküyor varsayıyorum, çünkü enjeksiyon sırasında, bir imleç alıyorum ve pencere asla açılır. Hiçbir uyarı veya hata olmadan mükemmel şekilde derler ve çalışma zamanında çalışmaz. Bunu neden aldığımı açıklayan herhangi bir açıklama, onu düzeltmeme yardımcı olacaktı. Teşekkürler!.DLL, mükemmel bir şekilde çalışıyor ancak çalışma zamanında çöküyor?

Kodu (güncellenmiş bugün):

#include <windows.h> 

LRESULT CALLBACK DllWindowProcedure(HWND ParentWindow, UINT Message, WPARAM WParam, LPARAM LParam) 
{ 
    switch (Message) 
    { 
     case WM_COMMAND: 
      //Do stuff. 
     break; 
     case WM_DESTROY: 
      ExitThread(0); 
     break; 
     case WM_QUIT: 
      ExitThread(0); 
     break; 
     default: 
      return DefWindowProc(ParentWindow, Message, WParam, LParam); 
    } 
    return 0; 
} 

DWORD __stdcall Initiate(void * PData) 
{ 
    WNDCLASSEX WindowClass; 
    WindowClass.hInstance = GetModuleHandle(NULL); 
    WindowClass.lpszClassName = "DllWindowClass"; 
    WindowClass.lpfnWndProc = DllWindowProcedure; 
    WindowClass.style = CS_DBLCLKS; 
    WindowClass.cbSize = sizeof(WNDCLASSEX); 
    WindowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    WindowClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
    WindowClass.hCursor = LoadCursor(NULL, IDC_ARROW); 
    WindowClass.lpszMenuName = "DllMenuClass"; 
    WindowClass.cbClsExtra = 0; 
    WindowClass.cbWndExtra = 0; 
    WindowClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND; 
    HINSTANCE Instance = GetModuleHandle(NULL); 
    HWND ParentWindow = CreateWindowEx(
     NULL, 
     "DllWindowClass", 
     "Agsploit - v1.1 - By: Agluk15", 
     (WS_SYSMENU | WS_MINIMIZEBOX), 
     200, 
     200, 
     500, 
     400, 
     NULL, 
     NULL, 
     Instance, 
     NULL 
    ); 
    ShowWindow(ParentWindow, SW_SHOWNORMAL); 
    MSG Messages; 
    while (GetMessage(&Messages, NULL, 0, 0)) 
    { 
     TranslateMessage(&Messages); 
     DispatchMessage(&Messages); 
    }; 
    return NULL; 
}; 

bool WINAPI DllMain(HINSTANCE DllInstance, DWORD Reason, LPVOID Reserved) 
{ 
    DisableThreadLibraryCalls(DllInstance); 
    if (Reason == DLL_PROCESS_ATTACH) 
    { 
     CreateThread(0, 0, Initiate, 0, 0, 0); 
    }; 
    return true; 
}; 
+3

Her zaman olur. Derleme kodu mantığın iyi olduğu anlamına gelmez. Çalıştığından emin olmak için DLL kodunu DLL sarıcı olmadan sınadınız mı? – user4581301

+0

DLL sarıcı? Üzgünüm, terminolojinize aşina değilim. Belki biraz açıklama ..? –

+1

Kodu DLL'ye dönüştürmeden önce sınadınız mı? – user4581301

cevap

3

İşte bariz bir problem.

CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Initiate, 0, 0, 0); 

LPTHREAD_START_ROUTINE için Initiate açık dökme ölü bir hediye olduğunu.

DWORD __stdcall Initiate(void* pData) 
{ 
    ... 
} 

Ve CreateThread müstehcen atması giderme:

CreateThread(0, 0, Initiate, 0, 0, 0); 

Dll enjeksiyon sadece olursa olsun iyi niyetinin ne sistem dengesizliğine neden oluyor şöyle

Declare başlatın. Görünüşe göre, Windows'da iş parçacığının yanı sıra bir sistem programcısının yapması gereken bir iş parçacığı - ve bu da DLL enjeksiyonunu yapmamanın daha çok nedenidir. Dikkatlice basmak.

+0

Endişenizi takdir ediyorum ama henüz programcı değilim - 13 yaşındayım. Ancak, bir gün kendiniz gibi bir programcı olmasını umuyorum. –

+1

Programlama yapıyorsunuz, siz bir programcısınız. –

İlgili konular