-
02-10-2010, 06:13 PM #1Junior Member
- 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 !View more random threads:
- Xem source code của các hàm API chỗ nào?
- Get Url Active Firefox ?
- Làm thế nào để đọc dữ liệu thanh ghi eax tại 1 dòng lệnh ASM
- Sử dụng DLL giao tiếp giữa các Process ?
- Socket - Internet Explorer Ecrypt, Rút gọn Link đăng nhập ?
- Xử lý thông điệp tạo của sổ mới?? (API)
- ứng dụng Build bằng = win32 không thể Hook trên Win64 ?
- Đối số thứ 3 của hàm SetWindowHookEx (HINSTANCE hMod) nghĩa là gì?
- gettickcount game pikachu theo game lãng mạng làm
- [Kernel-mode] Lỗi khó hiểu khi đọc giá trị biến con trỏ
-
03-10-2010, 09:26 AM #2Junior Member
- 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.
-
03-10-2010, 09:56 AM #3Junior Member
- 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.
-
03-10-2010, 02:38 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
ok ! Mình sẽ thử ! Thanks bạn trước !
-
03-10-2010, 02:44 PM #5Junior Member
- 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 !
-
03-10-2010, 06:38 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nguyengiaba
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 !
-
04-10-2010, 10:15 AM #7Junior Member
- 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 ...
-
04-10-2010, 02:15 PM #8Junior Member
- 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; }}
-
04-10-2010, 02:26 PM #9Junior Member
- 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 !
-
04-10-2010, 03:55 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nguyengiaba
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
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...