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

Đề tài: source inject DLL | WriteProcessMemory có tác dụng gì?

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Mặc định source inject DLL | WriteProcessMemory có tác dụng gì?

    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <tlhelp32.h>
    #include <shlwapi.h>
    
    #define PROCESS_NAME "avgrsx.exe"
    #define DLL_NAME "HideRegistryA.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;
    }
    Mình có tìm thấy source inject DLL này trong diễn đàn nhưng không hiểu các hàm WriteProcessMemory(Proc, (LPVOID)RemoteString, dllName, strlen(dllName), NULL); nó làm nhiệm vụ gì,tại sao cần có nó để kết hợp với hàm createremotethread
    Tham gia diễn đàn MACOS http://www.apple9.com/forum

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    1. định nghĩa của WriteProcessMemory nói đầy đủ
    2. kết hợp để tránh crash
    None!

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    328

    nó viết là hàm này dùng để viết dữ liệu lên bộ nhớ của process,chẳng hiểu như vậy nghĩa là gì hết trơn ,viết dữ liệu lên bộ nhớ của process nghĩa là sao,bộ nhớ của process là cái gì vậy ???
    Tham gia diễn đàn MACOS http://www.apple9.com/forum

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

    Mỗi process có một bộ nhớ riêng, gọi là bộ nhớ ảo. Cùng một địa chỉ bộ nhớ ảo nhưng nằm trong 2 process khác nhau thì dữ liệu sẽ khác nhau.

    CreateRemoteThread để tạo một thread chạy trong ngữ cảnh của process khác, trong trường hợp này có thể tạm hiểu như ta bắt process nạn nhân phải gọi LoadLibrary. Hàm này cần truyền đường dẫn đến thư viện cần nạp. Vì hàm này đang chạy trong ngữ cảnh của process nạn nhân nên ta phải dùng WriteProcessMemory để ghi đường dẫn thư viện vào bộ nhớ của process nạn nhân và truyền nó vào cho hàm LoadLibrary.
    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
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Mỗi process có một bộ nhớ riêng, gọi là bộ nhớ ảo. Cùng một địa chỉ bộ nhớ ảo nhưng nằm trong 2 process khác nhau thì dữ liệu sẽ khác nhau.

    CreateRemoteThread để tạo một thread chạy trong ngữ cảnh của process khác, trong trường hợp này có thể tạm hiểu như ta bắt process nạn nhân phải gọi LoadLibrary. Hàm này cần truyền đường dẫn đến thư viện cần nạp. Vì hàm này đang chạy trong ngữ cảnh của process nạn nhân nên ta phải dùng WriteProcessMemory để ghi đường dẫn thư viện vào bộ nhớ của process nạn nhân và truyền nó vào cho hàm LoadLibrary.
    một trong những cách inject truyền thống của dân cheat game
    None!

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

    Mặc định source inject DLL | WriteProcessMemory có tác dụng gì?

    Trích dẫn Nguyên bản được gửi bởi Xcross87 Xem bài viết
    một trong những cách inject truyền thống của dân cheat game
    Ke ke, dạo này mình cũng tu bớt rồi. Mấy game giờ quỷ yêu quá, làm đủ thứ trò để chống cheat.
    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
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Ke ke, dạo này mình cũng tu bớt rồi. Mấy game giờ quỷ yêu quá, làm đủ thứ trò để chống cheat.
    tớ vẫn không đặt cờ được với kiểu DMA....
    None!

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

  1. Cách sử dụng hàm API WriteProcessMemory trong C# ntn ?
    Gửi bởi GunLengend trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 25-05-2013, 06:16 PM
  2. Hỏi về WriteProcessMemory Function ko chạy
    Gửi bởi langman trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 15-08-2010, 03:36 PM
  3. Sử dụng WriteProcessMemory, báo lỗi cannot open process :((
    Gửi bởi lamsao1b trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 2
    Bài viết cuối: 23-08-2009, 10:17 AM
  4. 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
  5. Sử dụng ReadProcessMemory và WriteProcessMemory
    Gửi bởi hoanglinh9466 trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 7
    Bài viết cuối: 11-01-2008, 12:58 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