Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Trích dẫn Gửi bởi thmn1234
    Hiện tại mình đang dùng một cái Library hỗ trợ inject DLL vào 1 app cụ thể. Đúng là inject DLL vào process thật mà ??
    Như vậy cái Library của bạn khi chạy sẽ hook các API GetMessage hoặc là PeekMessage để inject DLL. Mình nghĩ rằng các tiến trình thông thường trên cửa sổ đều có một số API được thực thi trước 2 cái bạn nêu. Ví dụ như : RegisterClass(Ex), CreateWindow(Ex), ShowWindow, UpdateWindow, LoadIcon, LoadCursor, ..., bạn xem thử có thể Xử một cái nào trong số đó không, chúc bạn may mắn.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm cách nào để inject DLL vào mọi process ngay khi các process đó được bật

    Tình hình là mình có 1 DLL tự làm, mình muốn inject nó vào tất cả các process mà mình sẽ mở (ở trong DLL có code kiểm tra xem có đúng process không, nếu không là return FALSE unload).

    Mình đã dùng API là SetWindowsHookEx, nhưng nó chỉ inject DLL khi process gọi đến API là GetMessage hoặc là PeekMessage thôi. Những process mình muốn inject vào đều có những lời gọi API (mà mình muốn hook) lại chạy trước 2 API đó, nên đợi đến khi inject được thì quá muộn mất rồi [IMG]images/smilies/17.gif[/IMG].

    Các kỹ thuật hook API mình đã làm được, chỉ có system-wide inject như trên là chưa. Nhờ các anh chị giúp mình vụ này ạ.[IMG]images/smilies/2.gif[/IMG]

    Mình target Windows XP 32 bit trở lên (chỉ inject vào process 32 bit), mong muốn là chạy được từ XP lên Windows 10 cả 32bit lẫn 64 bit.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trước khi bạn muốn INJECT (HOOK) bạn nên tham khảo DLL là gì. NẾu bạn có DLL mà bạn muốn INJECT vào process thì không được. Hình như là câu hỏi hơi bị ngược thông thường thì Process inject vào DLL.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hiện tại mình đang dùng một cái Library hỗ trợ inject DLL vào 1 app cụ thể. Đúng là inject DLL vào process thật mà ??

  5. #5
    Trước khi bạn muốn inject bạn cần có 1 process trước, sau khi bạn có process rồi bạn tìm winapi handle hoặc bạn có thể inject qua memory (cái này cần skill biết đoc memory location). Inject sang dạng handle thì dể hơn như mà bạn chỉ có thể làm vài thứ thôi. Nói chung tóm lại bạn ko inject từ 1 dll mà bạn phải có 1 exe nào đó chạy sau đó bạn intercept vào cái process khác như là đọc memory hoặc thay đổi gì đó. Nếu bạn có bao giờ viết patch application qua thì có thể dể hiểu hơn, nếu chưa thì có thể hơi khó cho bạn

  6. #6
    Cái Library đó là để inject dll vào một process cụ thể, cái mình cần là inject vào mọi process được bật trong tương lai cơ.

    Hiện mình đã có 1 exe loader gọi là loader.exe và 1 dll gọi là proxy.dll.

    Code nó như thế này:

    Proxy.dll

    Mã:
    // Proc này chỉ để cho có thôi, nhưng nó phải nằm trong proxy.dllLRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam){    return CallNextHookEx(hHook, ncode, wparam, lparam);}BOOL APIENTRY DllMain(HMODULE hModule,                      DWORD  ul_reason_for_call,                      LPVOID lpReserved                      ){    switch (ul_reason_for_call)    {        case DLL_PROCESS_ATTACH:        {            // code trong này đại loại là kiểm tra xem:            // nếu GetModuleHandle(NULL)            // mà trả về cái handle của loader.exe thì return TRUE ngay lập tức và không hook gì hết            // không thì nếu trả về handle của đúng cái process cần hook thì bắt đầu hook API (mình đã code được rồi)            // còn nếu không thỏa gì hết thì return FALSE ngay lập tức            // mã giả:            if (ThisIsTheLoader() == true)                 return TRUE;            else if (ThisIsTheRightProcess() == true)            {                StartHookAPI();                return TRUE;            }            else return FALSE;        }        case DLL_THREAD_ATTACH:        case DLL_THREAD_DETACH:        case DLL_PROCESS_DETACH:            break;    }    return TRUE;}
    Loader.exe

    Mã:
    // loader của mình đã nạp sẵn proxy.dll lên, rồi chạy hàm này// hinstance là lấy từ proxy.dllint InstallHook(){    SetWindowsHookEx(WH_CBT, HookProc, hinstance, NULL);    return 0;}
    Các process mình cần inject DLL vào - mình sẽ gọi tên chung là Target.exe - tất cả đều có cấu trúc chung chung như thế này:
    Target.exe

    Mã:
    int APIENTRY _tWinMain(HINSTANCE hInstance,                       HINSTANCE hPrevInstance,                       LPTSTR    lpCmdLine,                       int       nCmdShow){    //...    IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION); // hàm này và nhiều hàm khác chỉ chạy 1 lần duy nhất thôi    //...    while (GetMessage(&msg, NULL, 0, 0))     {        TranslateMessage(&msg);        DispatchMessage(&msg);    }    //...    return 0;}
    Và kết quả là proxy.dll của mình trông có vẻ là đã được inject vào tất cả các các target.exe mình cần.

    Nhưng thực ra là khi target.exe chạy đến hàm GetMessage thì proxy.dll của mình mới được hook vào.

    Dẫn tới việc hàm Direct3DCreate9 bị bỏ sót, hàm đó chạy trước khi proxy.dll của mình kịp được inject. Đến khi DLL của mình hook vào được thì quá muộn: hàm API đã chạy rồi thì hook cũng như không vì nó chỉ chạy 1 lần duy nhất.

    Nên mình mới muốn tìm một kỹ thuật khác để có thể inject được proxy.dll của mình vào target.exe đúng ngay thời điểm nó hình thành trong hệ thống.

    Mình thấy thư viện madHookCode làm được, thư viện này http://www.dllinjection.com/APIs/FAQs.htm demo của nó cũng làm được, nhưng mà toàn là thư viện phải mua cả.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn có thể sử dụng 1 trong 2 cách sau:
    1. Nếu bạn biết tiến trình cha (tiến trình mà sẽ chạy Target.exe) thì trước hết tiêm DLL vào cha, hook CreateProcess của thằng cha là được.
    2. Thêm DLL của bạn vào khóa AppInit_DLLs trong HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows. Lưu ý là sau khi thêm thì DLL của bạn sẽ được nạp vào mọi tiến trình trong quá trình khởi tạo. Xem thêm https://support.microsoft.com/en-us/kb/197571

    Cầu kì hơn thì có thể viết driver để hook thẳng vào lõi của HĐH.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi greigaz
    bạn có thể sử dụng 1 trong 2 cách sau:
    1. Nếu bạn biết tiến trình cha (tiến trình mà sẽ chạy Target.exe) thì trước hết tiêm DLL vào cha, hook CreateProcess của thằng cha là được.
    2. Thêm DLL của bạn vào khóa AppInit_DLLs trong HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows. Lưu ý là sau khi thêm thì DLL của bạn sẽ được nạp vào mọi tiến trình trong quá trình khởi tạo. Xem thêm https://support.microsoft.com/en-us/kb/197571

    Cầu kì hơn thì có thể viết driver để hook thẳng vào lõi của HĐH.
    Bạn có biết tài liệu gì về viết driver không, hình như để làm trên win 64 bit còn phải tốn tiền mua cả trusted sign nữa.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •