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

gastraler

Пользователи
  • Постов

    31
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные gastraler

  1. Хм....указатель на патронов ?))

    Патроны разные бывают ;), можешь даже лопату в руки взять, а ищешь все равно патроны.

    надо отсеивать по адресу
    чтобы отсеивать по адресу, надо этот адрес сначала найти, а по значению и так должно быть видно :)
  2. Адрес указателя на ножницы: D3DDrv.dll+CB7F8

    offset: 0x7EC, 0x3B4, 0x2B0, 0x78, 0x274

    Подставляешь это и будут тебе ножницы

    Указатели удобно искать так:

    Сохраняешь поиск указателей, выходишь с игры, загружаешь разные сохраненнки и опять ищешь свое значение.

    Загружаешь сохраненный поиск и отсеиваешь его уже на новый адрес.

    Вот что получится:

    8e73410d4db0b3f141db269a6a84cafc.jpg

  3. Как убрать зависимость элементов в окне от клавиши "Tab" , но чтобы при этом кнопки могли управляться горячими клавишами?

    	    private void button1_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.F1)
    {
    this.F1();
    button1.BackColor = System.Drawing.Color.Green;
    }
    }

    private void button2_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.F2)
    {
    this.F2();
    button2.BackColor = System.Drawing.Color.Green;
    }
    }

  4. Вот так получилось: ed22704751380c81ada4f7f2a1fba880.jpg

    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;
    namespace MyButton
    {
    public partial class Form1 : Form
    {
    bool AddAmmo = false;
    public Form1()
    {
    InitializeComponent();
    }
    //**************************************************************
    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
    AddAmmo = false;
    button1.BackColor = System.Drawing.Color.Green;
    }
    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
    AddAmmo = true;
    button1.BackColor = System.Drawing.Color.Goldenrod;
    }
    //*************************************************************
    }
    }

    			this.button1.BackColor = System.Drawing.Color.Goldenrod;
    this.button1.Location = new System.Drawing.Point(84, 106);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 1;
    this.button1.Text = "button1";
    this.button1.UseVisualStyleBackColor = false;
    this.button1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button1_MouseDown);
    this.button1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button1_MouseUp);

    Теперь кнопка без защелки, любого типа.

  5. Надо чтобы работал как Flat a выгледел иначе, для Flat эти настройки в VC существуют, для остальных нет. За инфу спасибо, MouseEventArgs с этим можно что то сделать.

    Я видел люди пишут классы, но пока не попалось готовых (всяка хрень).

  6. Вот я подставляю кнопку в твой код:

    using System.Drawing;
    using System.Windows.Forms;
    namespace BtnTest
    {
    public partial class Form1 : Form
    {
    public Color BtnClr;
    public bool IsGameAvailable;
    public bool AddAmmo;
    public Form1()
    {
    InitializeComponent();
    }
    /// <summary>
    /// Вызывается тогда, когда на кнопке _нажата_ кнопка мыши
    /// </summary>
    /// <param name="sender">Объект, который послал событие (кнопка)</param>
    /// <param name="e">Аргументы, содержащие координаты курсора мыши и состояние кнопок</param>
    private void Button1MouseDown(object sender, MouseEventArgs e)
    {
    BtnClr = ((Button)sender).BackColor; //Сохраняем текущий цвет фона кнопки
    ((Button)sender).BackColor = Color.Red; //Красим кнопку в красный цвет
    }
    /// <summary>
    /// Вызывается тогда, когда на кнопке _отпущена_ кнопка мыши
    /// </summary>
    /// <param name="sender">Объект, который послал событие (кнопка)</param>
    /// <param name="e">Аргументы, содержащие координаты курсора мыши и состояние кнопок</param>
    private void Button1MouseUp(object sender, MouseEventArgs e)
    {
    ((Button)sender).BackColor = BtnClr; //Восстанавливаем изначальный цвет фона кнопки
    //if (IsGameAvailable) //Если игра найдена (код закомментирован)
    //{
    if (AddAmmo) //Если опция активна
    {
    AddAmmo = false; //Деактивируем её
    button1.BackColor = System.Drawing.Color.Goldenrod; //Сообщаем об этом пользователю
    }
    else //Иначе, если опция не активна
    {
    AddAmmo = true; //Активируем её
    button1.BackColor = System.Drawing.Color.Green; //Сообщаем об этом пользователю
    }
    //}
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    if (IsGameAvailable)
    {
    if (AddAmmo)
    {
    AddAmmo = false;
    //button1.BackColor = System.Drawing.Color.Goldenrod;
    }
    else
    {
    AddAmmo = true;
    //button1.BackColor = System.Drawing.Color.Green;
    }
    }
    }
    }
    }

    7af11bd184c1b45823b0d14104cd429e.jpg

    this.button1.Location = new System.Drawing.Point(144, 103);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "button1";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Button1MouseUp);

    и получаю вот это: 6a229ac91ad5c91f28179da9b8270f02.gif а надо вот это: 5a405c174da116c85fc0fd006f570d05.gif

  7. Есть вот такая кнопка:

    private void button1_Click(object sender, EventArgs e) //Пополнить боезапас
    {
    if (IsGameAvailable)
    {
    if (AddAmmo)
    {
    AddAmmo = false;
    button1.BackColor = System.Drawing.Color.Goldenrod;
    }
    else
    {
    AddAmmo = true;
    button1.BackColor = System.Drawing.Color.Green;
    }
    }

    Но она залипает.

    Если сделать кнопку Flat, то ее можно настроить чтобы не залипала. Но Flat не красивая кнопка, не нравится она мне.

    Как сделать чтобы нормальная кнопка не залипала и меняла цвет?

  8. ZOCKIR

    Добавь в учебник статьи по созданию трейнера например в C#, Assembler.

    Cheat Engine конечно интересно, но там и так все интуитивно понятно.

    На сегодня все учебники что я видел на C#, там либо ворон и коров считают, или какой то бухгалтерский учет, что нормальному человеку абсолютно не надо.

    Изучать такие учебники одна тоска.

    Существующий подобно твоему учебник http://zalil.ru/29974306/31adb6d0.4e15bfc82/GHBook.chm сильно устарел.

    Желаю успехов :)

  9. Не в преобразовании было дело, что то не с классом.

    С DLL тогоже автора все получилось.

    MemoryEditor.dll ==> http://forum.cheaten...5185623#5185623

    Консольная версия, подставь свои значения :D

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MemoryEditor;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Globalization;
    using System.Threading;

    namespace MemoryEditTest
    {
    class Program
    {
    static void Main(string[] args)
    {
    Memory oMemory = new Memory();
    Process[] myProcess = Process.GetProcessesByName("hl");
    ProcessModule myProcessModule = null;
    IntPtr MemoryAddress = IntPtr.Zero;
    if (myProcess.Length > 0)
    {
    ProcessModuleCollection myProcessModuleCollection;
    try
    {
    myProcessModuleCollection = myProcess[0].Modules;
    }
    catch
    {
    return;
    }
    for (int i = 0; i < myProcessModuleCollection.Count; i++)
    {
    myProcessModule = myProcessModuleCollection[i];
    if (myProcessModuleCollection[i].ModuleName == "hw.dll")
    break;
    }
    MemoryAddress = (myProcessModule.BaseAddress + 0x7bbd9c);
    int address = (int)MemoryAddress;
    if (oMemory.OpenProcess("hl"))
    {
    oMemory.Write(address, new int[] { 0x7c + 0x4 + 0x160 }, (float)50);
    }
    }
    }
    }
    }

  10. ZOCKIR

    Не работает, я с этого и начал. По идее если меняется один параметр, то меняется все.

    Может и меняется, но результат не записывается. Как отследить, пока не понял в чем проблема.

  11. Такой вот еще вопрос!

    Если значение float

    как все это:

    string writtenddress = myMemory.PointerWrite((IntPtr)MemoryAddress, valueToWrite, pointerOffset, out bytesWriten);

    преобразовать во float ???

    Адрес менял на float, значение тоже менял и все равно не записывается (((

  12. Сегодня опять дома и продолжаю мучить свой трейнер.

    class Program
    {
    static void Main(string[] args)
    {
    Memory memory = new Memory(); // обычное действие при работе с классами
    Process[] myProcess; //
    myProcess = Process.GetProcessesByName("hl"); //
    memory.ReadProcess = myProcess[0]; // присвой процесс (ты уже знаешь как его найти)
    memory.Open(); // открыть процесс
    ProcessModule myProcessModule = null; //
    IntPtr MemoryAddress = IntPtr.Zero; // вводишь базовый адрес модуля
    if (myProcess.Length > 0) //
    {
    ProcessModuleCollection myProcessModuleCollection;
    try
    {
    myProcessModuleCollection = myProcess[0].Modules;
    }
    catch
    {
    return;
    }
    for (int i = 0; i < myProcessModuleCollection.Count; i++)
    {
    myProcessModule = myProcessModuleCollection[i];
    if (myProcessModule.ModuleName.Contains("hw.dll"))
    {
    MemoryAddress = (myProcessModule.BaseAddress + 0x7BBD9C);
    break;
    }
    }
    }
    //byte[] bytesToWrite = new byte[]{0xff,0xff,0xff,0xff}; // записываемые байты можешь забить вручную или через конвертер из десятичного в шестнадцатеричную форму
    int[] Offset = new int[]{0x7C,0x578,0xAC}; // вводишь нужные оффсеты со своего скирншота
    int bytesWritten = 0; // просто инициализация
    int ammoToFill = 50; //Полный магазин
    byte[] bytesToWrite = BitConverter.GetBytes(ammoToFill); //Перезаписать значение
    memory.PointerWrite(MemoryAddress, bytesToWrite, Offset, out bytesWritten);
    }
    }

    Из консоли все работает, и даже патроны добавляет. Спасибо за науку работы с консолью!!!

    Как же привязаться к форме? Что то я опять туплю. Может кто подскажет !

    Люди!!! Дайте кто нибудь исходник, с указателем на модуль. Пожалуйста!!!

    Может грубо но приляпал :D

    Андрюхе огромное спасибо!!!

    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;
    using System.Globalization;
    using System.Threading;
    namespace Half_Life_Opposing_Force
    {
    public partial class Form1 : Form
    {
    #region Global variables
    Memory myMemory = new Memory();
    Process[] myProcess;
    bool IsGameAvailable = false;
    bool UnlimitedAmmo = false;
    //string AmmoPointer = "";
    int[] AmmoOffset = { 0x7C, 0x578, 0xAC };
    int ammoToFill = 50;
    #endregion
    public Form1()
    {
    InitializeComponent();
    }
    private void UnlimAmmoBTN_Click(object sender, EventArgs e)
    {
    if (IsGameAvailable)
    {
    if (UnlimitedAmmo)
    {
    UnlimitedAmmo = false;
    UnlimAmmoBTN.Text = "OFF";
    }
    else
    {
    UnlimitedAmmo = true;
    UnlimAmmoBTN.Text = "ON";
    }
    }
    }
    private void GameAvailabilityTMR_Tick(object sender, EventArgs e)
    {
    myProcess = Process.GetProcessesByName("hl");
    if (myProcess.Length != 0)
    {
    IsGameAvailable = true;
    statusLBL.Text = "Вы в игре";
    }
    else
    {
    IsGameAvailable = false;
    statusLBL.Text = "Игра не запущенна";
    }
    }
    private void UpdateCheatsTMR_Tick(object sender, EventArgs e)
    {
    if (IsGameAvailable)
    {
    #region Unlimited ammo
    if (UnlimitedAmmo)
    {
    myMemory.ReadProcess = myProcess[0];
    myMemory.Open();
    ProcessModule myProcessModule = null; //
    IntPtr MemoryAddress = IntPtr.Zero; // вводишь базовый адрес модуля
    if (myProcess.Length > 0) //
    {
    ProcessModuleCollection myProcessModuleCollection;
    try
    {
    myProcessModuleCollection = myProcess[0].Modules;
    }
    catch
    {
    return;
    }
    for (int i = 0; i < myProcessModuleCollection.Count; i++)
    {
    myProcessModule = myProcessModuleCollection[i];
    if (myProcessModule.ModuleName.Contains("hw.dll"))
    {
    MemoryAddress = (myProcessModule.BaseAddress + 0x7BBD9C);
    break;
    }
    }
    }
    //int pointerAddress = HexToDec(AmmoPointer);
    int[] pointerOffset = AmmoOffset;
    int bytesWriten;
    byte[] valueToWrite = BitConverter.GetBytes(ammoToFill);
    string writtenddress = myMemory.PointerWrite((IntPtr)MemoryAddress, valueToWrite, pointerOffset, out bytesWriten);
    myMemory.CloseHandle();
    }
    #endregion

    }
    }

    //public static string HexToDec(int DEC)
    //{
    // return DEC.ToString("X");
    //}
    //public static int HexToDec(string Hex)
    //{
    // return int.Parse(Hex, NumberStyles.HexNumber);
    //}


    }
    }

    Трейнер делался на основе этих уроков:http://www.punkarcade.net/videos/video/0osZuafJuB0/How-to-Make-a-TRAINER-C-TUTORIAL-1-6-HD.html

  13. А если в трейнере есть вот такой класс:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices; //USED TO CALL THE DLL IMPORTS
    using System.Globalization;
    using System.Diagnostics;
    using System.Windows.Forms; //DELETE ME
    namespace Half_Life_Opposing_Force
    {
    //Class wasnt done by me
    //FULL CREDITS TO
    //http://forum.cheatengine.org/viewtopic.php?t=530207

    public class Memory
    {
    private Process m_ReadProcess = null;
    private IntPtr m_hProcess = IntPtr.Zero;
    public static int DllImageAddress(string Pname, string ModuleName)
    {
    System.Diagnostics.Process[] MyProcess = System.Diagnostics.Process.GetProcessesByName(Pname);
    System.Diagnostics.ProcessModuleCollection myProcessModuleCollection = MyProcess[0].Modules;
    for (int i = 0; i < myProcessModuleCollection.Count; i++)
    {
    if (myProcessModuleCollection[i].ModuleName.ToLower().StartsWith(ModuleName.ToLower()))
    {
    return (int)myProcessModuleCollection[i].BaseAddress;
    }
    }
    return -1;
    }
    public Process ReadProcess
    {
    get
    {
    return m_ReadProcess;
    }
    set
    {
    m_ReadProcess = value;
    }
    }
    public void Open()
    {
    ProcessAccessType access = ProcessAccessType.PROCESS_VM_READ
    | ProcessAccessType.PROCESS_VM_WRITE
    | ProcessAccessType.PROCESS_VM_OPERATION;
    m_hProcess = OpenProcess((uint)access, 1, (uint)m_ReadProcess.Id);
    }
    public void CloseHandle()
    {
    int iRetValue;
    iRetValue = CloseHandle(m_hProcess);
    if (iRetValue == 0)
    {
    throw new Exception("CloseHandle Failed");
    }
    }
    public byte[] Read(IntPtr MemoryAddress, uint bytesToRead, out int bytesRead)
    {
    byte[] buffer = new byte[bytesToRead];
    IntPtr ptrBytesRead;
    ReadProcessMemory(m_hProcess, MemoryAddress, buffer, bytesToRead, out ptrBytesRead);
    bytesRead = ptrBytesRead.ToInt32();
    return buffer;
    }
    public byte[] PointerRead(IntPtr MemoryAddress, uint bytesToRead, int[] Offset, out int bytesRead)
    {
    int iPointerCount = Offset.Length - 1;
    IntPtr ptrBytesRead;
    bytesRead = 0;
    byte[] buffer = new byte[4]; //DWORD to hold an Address
    int tempAddress = 0;
    if (iPointerCount == 0)
    {

    ReadProcessMemory(m_hProcess, MemoryAddress, buffer, 4, out ptrBytesRead);
    tempAddress = ToDec(Make(buffer)) + Offset[0]; //Final Address
    buffer = new byte[bytesToRead];
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, bytesToRead, out ptrBytesRead);
    bytesRead = ptrBytesRead.ToInt32();
    //MessageBox.Show(bytesRead.ToString());

    return buffer;

    }
    for (int i = 0; i <= iPointerCount; i++)
    {
    if (i == iPointerCount)
    {
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, 4, out ptrBytesRead);
    tempAddress = ToDec(Make(buffer)) + Offset[i]; //Final Address
    buffer = new byte[bytesToRead];
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, bytesToRead, out ptrBytesRead);
    bytesRead = ptrBytesRead.ToInt32();
    return buffer;
    }
    else if (i == 0)
    {
    ReadProcessMemory(m_hProcess, MemoryAddress, buffer, 4, out ptrBytesRead);
    tempAddress = ToDec(Make(buffer)) + Offset[1];
    }
    else
    {
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, 4, out ptrBytesRead);
    tempAddress = ToDec(Make(buffer)) + Offset[i];
    }
    }
    return buffer;
    }
    public void Write(IntPtr MemoryAddress, byte[] bytesToWrite, out int bytesWritten)
    {
    IntPtr ptrBytesWritten;
    WriteProcessMemory(m_hProcess, MemoryAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);
    bytesWritten = ptrBytesWritten.ToInt32();
    }
    public string PointerWrite(IntPtr MemoryAddress, byte[] bytesToWrite, int[] Offset, out int bytesWritten)
    {
    int iPointerCount = Offset.Length - 1;
    IntPtr ptrBytesWritten;
    bytesWritten = 0;
    byte[] buffer = new byte[4]; //DWORD to hold an Address
    int tempAddress = 0;
    if (iPointerCount == 0)
    {
    ReadProcessMemory(m_hProcess, MemoryAddress, buffer, 4, out ptrBytesWritten);
    tempAddress = ToDec(Make(buffer)) + Offset[0]; //Final Address
    WriteProcessMemory(m_hProcess, (IntPtr)tempAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);
    bytesWritten = ptrBytesWritten.ToInt32();
    return ToHex(tempAddress);
    }
    //only necessary for multiple OFFSETS
    for (int i = 0; i <= iPointerCount; i++)
    {
    if (i == iPointerCount)
    {
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, 4, out ptrBytesWritten);
    tempAddress = ToDec(Make(buffer)) + Offset[i]; //Final Address
    WriteProcessMemory(m_hProcess, (IntPtr)tempAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);
    bytesWritten = ptrBytesWritten.ToInt32();
    return ToHex(tempAddress);
    }
    else if (i == 0)
    {
    ReadProcessMemory(m_hProcess, MemoryAddress, buffer, 4, out ptrBytesWritten);
    tempAddress = ToDec(Make(buffer)) + Offset[i];
    }
    else
    {
    ReadProcessMemory(m_hProcess, (IntPtr)tempAddress, buffer, 4, out ptrBytesWritten);
    tempAddress = ToDec(Make(buffer)) + Offset[i];
    }
    }
    return ToHex(tempAddress);
    }
    public int PID()
    {
    return m_ReadProcess.Id;
    }
    public string BaseAddressH()
    {
    return ToHex(m_ReadProcess.MainModule.BaseAddress.ToInt32());
    }
    public int BaseAddressD()
    {
    return m_ReadProcess.MainModule.BaseAddress.ToInt32();
    }
    [Flags]
    public enum ProcessAccessType
    {
    PROCESS_TERMINATE = (0x0001),
    PROCESS_CREATE_THREAD = (0x0002),
    PROCESS_SET_SESSIONID = (0x0004),
    PROCESS_VM_OPERATION = (0x0008),
    PROCESS_VM_READ = (0x0010),
    PROCESS_VM_WRITE = (0x0020),
    PROCESS_DUP_HANDLE = (0x0040),
    PROCESS_CREATE_PROCESS = (0x0080),
    PROCESS_SET_QUOTA = (0x0100),
    PROCESS_SET_INFORMATION = (0x0200),
    PROCESS_QUERY_INFORMATION = (0x0400)
    }
    public static string Make(byte[] buffer)
    {
    string sTemp = "";
    for (int i = 0; i < buffer.Length; i++)
    {
    if (Convert.ToInt16(buffer[i]) < 10)
    {
    sTemp = "0" + ToHex(buffer[i]) + sTemp;
    }
    else
    {
    sTemp = ToHex(buffer[i]) + sTemp;
    }
    }
    return sTemp;
    }
    public static string ToHex(int Decimal)
    {
    return Decimal.ToString("X"); //Convert Decimal to Hexadecimal
    }
    public static int ToDec(string Hex)
    {
    return int.Parse(Hex, NumberStyles.HexNumber); //Convert Hexadecimal to Decimal
    }
    [DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);
    [DllImport("kernel32.dll")]
    public static extern Int32 CloseHandle(IntPtr hObject);
    [DllImport("kernel32.dll")]
    public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
    [DllImport("kernel32.dll")]
    public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);
    }
    }

    Это можно как то использовать?

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

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

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