20120327

Делаем трейнер на C# - часть первая.

Название говорит само за себя. :)

[Вот] и видеоурок. Довольно длинный, аж на тридцать минут, так что запаситесь чаем и бутербродами перед просмотром. В этом уроке я покажу, как создать простенький каркас, найти процесс, открыть его и записать в его память несколько байт.

Visual Studio, которая в уроке использовалась, можно скачать [вот отсюда]. А меня можно найти ещё и [вот тут].

2 комментария:

  1. Делал все как сказано. Я мало что понимаю в принципе и правилах языка, но соскреб все точь в точь и все же в двух местах слова подсвечиваются как ошибки. (Я их пометил кучей точек).
    Объясните и пожалуйста подправьте эти пару строчек.

    Вот код почти весь (в конце только FormLoad... и еще пару кнопочек пустых)

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;

    namespace MuOnline_Editor_v1._0
    {
    public partial class Form1 : Form
    {
    [DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcces(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);

    public int pID;

    public Form1()
    {
    InitializeComponent();
    GetProcess("muruz");
    WriteBytes();
    }

    public void GetProcess(string name)
    {
    var pList = Process.GetProcesses();
    if (pList.Count != 0) //...........1 ОШИБКА (Слово Count подсвечивается).................!!!
    {
    foreach (var process in pList)
    {
    if (process.ProcessName == name)
    {
    pID = process.Id;
    MessageBox.Show("Процес игры найден!");
    return;
    }
    }
    }
    }

    public void WriteBytes()
    {
    var zenAddress = 0x0F96160C;
    byte[] zenBytes = { 0x00, 0x94, 0x35, 0x77 }; // 2kkk zen
    var size = 4;
    var dummy = new UIntPtr();

    var handle = OpenProcess(0x001F0FFF, false, pID); //.........2 ОШИБКА (Слово OpenProcess подсвечивается...!!!
    WriteProcessMemory(handle, (IntPtr)zenAddress, zenBytes, (uint)size, out dummy);
    CloseHandle(handle);
    }

    ОтветитьУдалить
    Ответы
    1. Привет!

      pList.Count() - вроде бы скобки забыл.
      По поводу OpenProcess() - какую ошибку пишет при попытке скомпилировать?

      PS: "MuOnline_Editor_v1" - красноречивое название. ;)

      Удалить

Не люблю мат и низкий уровень грамотности. Чем конкретнее поставите свой вопрос и чем лучше он будет выглядеть - тем большая вероятность на мой ответ. :)