-
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:
- Cách lấy Icon của file dựa trên phần mở rộng của file ấy?
- Nhận dữ liệu hàm WSAWaitForMultipleEvents bi time out !
- tìm handle cua edit từ id
- SendInput Với tham số INPUT_MOUSE
- Phân biệt giữa mô hình xử lý dùng multithread và dùng nhiều process.
- Ẩn Trên Registry bằng Hàm RegOpenKeyEx
- Antivirus Tìm EOP của 1 File PE
- [Hook] Xin tài liệu hướng dẫn hook
- Cần tìm người viết auto bot cho game .
- Dung lượng File sau khi MapViewOfFile
-
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
Không chỉ là một biểu tượng của sự quyết tâm và lòng tự hào quốc gia, cột cờ inox ngoại trời còn là biểu tượng của sự chuyên nghiệp và đẳng cấp của một công ty hoặc tổ chức. Việc sử dụng chúng để...
Kiến trúc đẳng cấp với cột cờ inox...