-
01-12-2015, 05:50 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi thmn1234View more random threads:
- WM_INPUT và Get raw input data
- Customize hộp thoại MessageBox với kỹ thuật Hooking
- Kick chuột trái vào 1 cửa sổ game như thế nào???
- Giả lập sự kiện nhấm phím cho chương trình epsxe
- Chống xung đột Multi - Thread Trong VC++ API
- Change Display Setting của 1 Application ?
- Cách viết ứng dụng gọi tự động một chương trình thực thi
- Windows Message nào thay đổi định dạng của ký tự (in đậm, in nghiêng, gạch dưới...)?
- VC++ Lấy Địa chỉ MAC Address trên Máy tính
- Sử dụng WriteProcessMemory, báo lỗi cannot open process :((
-
01-12-2015, 05:52 PM #2Junior Member
- 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.
-
01-12-2015, 06:04 PM #3Junior Member
- 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.
-
01-12-2015, 06:06 PM #4Junior Member
- 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à ??
-
01-12-2015, 06:31 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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
-
02-12-2015, 05:33 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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;}
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;}
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;}
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ả.
-
03-12-2015, 04:52 PM #7Junior Member
- 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.
-
03-12-2015, 05:53 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi greigaz
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ