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 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    sử dụng các hàm của dll sau khi inject vào applicaton đang chạy như thế nào ?

    tình hình là mình đang viết một ứng dụng inject dll vào 1 ứng dụng khác đang chạy và đã inject thành công, bây giờ mình k biết làm thế nào để sử dụng hay liên lạc vs code trong dll đã inject. Ngoài ra mình còn dùng cơ chế share memory nhưng không biết làm thế nào để sử dụng các code trong dll mình đã inject vào applicaton. Mong mọi người giúp đỡ [IMG]images/smilies/smile.png[/IMG] cảm ơn [IMG]images/smilies/smile.png[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kid_191
    tình hình là mình đang viết một ứng dụng inject dll vào 1 ứng dụng khác đang chạy và đã inject thành công, bây giờ mình k biết làm thế nào để sử dụng hay liên lạc vs code trong dll đã inject. Ngoài ra mình còn dùng cơ chế share memory nhưng không biết làm thế nào để sử dụng các code trong dll mình đã inject vào applicaton. Mong mọi người giúp đỡ [IMG]images/smilies/smile.png[/IMG] cảm ơn [IMG]images/smilies/smile.png[/IMG]
    Cách 1:
    Sau khi Inject vào DLL, cách 1 là gọi code của bạn trong DLL Main() của chương trình, nếu DLL Main() của bạn gọi 1 đoạn code mà bạn muốn chạy tới khi chương trình kết thúc thì trong DLL Main() bạn tạo một thread với điều kiện thread đó dừng khi bạn nhận được Signal DLL_DETACH.

    Cách 2: Bạn Hook 1 API nào đó của chương trình chính (bạn cần biết chương trình chính gọi API nào), sau đó forward sang hàm do bạn viết trong dll, rồi gọi ngược lại hàm API cũ nếu cần thiết

  3. #3
    mình có đoạn code get dll vào inject vào ứng dụng đang chạy như sau
    Mã:
    if (hHook == 0)
                {
                    IntPtr hDll = LoadLibrary("C:/Users/khoat_000/Documents/visual studio 2012/Projects/test/Debug/DllTest.dll");
    
                    if (hDll == IntPtr.Zero)
                    {
                        int errorCode = Marshal.GetLastWin32Error();
                        throw new Exception(string.Format("Failed to load library (ErrorCode: {0})", errorCode));
                    }
    
                    HookProcedure = new HookProc(CbtHookProc);
                    int threadID = GetWindowThreadProcessId((IntPtr)window, out processHandle);
    
                    hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookProcedure, hDll, threadID);
                    if (hHook == 0)
                    {
                        MessageBox.Show("SetWindowsHookEx Failed");
                        return;
                    }
                }
                else
                {
                    bool ret = UnhookWindowsHookEx(hHook);
                    //If the UnhookWindowsHookEx function fails.
                    if (ret == false)
                    {
                        MessageBox.Show("UnhookWindowsHookEx Failed");
                        return;
                    }
                    hHook = 0;
                    button1.Text = "Set Windows Hook";
    
                }
    và dll mình có nội dung như sau, chủ yếu để mình test
    Mã:
    DWORD dwOldWndProc = 0;
    
    
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
    HWND ThisHwnd();
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
    
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        HWND hwndThis = 0;
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
            hwndThis = ThisHwnd();
            dwOldWndProc = SetWindowLong(hwndThis, GWL_WNDPROC, (LONG)WindowProc);
        case DLL_THREAD_ATTACH:
    		 hwndThis = ThisHwnd();
            dwOldWndProc = SetWindowLong(hwndThis, GWL_WNDPROC, (LONG)WindowProc);
        case DLL_THREAD_DETACH:
    
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    
    
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch(uMsg)
        {
        case WM_CLOSE:
            //    swprintf_s(duy, MAX_PATH, L"HWND: %i", hwnd);
    		MessageBox(NULL, NULL, "Process2", MB_OK);
           
            break;
        default:
            return CallWindowProc((WNDPROC)dwOldWndProc,hwnd,uMsg,wParam,lParam);
            break;
        };
        return 0;
    };
    
    HWND ThisHwnd()
    {
        HWND hWnd = 0;
        EnumWindows(EnumWindowsProc, (LPARAM)&hWnd);
        return hWnd;
    };
    
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
        DWORD dwPid = 0;
        GetWindowThreadProcessId(hwnd, &dwPid);
        if(dwPid == GetCurrentProcessId())
        {
            *((HWND*)lParam) = hwnd;
            return FALSE;
        };
        return TRUE;
    };
    nội dung dll là bấm cái icon exit cửa app thì sẽ bay ra dialog thông báo, nhưng mà sau khi mình inject dll vào app rồi . Mình bấm nút exit của app thì chả thấy hiện tượng gì, còn của application mình viết thì có dialog xuất hiện. Theo mình nghĩ là do mình get cái Hwnd của chính app mình, làm sao để lấy đc cái hwnd của app mình inject để xử lý trong dll main vậy bạn ? Cám ơn nhiều nha [IMG]images/smilies/smile.png[/IMG]

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

    nội dung dll là bấm cái icon exit cửa app thì sẽ bay ra dialog thông báo, nhưng mà sau khi mình inject dll vào app rồi . Mình bấm nút exit của app thì chả thấy hiện tượng gì, còn của application mình viết thì có dialog xuất hiện. Theo mình nghĩ là do mình get cái Hwnd của chính app mình, làm sao để lấy đc cái hwnd của app mình inject để xử lý trong dll main vậy bạn ? Cám ơn nhiều nha [IMG]images/smilies/smile.png[/IMG]
    Bạn có thể dùng hàm FindWindow(string classname, string text).
    THam khảo thêm ở đây: http://www.pinvoke.net/default.aspx/user32.findwindow

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cách thứ 3 là bạn dùng Injector có khả năng active cái hàm bạn viết. Đại loại như Cheat Engine.
    Cách thứ 4 là bạn tạo ra các Hotkey.
    Còn để lấy đc hwnd thì bạn dùng hàm FindWindow, dùng Spy++ lấy class và tên cửa sổ của app là ok ^.^.
    Để dễ hiểu hơn bạn search tut hack game Pikachu của langman nhé. Mình sài CE và một số Injector thấy việc detect cái function trong dll injected rất tốt. Còn vụ Hotkey thì chắc không biết bạn đã từng hack game online bh chưa ^.^

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    một là share 1 function ví dụ GetMainHWnd(HWND mMainHandle)
    2 là sendmessage có hwnd rồi ở DLL mình xử lý trong WindowProc()
    Chắc viết cái này để làm auto game?

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    chặn exit game có thể bắt 2 mesage này:
    case WM_QUIT:
    case WM_DESTROY:
    return 0;
    break;

 

 

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
  •