HPB
-
Постов
31 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные HPB
-
-
почему тогда в СЕ смотрю там "Play.exe"+012F4EB0 получается совсем не 16F4EB0
такое чуство что в этом случае каламбур какойто
открыл солитёр игра стандартная на пк нашёл адрес "счёта(0097810)" нашёл указатель с 1 смещением (0x30)
вооот потом посмотрел базовый адрес через СЕ =00400000
сам указатель ="sol.exe"+00007170 ->00977E0
00977E0 +30 = 0097810 (адрес "счёта"
получается что "sol.exe" не 00400000
что же в этом случае делать?
-
а каким образом можно это сделать более удобным способос добишь посредством программ на с++ или шарпе
опять ARM4Nd0 вашим спосбом вышел на 00400000
или я может что не понимаю
"Play.exe"+012F4EB0 -простое алгебраическое сложение? после чего получиться адрес или получившийся адрес укажет на какойто адрес?
-
как прочитать адрес "Play.exe" скажу ,что базовый адрес 400000 не срабатывает ....
-
VAM = new VAMemory("Play.exe");
Int32 Sme = 0x30;
Int32 BaseAddress = 0x00400000;//это база её можно найти через Се во вкладки Memory View -View-Enumerate DLL
Int32 MyOffset = 0x0FFD4F20;//указатель
IntPtr MainPointer = (IntPtr)(BaseAddress + MyOffset);
Int32 DestAddress = VAM.ReadInt32(MainPointer);
IntPtr MinorPointer = (IntPtr)(DestAddress + Sme);
Int32 ValueAddress = VAM.ReadInt32(MinorPointer);
Int32 MyValue = VAM.ReadInt32((IntPtr)ValueAddress);
textBox1.Text = Convert.ToString(MyValue);в текстбоксе "0"
может всё из за того что тип "float"
..
закройте тему я нашёл изъян в таком способе выхода на адрес : )
но если у кого то будет рабочий способ то прошу вас всё равно выложить
-
-
пожалуйста помогите : (
-
ну я бы не стал бы обращаться на форум если бы знал как это сделать
да я мало знаю c# а по вашему мнению я совсем ничего не знаю..
просто я изучаю её по школьной системе и ничего такого вот ещё не было ,думаю и не будет
-
чёрт такое чуство что вы не понимаете что я хотел бы от функциональности программы
-
я не копировал код у меня был сначала один который я делал по гайду так скажем ..затем здесь мне посоветовали придержаться такого метода
-
просто есть план выполнения найти адрес: на который указывает указатель +смещение + базу
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
{
public partial class Form1 : Form
{
VAMemory VAM;
public Form1()
{
InitializeComponent();
VAM = new VAMemory("hitman");
Int32 BaseAddress = 0x00400000;//это база её можно найти через Се во вкладки Memory View -View-Enumerate DLL
Int32 MyOffset = 0x012DF0F0;//указатель
IntPtr MainPointer = (IntPtr)(BaseAddress + MyOffset);
Int32 DestAddress = VAM.ReadInt32(MainPointer);
IntPtr MinorPointer = (IntPtr)(DestAddress + 0x30);
Int32 ValueAddress = VAM.ReadInt32(MinorPointer);//это пункт B
Int32 MyValue = VAM.ReadInt32((IntPtr)DestAddress);
textBox1.Text = "0x" + Convert.ToString(MyValue, 16);
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text.ToUpper();
}но что за шняга ...этот код последовательно выполняясь выведет мне АДРЕС или что то другое?
если адрес который содержит в себе "указатель" то почему он постоянно Статический даже когда я перезапускаю игру он не DMA такое чувство что я прочитал значение
-
а каким способом я могу конвиртировать Стринг в 16чную систему?
когда 2 смещения было ещё хоть как то ясно а для одного смещения я правильно сделал?
VAM = new VAMemory("hitman2");
Int32 BaseAddress = 0x00400000;//это база её можно найти через Се во вкладки Memory View -View-Enumerate DLL
Int32 MyOffset = 0x021FDEA0;//указатель
IntPtr MainPointer = (IntPtr)(BaseAddress + MyOffset);
Int32 DestAddress = VAM.ReadInt32(MainPointer);//это пункт A
IntPtr MinorPointer = (IntPtr)(DestAddress + 0x30);
Int32 ValueAddress = VAM.ReadInt32(MinorPointer);//это пункт B
Int32 MyValue = VAM.ReadInt32((IntPtr)ValueAddress);//это пункт C
textBox1.Text = Convert.ToString(0x0+ValueAddress);
MessageBox.Show("адрес-----" + ValueAddress);в итоге жму на кнопку и в textBoxe вегда меняется цирф..я так и не пойму я вышел на значение адреса или на "АДРЕС" я хочу вывести адрес
-
ну как всегда. понятно что я мало знаю..
Coder
VAM = new VAMemory("hitman2");
Int32 BaseAddress = 0x00400000;//это база её можно найти через Се во вкладки Memory View -View-Enumerate DLL
Int32 MyOffset = 0x0021E45C;//указатель
IntPtr MainPointer = (IntPtr)(BaseAddress + MyOffset + 0x30);//смещение не знаю как использовать либо 30 либо 0x30
Int32 DestAddress = VAM.ReadInt32(MainPointer);//это пункт A
IntPtr MinorPointer = (IntPtr)(DestAddress + 0x96);//второе смещение
Int32 ValueAddress = VAM.ReadInt32(MinorPointer);//это пункт B
textBox1.Text = Convert.ToString(MinorPointer);так будет верно или нет? и как мне перевести в другую систему так ка int отличается совсем от того что находиться в СЕ и я не смогу через другую программу вставив этот полученный результат подключиться к процессу и найти адрес
Coder если знаешь почему не хочешь помочь? на ошибках лучше всё запоминается ..да и вспомни как сам начинал всё было легко?скажи..и что всё всё в книгах было ??я думаю что нет
От Администратора:
Уважаемый пользователь, прошу Вас воспользоваться такой фишкой как спойлеры
[spoiler=Hidden]Скрытый текст[/spoiler]
//Kvazimado
-
а если тыкнуть носом
ну подскажите пожалуйста чтоб я забыл всё это как страшный сон..
и вас не мучил и себя
-
а что для вывода прочитанного адрес нужно? какой метод
единственное что я знаю похоже на Read это ReadBytes/ReadChars (как то писал программку с обменом сообщения ..и эти методы высчитывали N кол-во байтов)
-
Int32 MyValue = VAM.ReadInt32(ValueAddress);//это пункт C
не возможно преобразование
Process[] aProcesses = Process.GetProcessesByName("hitman2");
if (aProcesses.Length != 0)
{
oMemory.ReadProcess = aProcesses[0];
oMemory.Open();
int iStep2_Address = Addr.ToDec("21E45C"); без 00 в начале
int[] iStep2_Offsets = { 0x30, 0x96 };
int bytesWritten;
byte[] bValue_To_Write = BitConverter.GetBytes(1000);
string sWritten_Address = oMemory.PointerWrite((IntPtr)iStep2_Address, bValue_To_Write, iStep2_Offsets, out bytesWritten);
if (bytesWritten == bValue_To_Write.Length)
MessageBox.Show("Wrote 1000 to " + sWritten_Address + "!");
else
MessageBox.Show("There was an error writing 1000 to " + sWritten_Address + ".");
oMemory.CloseHandle();
}
}блин хороший вариант но без базы
-
вот зашёл в игру я ...именно такой же базовый адрес "00400000"
и что дальше?
как это всё будет примерно выглядеть в шарпе?
Address op pointer ->hitman2.exe+0021E45C
BaseAddress->0040000
и как теперь быть?
http://forum.gamehac...B5%D1%81%D1%83/
что то я не пойму
Спасибо за уроки которые я уже видел!
Но меня все таки мучает один опрос, ответа на который я ни где не нашел.
Как подключиться к базовому адресу, на который указывает указатель?
Есть вот такой Offset, игры Half-Life:
Вопрос как подключиться к указателю hw.dll+7bbd9c или модулю hw.dll, например в моем трейнере:
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 = "10343A08";
int[] AmmoOffset = { 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();
int pointerAddress = HexToDec(AmmoPointer);
int[] pointerOffset = AmmoOffset;
int bytesWriten;
byte[] valueToWrite = BitConverter.GetBytes(ammoToFill);
string writtenddress = myMemory.PointerWrite((IntPtr)pointerAddress, 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);
}
}
} -
я только что нашел блог kenga случайно
и да я до сих пор не смог прочитать указатель..
выйти на действительный нужный мне адрес
поэтому и обратился к вам..так как не знал как справиться
у меня есть 2 программы
1. исполняемая (тобишь ты ввёл адрес и всё она покатила тебе там делать сама что надо)
2. именно нужно найти вот этот адрес чтобы именно в первую и вставить
код кенга очень массивный это ж сколько будет моя програмка хоть и в Кб но всё равно ....
Coder помоги ещё разок только чтоб уж до меня дошло до конца : (
ну не получается у меня я уже по разному перепробовал...
объясни на примеру игры Hitman - Silent Assassin как и что куда записать "как говориться последнее китайское после которого я пойму"
как я разобрался
указатель 0021E45C прибовляем 30 получаем 0012СС54 + 96 получаем 064EE746(конечный адрес..)
как мне его найти посредством c# разсусольте пожалуйста ..буду вам благодарен
мне не нужно найти значение а именно "конечный адрес" который в себе содержал указатель
-
-
я не убийца просто ну не знаю я
-
всё таки с вторы параметром что то не так
гуглю.
а почему у меня его вариант выдавал другой адрес или это был вовсе не адрес?
-
к сож. учу немец но тут ничего сложного не было... вы правы
мне нужно :
int basepointer = 0x011А0EA0;
int offsets = 30;
int level = 1;
?
(int basepointer = 0x011А0EA0,int level = 1, Int32[] offsets = 0x30)
-
где basepointer-указатель?
offsets-офсет смещения
? так или не так
или это так сложно или я такой тугодум
ааа ужасно как же это действует на мозг
-
я и хотел это сказать не правильно выразился...
я знаю что указатель "указывает на другой адрес" тобишь обычный jmp
а в чём моя проблема?
-
я знаю что указатель это адрес в памяти и если я буду на него ссылаться то он должен "jmp" как бы на другой адрес + относительное смещение
минимальное знание о указатели и представление где работаю
а вы все такие "профи" ....сразу бы закопали ваша б воля
"на ошибках учатся"
я читал ни одну книгу и всегда мало что ясно, пока не попробуешь это сам.! ,а..когда сталкиваешь то на практике совсем все иначе
баз. адрес
in Cheat Engine
Опубликовано
Show module address?.