Показать сообщение отдельно

  #19  
Старый 14.06.2009, 14:39
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами: 9023100

Репутация: 395


По умолчанию

2 Irdis
Чтение из памяти процесса.

Код:
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment( linker, "/MERGE:.text=.data" )
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWR /IGNORE:4078")
#pragma comment(linker,"/ENTRY:New_WinMain")
#pragma comment(linker,"/NODEFAULTLIB") // раскоменть в релизе
#pragma comment(linker, "/SUBSYSTEM:WINDOWS" )
#pragma comment(linker, "/INCREMENTAL:NO" ) // раскоменть в релизе
#pragma optimize( "gsy", on )
#pragma comment(linker, "/opt:nowin98")

#include <windows.h>
#include <Tlhelp32.h>
//#include <stdio.h>


char szExE[]="magent.exe";
DWORD thPID=-1;
//DWORD BaseSize=0;
//DWORD BaseAddr;


// пишем функцию ищущую процесс по его имени
DWORD GetPIDbyNameExe(char *lpExe)
{
HANDLE hSH;
PROCESSENTRY32 pe32;

hSH=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

// закоменть потом после отладки
if(hSH==INVALID_HANDLE_VALUE)
	{
	MessageBox(0, "CreateToolhelp32Snapshot", NULL, MB_OK|MB_SETFOREGROUND);
	return -1;
	}
	
pe32.dwSize=sizeof(PROCESSENTRY32);
if( !Process32First( hSH, &pe32 ) )
  {
	MessageBox(0, "Process32First", NULL, MB_OK|MB_SETFOREGROUND);
	goto closesh;
	}

	do{
		if(!strcmp(pe32.szExeFile,lpExe))
			{
			
			CloseHandle(hSH);
			return pe32.th32ProcessID;
		}
		
	}while(Process32Next(hSH,&pe32));


	
closesh:
CloseHandle(hSH);
return -1;
}

/* получает базовый адрес памяти экзешника и размер в памяти
BOOL SetImageBase( DWORD dwPID ) 
{ 
  HANDLE hModuleSnap = INVALID_HANDLE_VALUE; 
  MODULEENTRY32 me32; 
 
  hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); 
  if( hModuleSnap == INVALID_HANDLE_VALUE ) { return( FALSE ); } 
 
  me32.dwSize = sizeof( MODULEENTRY32 ); 
 
  if( !Module32First( hModuleSnap, &me32 ) ) 
	{ 
	CloseHandle( hModuleSnap );    
	return( FALSE ); 
	} 
 

  BaseAddr=(DWORD)me32.modBaseAddr;
  BaseSize=me32.modBaseSize;

  CloseHandle( hModuleSnap ); 
  return( TRUE ); 
} 
*/


void New_WinMain(void)
	{
	unsigned char *mem;
	DWORD st_addr=0x011B2000;
	HANDLE hProcess;
	HFILE f;

if((thPID=GetPIDbyNameExe((char *)&szExE))==-1){ExitProcess(1); }

hProcess=OpenProcess(PROCESS_VM_READ,FALSE,thPID);

mem=(unsigned char *)LocalAlloc(LPTR,4096);

ReadProcessMemory(hProcess,(LPCVOID)st_addr,mem,4096,NULL);

f=_lcreat("d.txt", 0);
_lwrite(f,(LPCCH)mem,4096);
_lclose(f);

LocalFree(mem);
CloseHandle(hProcess);

ExitProcess(0); 
}
 
Ответить с цитированием