
14.06.2009, 14:39
|
|
Постоянный
Регистрация: 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);
}
|
|
|