Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Liệt kê các dll inject với VC++

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Wink Liệt kê các dll inject với VC++

    mình có thấy phần mềm injecteddll có thể liệt kê các dll đang inject vào các process,vậy nó dùng cách nào vậy,dùng hàm api nào
    down load injecteddll

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn tham khảo tại đây :
    http://virusvn.com/forum/showthread.php?t=271
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    201

    bài viết ở http://virusvn.com/forum/showthread.php?t=271 mình có đọc qua thấy hình như chỉ có cách inject DLL chứ không liệt kê các dll đang inject

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Cái injected dll này hình như chỉ nhận diện được dll mà inject bằng SetWindowsHookEx. Mình chưa biết nó dùng cách nào nhưng mình cũng có một cách nhận diện khác : bạn viết một ứng dụng win32 có dạng cửa sổ, sau đó liệt kê các thư viện đang có bằng hàm Module32First và Module32Next. Tiếp theo bạn so sánh với các thư viện thực sự cần -> số còn lại là inject. Đề biết được ứng dụng của bạn cần thư viện gì thì dùng depency walker để xem.

    Cũng có một cách khác đề nhận diện hook dll đó là bạn viết chương trình debugger nhỏ để trace khi ứng dụng vừa gọi hàm sendmessage. Message sẽ lần lượt qua các hàm lọc của các hook dll trước khi tới hàm đón message của cửa sổ đích.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Cái injected dll này hình như chỉ nhận diện được dll mà inject bằng SetWindowsHookEx. Mình chưa biết nó dùng cách nào nhưng mình cũng có một cách nhận diện khác : bạn viết một ứng dụng win32 có dạng cửa sổ, sau đó liệt kê các thư viện đang có bằng hàm Module32First và Module32Next. Tiếp theo bạn so sánh với các thư viện thực sự cần -> số còn lại là inject. Đề biết được ứng dụng của bạn cần thư viện gì thì dùng depency walker để xem.
    Mình hiểu cái bạn nói rồi,nhưng mà đâu phải con nào cũng inject vào process cửa sổ của ta( như mình nghĩ thì VD như ckvo nó chỉ inlect vào Explorer thôi thì phải

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định Liệt kê các dll inject với VC++

    Thông thường nếu dùng cơ chế hook để inject thì bất cứ process nào có dạng cửa sổ đều bị. Còn nếu kiểu kavo thì nó chỉ inject trên một số các tiến trình đã biết. Trường hợp này ta có thể dùng cách 2 để kiểm tra.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    01 2009
    Bài viết
    201

    VD như 1 cái inject như thế này

    nó sử dụng CreateRemoteThread để inject UKHook40.dll vào Explorer,vạy cách
    Cũng có một cách khác đề nhận diện hook dll đó là bạn viết chương trình debugger nhỏ để trace khi ứng dụng vừa gọi hàm sendmessage. Message sẽ lần lượt qua các hàm lọc của các hook dll trước khi tới hàm đón message của cửa sổ đích.
    của bạn sẽ làm thế nào( mình không hiểu rõ ý bạn lắm,làm thế nào để bạn biết message đã qua các hàm lọc của các hàm Hook,thêm nữa bạn dùng process nào gọi hàm message vậy ???,lời gọi cụ thể là gì
    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <tlhelp32.h>
    #include <shlwapi.h>
    
    #define PROCESS_NAME "Explorer.exe"
    #define DLL_NAME "UKHook40.dll"
    
    
    //I could just use PROCESS_ALL_ACCESS but it's always best to use the absolute bare minimum of priveleges, so that your code works in as
    //many circumstances as possible.
    #define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
     
    BOOL WriteProcessBYTES(HANDLE hProcess,LPVOID lpBaseAddress,LPCVOID lpBuffer,SIZE_T nSize);
    
    BOOL LoadDll(char *procName, char *dllName);
    BOOL InjectDLL(DWORD ProcessID, char *dllName);
    unsigned long GetTargetProcessIdFromProcname(char *procName);
    
    bool IsWindowsNT()
    {
    	// check current version of Windows
    	DWORD version = GetVersion();
    	// parse return
    	DWORD majorVersion = (DWORD)(LOBYTE(LOWORD(version)));
    	DWORD minorVersion = (DWORD)(HIBYTE(LOWORD(version)));
    	return (version < 0x80000000);
    }
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
    {
        if(IsWindowsNT())
    		LoadDll(PROCESS_NAME, DLL_NAME);
        else
    		MessageBox(0, "Your system does not support this method", "Error!", 0);
    	
        return 0;
    }
    
    
    BOOL LoadDll(char *procName, char *dllName)
    {
    	DWORD ProcID = 0;
    	
    	ProcID = GetTargetProcessIdFromProcname(procName);
    	
    	if(!(InjectDLL(ProcID, dllName)))
    		MessageBox(NULL, "Process located, but injection failed", "Loader", NULL);
    	
    	return true;
    }
    
    BOOL InjectDLL(DWORD ProcessID, char *dllName)
    {
    	HANDLE Proc;
    	char buf[50]={0};
    	LPVOID RemoteString, LoadLibAddy;
    	
    	if(!ProcessID)
    		return false;
    	
    	Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID);
    	
    	if(!Proc)
    	{
    		sprintf(buf, "OpenProcess() failed: %d", GetLastError());
    		MessageBox(NULL, buf, "Loader", NULL);
    		return false;
    	}
    	
    	LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    	
    	RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
    	WriteProcessMemory(Proc, (LPVOID)RemoteString, dllName, strlen(dllName), NULL);
    	CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL);   
    	
    	CloseHandle(Proc);
    	
    	return true;
    }
    
    unsigned long GetTargetProcessIdFromProcname(char *procName)
    {
    	PROCESSENTRY32 pe;
    	HANDLE thSnapshot;
    	BOOL retval, ProcFound = false;
    	
    	thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	
    	if(thSnapshot == INVALID_HANDLE_VALUE)
    	{
    		MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL);
    		return false;
    	}
    	
    	pe.dwSize = sizeof(PROCESSENTRY32);
    	
    	retval = Process32First(thSnapshot, &pe);
    	
    	while(retval)
    	{
    		if(StrStrI(pe.szExeFile, procName) )
    		{
    			ProcFound = true;
    			break;
    		}
    		
    		retval    = Process32Next(thSnapshot,&pe);
    		pe.dwSize = sizeof(PROCESSENTRY32);
    	}
    	
    	return pe.th32ProcessID;
    }

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    01 2009
    Bài viết
    201

    chẳng hiểu sao với đoạn source này thì không nhận ra được icesword nó hook các hàm zwopenprocess ,zwopenthread, zwterminateprocess,zwterminnatethread như công cụ này nhỉ
    http://tailong.webng.com/Wsyscheck.rar
    không những vậy công cụ Wsyscheck.rar còn có khả năng unhook các hàm trên và khi unhook thì ta có thể kill được icesword từ taskmanager

Các đề tài tương tự

  1. Game Làm sao sử dụng dll khi đã được inject vào file exe?
    Gửi bởi phuongtk trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 26-09-2011, 10:53 PM
  2. Inject Code Cave
    Gửi bởi benina trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 0
    Bài viết cuối: 31-03-2010, 02:33 AM
  3. inject DLL bằng SetWindowHookEx
    Gửi bởi RadiRadic trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 6
    Bài viết cuối: 10-08-2009, 01:46 AM
  4. Tại sao không inject DLL vào Tiến trình hệ thống được
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 07-06-2009, 10:53 PM
  5. Source inject DLL gồm cả DLL và exe. Lỗi làm sao sửa?
    Gửi bởi AdminPro trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 21-05-2009, 11:41 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn