using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using MemoryRW;
namespace WindowsApplication8
{
public partial class Form1 : Form
{
GameMemoryRW GMem = new GameMemoryRW();
bool done = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (done == true)
Close();
for (; ; )
{
int success = GMem.start();
if (success == 1)
break;
}
button1.Text = "Done!";
done = true;
IntPtr address = (IntPtr)0x0058B856;
byte buffer1 = { 0x90, 0x90};
byte buffer2 = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
byte buffer3 = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
GMem.poke(address, buffer2);
address = (IntPtr)0x0061F239;
GMem.poke(address, buffer3);
address = (IntPtr)0x0058B7F6;
GMem.poke(address, buffer1);
GMem.finish();
}
}
class GameMemoryRW
{
MemoryRW.ProcessRW GameRW = new MemoryRW.ProcessRW();
public int start()
{
Process pArray = Process.GetProcessesByName("msnmsgr");
if (pArray.Length==0)
{
MessageBox.Show("Open your messenger you stupid fuck!");
return 0;
}
else
{
GameRW.Read_WriteProcess = pArray;
GameRW.OpenProcess();
return 1;
}
}
public void peek(IntPtr memoryAddress, out byte buffer, uint bytesToRead)
{
buffer = GameRW.ReadProcessMemory(memoryAddress, bytesToRead);
}
public void poke(IntPtr memoryAddress, byte bytesToWrite)
{
GameRW.WriteProcessMemory(memoryAddress, bytesToWrite);
}
public void finish()
{
GameRW.CloseHandle();
}
}
}
namespace MemoryRW
{
class ProcessInformationApi
{
public enum ProcessAccessRights
{
PROCESS_VM_READ = (0x0010),
PROCESS_VM_WRITE = (0x0020),
PROCESS_VM_OPERATION = (0x0008)
}
/* HANDLE WINAPI OpenProcess(
* DWORD dwDesiredAccess,
* BOOL bInheritHandle,
* DWORD dwProcessId
* );
*/
public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32
bInheiritHandle, UInt32 dwProcessId);
/* BOOL CloseHandle(
* HANDLE hObject
* );
*/
public static extern Int32 CloseHandle(IntPtr hObject);
/* BOOL ReadProcessMemory(
* HANDLE hProcess,
* LPCVOID lpBaseAddress,
* LPVOID lpBuffer,
* DWORD nSize,
* LPDWORD lpNumberOfBytesRead
* );
*/
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
byte lpBuffer, UInt32 nSize, out IntPtr lpNumberOfBytesRead);
/* BOOL WriteProcessMemory(
* HANDLE hProcess,
* LPVOID lpBaseAddress,
* LPVOID lpBuffer,
* DWORD nSize,
* LPDWORD lpNumberOfBytesWritten
* );
*/
public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
byte lpBuffer, UInt32 nSize, out IntPtr lpNumberOfBytesWritten);
}
public class ProcessRW
{
public Process Read_WriteProcess
{
get
{
return m_ReadWriteProcess;
}
set
{
m_ReadWriteProcess = value;
}
}
private Process m_ReadWriteProcess = null;
private IntPtr m_hProcess = IntPtr.Zero;
public void OpenProcess()
{
ProcessInformationApi.ProcessAccessRights access;
access = ProcessInformationApi.ProcessAccessRights.PROCESS_VM_READ |
ProcessInformationApi.ProcessAccessRights.PROCESS_VM_WRITE |
ProcessInformationApi.ProcessAccessRights.PROCESS_VM_OPERATION;
m_hProcess = ProcessInformationApi.OpenProcess((uint)access, 1, (uint)
m_ReadWriteProcess.Id);
if (m_hProcess.ToInt32() == 0)
{
throw new Exception("OpenProcess Failed");
}
}
public void CloseHandle()
{
int returnVal;
returnVal = ProcessInformationApi.CloseHandle(m_hProcess);
if (returnVal == 0)
{
throw new Exception("CloseHandle Failed");
}
}
public byte ReadProcessMemory(IntPtr memoryAddress, uint bytesToRead)
{
byte buffer = new byte;
IntPtr ptrBytesRead;
ProcessInformationApi.ReadProcessMemory(m_hProcess, memoryAddress, buffer,
bytesToRead, out ptrBytesRead);
return buffer;
}
public void WriteProcessMemory(IntPtr memoryAddress, byte bytesToWrite)
{
IntPtr ptrBytesWritten;
ProcessInformationApi.WriteProcessMemory(m_hProcess, memoryAddress, bytesToWrite,
(uint)bytesToWrite.Length, out ptrBytesWritten);
}
}
}