Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 3 123 CuốiCuối
Kết quả 1 đến 10 của 21
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc Theo Dõi Process. Bắt một process mới hoạt động.

    Chào các bạn ! Mình có môt thắc mắc. mong các bạn chỉ giáo.

    Mình muốn bắt sự kiện khi chúng ta chạy 1 file EXE( cài đặt phần mềm ) thì sẽ hiện lên 1 cửa sổ hỏi có YEs hoặc No . Nếu No thì tắt luôn ko cho cài.
    Còn Yes thì có thể gọi 1 hàm nào đó khác và cho chạy file EXE đó .
    Mong các bạn giúp mình. Mình đang rất cần . Và không còn thời gian nữa
    cám ơn các bạn !

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chào Bạn !
    Cám ơn bạn vì lời góp ý ! Mình sẽ rút kinh nghiệm !
    Vì mình không phải dân lập trình nên kỹ thuật hook API mình chưa có cái nhìn bao quát. Mình chưa hiểu xâu về hook chỉ yêu được nó dùng bắt các sự kiện của window...

    Mình chưa code một Project hoàn chỉnh nào về hook cả.
    Bạn có thể cho mình một ví dụ đầy đủ ( Project ) về hook được không?
    nếu có thể thì lấy luôn cái yêu cầu của bài này được không?

    Khi chưa tìm hiểu đến hook thì giải pháp của mình là đọc số lượng process hiện tại nếu process tăng nên thì pause lại process rồi hỏi kiểm tra... nhưng như vậy thì hok đáp ứng được yêu cầu. ( trong lúc hỏi Yes hoặc No thì Nếu Yes thì ta đưa hàm kiểm tra xem file exe đó có an toàn hay không nếu an toàn thì mới cho chạy còn không an toàn thì cảnh báo người dùng.

    Bạn có thể giải đáp cho mình được không?
    Cám ơn bạn.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nghĩ cách làm của meoconlongvang ở đây là đơn giản và dễ hiểu nhất, tuy chưa phải là phwng pháp tốt nhất nhưng dùng để học hỏi thì quá ok.
    http://forums.congdongcviet.com/showthread.php?t=9820

    Bạn có thể tải file ví dụ ở Post #10 về. Chỉ cần chỉnh sửa phần OpenProcess thành CreateProcessW là ổn

    Hãy cố gắng thử làm. Nếu vẫn chưa giải quyết được thì mình có thể help thêm.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ok ! Mình sẽ thử ! Thanks bạn trước !

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    gianghoplus có nick Yahoo không cho mình xin để tiện trao đổi !

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguyengiaba
    Chào các bạn ! Mình có môt thắc mắc. mong các bạn chỉ giáo.

    Mình muốn bắt sự kiện khi chúng ta chạy 1 file EXE( cài đặt phần mềm ) thì sẽ hiện lên 1 cửa sổ hỏi có YEs hoặc No . Nếu No thì tắt luôn ko cho cài.
    Còn Yes thì có thể gọi 1 hàm nào đó khác và cho chạy file EXE đó .
    Mong các bạn giúp mình. Mình đang rất cần . Và không còn thời gian nữa
    cám ơn các bạn !
    Chào bạn !
    Diễn đàn là nơi để trao đổi học hỏi chứ không phải nơi để nhờ vả.
    Vì thế bạn cần gì đó thì có thể tự viết (bằng tìm tòi hoặc xin chỉ dẫn). Còn nếu rất cần + không có thời gian nên bỏ tiền ra mua là tốt nhất.

    + Cách làm của mình:

    Với ý tưởng đơn giản như của bạn thì có thể nghiên cứu kĩ thuật Hooking API (chỉ cần trên User-mode là đủ) sau đó áp dụng với hàm CreateProcess (A/W)
    Còn nếu bạn có trình độ tốt với các Undocument API thì có thể áp dụng lại với hàm CreateProcessInternalW sẽ toàn diện hơn.

    Kĩ thuật Hooking API là 1 kĩ thuật tương đối khó và có rất nhiều phương pháp. Bạn có thể tìm trên diễn đàn (ngay trong box này hoặc google có rất nhiều)

    Thân !

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn đã đọc hết cả topic đó chưa ???

    Cách làm giống như với hàm OpenProcess2. Bạn hãy viết thêm 1 hàm CreateProcessW2 để điều hướng hàm API CreateProcessW (gốc) qua đó. Trong đó bạn có thể tạo các bộ lọc tùy thích.

    Mình nghĩ thế này đã là hướng dẫn cực kì chi tiết rồi. Nếu không làm được nữa thì mình đành chịu ...

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã nguồn PHP:
    #include "stdafx.h"#pragma data_seg(".shared")DWORD ProtectingPid = 0;#pragma data_seg()HMODULE MyModuleHandle;HHOOK hhk = NULL;DWORD MyPid = 0;unsigned char Store[10];long _stdcall SelfInject();long _stdcall SelfEject();LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam);HANDLE _stdcall OpenProcess2(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId);HANDLE _stdcall CreateProcessW2(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId);void HookAPI();void UnHookAPI();BOOL APIENTRY DllMain( HANDLE hModule, DWORD reason, LPVOID lpReserved ){ if (reason == DLL_PROCESS_ATTACH) { HookAPI(); MyModuleHandle = (HMODULE)hModule; MyPid = GetCurrentProcessId(); } else if (reason == DLL_PROCESS_DETACH) { UnHookAPI(); } return TRUE;}long _stdcall SelfInject(){ ProtectingPid = MyPid; hhk = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,MyModuleHandle,0); return (hhk != NULL);}long _stdcall SelfEject(){ return UnhookWindowsHookEx(hhk);}LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam){ return CallNextHookEx(hhk,nCode,wParam,lParam);}void HookAPI(){ DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; HMODULE hmod = GetModuleHandle("kernel32"); //long pa = (long)GetProcAddress(hmod,"OpenProcess"); //long pa2 = (long)OpenProcess2; long pa = (long)GetProcAddress(hmod,"CreateProcess"); long pa2 = (long)CreateprocessW2; long dAddr = pa2 - pa - 5; unsigned char *p = (unsigned char *)pa; unsigned char *p2 = (unsigned char *)(&dAddr); VirtualProtect((void *)pa,5,NewProtect,&OldProtect); for (int i=0;i<5;i++) Store[i] = p[i]; p[0] = (unsigned char)0xE9; for (int i=0;i<4;i++) p[i + 1] = p2[i]; VirtualProtect((void *)pa,5,OldProtect,&NewProtect);}void UnHookAPI(){ DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE; HMODULE hmod = GetModuleHandle("kernel32"); //long pa = (long)GetProcAddress(hmod,"OpenProcess"); long pa = (long)GetProcAddress(hmod,"CreateProcess"); unsigned char *p = (unsigned char *)pa; VirtualProtect((void *)pa,5,NewProtect,&OldProtect); for (int i=0;i<5;i++) p[i] = Store[i]; VirtualProtect((void *)pa,5,OldProtect,&NewProtect);}HANDLE _stdcall OpenProcess2(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId){ if (dwProcessId == ProtectingPid) { return NULL; } else { UnHookAPI(); HANDLE ans = OpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId); HookAPI(); return ans; }}HANDLE _stdcall CreateProcessW2(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId){ if (dwProcessId == ProtectingPid) { return NULL; } else { UnHookAPI(); HANDLE ans = CreateProcess(dwDesiredAccess,bInheritHandle,dwProcessId); HookAPI(); return ans; }}  
    Bạn xem hộ mình

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình hok hiểu đoạn code này ! nên mới làm một cách máy móc !

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguyengiaba
    Mình hok hiểu đoạn code này ! nên mới làm một cách máy móc !
    Có 2 chỗ sai.

    1. Phải chỉ rõ phiên bản của hàm (Ansi hay WideChar - A/W). Ở đây là CreateProcessW chứ không có hàm CreateProcess, nó chỉ là cách gọi bí danh (Alias) thôi.

    2. Hàm CreateProcessW có cấu trúc khác hàm OpenProcess. Do đó hàm CreateProcessW2 của bạn đã bị sai.

    Xem MSDN: http://msdn.microsoft.com/en-us/libr...25(VS.85).aspx

 

 
Trang 1 của 3 123 CuốiCuối

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
  •