-
Постов
31 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные gastraler
-
-
Перезагружай дальше, но загружай разные сохраненки.
Отсеивай по значению, и при этом меняй в игре оружие если ты ищешь патроны.
Попробуй отсеять значения на другом компьютер.
-
-
Мужик наверное через Promt пишет.
Пиши лучше на Английском
-
Адрес указателя на ножницы: D3DDrv.dll+CB7F8
offset: 0x7EC, 0x3B4, 0x2B0, 0x78, 0x274
Подставляешь это и будут тебе ножницы
Указатели удобно искать так:
Сохраняешь поиск указателей, выходишь с игры, загружаешь разные сохраненнки и опять ищешь свое значение.
Загружаешь сохраненный поиск и отсеиваешь его уже на новый адрес.
Вот что получится:
-
Как подключиться к базовому адресу ==> Тут
ты так не понятно выражаешься, что я даже решил скачать игру
-
-
Я использовал KeyboardHook, так как все равно фокусировка на кнопки теряется, т.е. из окна игры не будет фокусировки на кнопки.
-
Не то, нужен метод Сontrol.Focus или Control.Select.
Эх на работу вызывают
-
Вот чего я нашел: Pro.dot.NET.2.0.Windows.Forms.and.Custom.Controls.pdf
-
Как убрать зависимость элементов в окне от клавиши "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;
}
} -
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);Теперь кнопка без защелки, любого типа.
-
Надо чтобы работал как Flat a выгледел иначе, для Flat эти настройки в VC существуют, для остальных нет. За инфу спасибо, MouseEventArgs с этим можно что то сделать.
Я видел люди пишут классы, но пока не попалось готовых (всяка хрень).
-
Вот я подставляю кнопку в твой код:
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;
}
}
}
}
}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); -
Нет, или я не так записал.
private void button1_Click(object sender, System.EventArgs e)
{
if (UnlimitedHealth)
{
UnlimitedHealth = false;
BtnClr = ((Button)sender).BackColor;
((Button)sender).BackColor = Color.Red;
}
else
{
UnlimitedHealth = true;
((Button)sender).BackColor = BtnClr;
}
}Также залипает.
-
Играюсь уже с утра. Надо чтобы нажал изменила цвет, отпустил, цвет вернулся на исходную.
Кнопка без фиксации. Но чтобы не Flat.
-
Есть вот такая кнопка:
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 не красивая кнопка, не нравится она мне.
Как сделать чтобы нормальная кнопка не залипала и меняла цвет?
-
ZOCKIR
Добавь в учебник статьи по созданию трейнера например в C#, Assembler.
Cheat Engine конечно интересно, но там и так все интуитивно понятно.
На сегодня все учебники что я видел на C#, там либо ворон и коров считают, или какой то бухгалтерский учет, что нормальному человеку абсолютно не надо.
Изучать такие учебники одна тоска.
Существующий подобно твоему учебник http://zalil.ru/29974306/31adb6d0.4e15bfc82/GHBook.chm сильно устарел.
Желаю успехов
-
На самом деле класс в порядке,
просто я в последний раз случайно вместо offset = { 0x7c, 0x4, 0x160 } записал offset = { 0x7c + 0x4 + 0x160 }
:-D :-D
и float с плюсами вписался без вопросов :-P
-
Не в преобразовании было дело, что то не с классом.
С DLL тогоже автора все получилось.
MemoryEditor.dll ==> http://forum.cheaten...5185623#5185623
Консольная версия, подставь свои значения
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);
}
}
}
}
} -
Тебе поможет [вот эта] штука.
Что то вроде этого? :
BitConverter.ToSingle(myMemory.PointerWrite((IntPtr)MemoryAddress, valueToWrite, pointerOffset, out bytesWriten), 0);
-
ZOCKIR
Не работает, я с этого и начал. По идее если меняется один параметр, то меняется все.
Может и меняется, но результат не записывается. Как отследить, пока не понял в чем проблема.
-
Такой вот еще вопрос!
Если значение float
как все это:
string writtenddress = myMemory.PointerWrite((IntPtr)MemoryAddress, valueToWrite, pointerOffset, out bytesWriten);
преобразовать во float ???
Адрес менял на float, значение тоже менял и все равно не записывается (((
-
Сегодня опять дома и продолжаю мучить свой трейнер.
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);
}
}Из консоли все работает, и даже патроны добавляет. Спасибо за науку работы с консолью!!!
Как же привязаться к форме? Что то я опять туплю. Может кто подскажет !
Люди!!! Дайте кто нибудь исходник, с указателем на модуль. Пожалуйста!!!
Может грубо но приляпал
Андрюхе огромное спасибо!!!
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
-
А если в трейнере есть вот такой класс:
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);
}
}Это можно как то использовать?
Проблемы с Cheat Engine 6.1
in Cheat Engine
Опубликовано
Патроны разные бывают , можешь даже лопату в руки взять, а ищешь все равно патроны.
чтобы отсеивать по адресу, надо этот адрес сначала найти, а по значению и так должно быть видно