Перейти к содержанию

Проблемма с трейнером


Рекомендуемые сообщения


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4]namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead);
public int pID;
public Form1()
{
InitializeComponent();
GetProcess("TombRaider");
FindSignature();[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4] }
public void GetProcess(string name)
{
var plist = Process.GetProcesses();
if (plist.Count() != 0)
{
foreach (var process in plist)
{
if (process.ProcessName == name)
{
pID = process.Id;
MessageBox.Show("Процесс найден!");
return;
}
}
}
return;
}[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4] public int FindSignature()
{
var moduleName = "TombRaider.exe";
var startAddress = 0;
var sizeToAllocate = 0;
var pattern = new int[] {0x3B, 0x51, 0x0C, 0x7D, 0x77, 0x53, 0x8B, 0x5D, 0x0C, 0x3B, 0xDF, 0x7C, 0x6E, 0x3B, 0x59, 0x08, 0x7D, 0x69, 0x8B, 0xB8, 0xD0, 0x00, 0x00, 0x00, 0x8B, 0x80, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0xAF};
if (pID != 0)
{
foreach (var p in Process.GetProcesses())
{
if (p.Id == pID)
{
foreach (ProcessModule m in p.Modules)
{
if (m.ModuleName == moduleName)
{
startAddress = (int)m.BaseAddress;
sizeToAllocate = m.ModuleMemorySize;
break;
}
}
}
}
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
byte[] buffer = new byte[sizeToAllocate];
int bytesread;
ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
CloseHandle(handle);
var counter = 0;
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0] | pattern[0] == -1)
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j] | pattern[j] == -1)
{
counter++;
if (counter == pattern.Length)
{
var result = i + startAddress;
return (int)result;
}
}
else
{
counter = 0;
}
}
}
}
}
}
}
return -1;
}[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4] public void WriteBytes(int address, byte[] bytes)
{
var dummy = new UIntPtr();
if (pID != 0)
{
var handle = OpenProcess(0x001F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)address, bytes, (uint)bytes.Length, out dummy);
CloseHandle(handle);
}
}[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4] private void button1_Click(object sender, EventArgs e)
{
var myFoundAddress = FindSignature(); //Вызов возвратит тебе или -1 (если не нашёл), или адрес (если нашёл)
if (myFoundAddress != -1)//Проверяем, что адрес найден
{
//var handle = OpenProcess(All, false, pID);//Получаем хендл процесса с правами на запись в память
//if(handle!=0)//Проверяем, что хэндл получен[/size][/font][/color]

[color=#282828][font=helvetica, arial, sans-serif][size=4] byte[] myValues = new byte[] { 0x90, 0x90, 0x90 };
var size = 3;
var dummy = new UIntPtr();
var handle = OpenProcess(0x1F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)myFoundAddress, myValues, (uint)size, out dummy);//Пишем 0)
CloseHandle(handle); //Закрываем хэндл[/size][/font][/color]
[color=#282828][font=helvetica, arial, sans-serif][size=4] }
}
}
}

посмотрите пожалуйста что тут не так???

Ссылка на комментарий
Поделиться на другие сайты

Для начала очисти код от лишних бб-кодов (скорее всего, они попали сюда и в твой код из-за копипасты).

они сюда попали после того как я вставил код


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead);
public int pID;
public Form1()
{
InitializeComponent();
GetProcess("TombRaider");
FindSignature();
}
public void GetProcess(string name)
{
var plist = Process.GetProcesses();
if (plist.Count() != 0)
{
foreach (var process in plist)
{
if (process.ProcessName == name)
{
pID = process.Id;
MessageBox.Show("Процесс найден!");
return;
}
}
}
return;
}
public int FindSignature()
{
var moduleName = "TombRaider.exe";
var startAddress = 0;
var sizeToAllocate = 0;
var pattern = new int[] {0x3B, 0x51, 0x0C, 0x7D, 0x77, 0x53, 0x8B, 0x5D, 0x0C, 0x3B, 0xDF, 0x7C, 0x6E, 0x3B, 0x59, 0x08, 0x7D, 0x69, 0x8B, 0xB8, 0xD0, 0x00, 0x00, 0x00, 0x8B, 0x80, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0xAF};
if (pID != 0)
{
foreach (var p in Process.GetProcesses())
{
if (p.Id == pID)
{
foreach (ProcessModule m in p.Modules)
{
if (m.ModuleName == moduleName)
{
startAddress = (int)m.BaseAddress;
sizeToAllocate = m.ModuleMemorySize;
break;
}
}
}
}
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
byte[] buffer = new byte[sizeToAllocate];
int bytesread;
ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
CloseHandle(handle);
var counter = 0;
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0] | pattern[0] == -1)
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j] | pattern[j] == -1)
{
counter++;
if (counter == pattern.Length)
{
var result = i + startAddress;
return (int)result;
}
}
else
{
counter = 0;
}
}
}
}
}
}
}
return -1;
}
public void WriteBytes(int address, byte[] bytes)
{
var dummy = new UIntPtr();
if (pID != 0)
{
var handle = OpenProcess(0x001F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)address, bytes, (uint)bytes.Length, out dummy);
CloseHandle(handle);
}
}
private void button1_Click(object sender, EventArgs e)
{
var myFoundAddress = FindSignature(); //Вызов возвратит тебе или -1 (если не нашёл), или адрес (если нашёл)
if (myFoundAddress != -1)//Проверяем, что адрес найден
{
//var handle = OpenProcess(All, false, pID);//Получаем хендл процесса с правами на запись в память
//if(handle!=0)//Проверяем, что хэндл получен

byte[] myValues = new byte[] { 0x90, 0x90, 0x90 };
var size = 3;
var dummy = new UIntPtr();
var handle = OpenProcess(0x1F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)myFoundAddress, myValues, (uint)size, out dummy);//Пишем 0)
CloseHandle(handle); //Закрываем хэндл
}
}
}

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.