Что нового

Трейнер смещение (Hex)

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Isn, в коде представленным ильей не хватапт несколько строк.
получпния Ид процесса ($pid)
и открытие доступа к памяти просесса, поэтому и ошибка
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Спасибо illja

Наконец то результат:
Код:
;---------------------------------------------------------------------------------------------------------------
#include <NomadMemory.au3>
;---------------------------------------------------------------------------------------------------------------
$sBaseAdres = 0x1E1D40 ;Базовый адрес
$sOffset1 = 0x4C ;Оффсет 1 (смещение)
$sProcess = "123.exe"
$iPID = ProcessExists($sProcess)
$sMemory = _MemoryOpen($iPID)
$sRBaseAdres = _MemoryModuleGetBaseAddress($iPID, '123.exe') ;получаем базовый адрес процесса
$sBaseA = "0x" & Hex($sRBaseAdres + $sBaseAdres) ;складываем со смещением к базовому адресу
$sPar1 = _MemoryRead($sBaseA, $sMemory) ;читаем содержимое базового адреса
$sPar2 = "0x" & Hex($sPar1 + $sOffset1) ;складываем со смещением 1


А можно ли заморозить значение? А не изменить
 

britanec74

Знающий
Сообщения
22
Репутация
8
Код:
#include <NomadMemory.au3>

$WinHandle = "Last Chaos" ;- Имя окна
$pid = WinGetProcess($WinHandle)
$info = _MemoryOpen($pid)
$plus = 0x00788E58
$offset = "28" ;1й указатель. Для моей функции "_MemoryOffsetRead" нужно писать без "0x"

$base = _MemoryModuleGetBaseAddress($pid, "Engine.dll"); получаем адрес длл библиотеки
$base = $base + $plus ;- Получаем БА 
$mem_read = _MemoryOffsetRead($base, $info, $offset) ;читаем содержимое адреса
MsgBox(0,"", $mem_read)

перекачай мою библиотеку NomadMemory.au3
 

britanec74

Знающий
Сообщения
22
Репутация
8
Код:
$offset = StringSplit("0+704+0+58", "+", 1)

Вот так пробуй, запарился и сперва не так поставил смещения
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Конечный оезультат должнен получится 03783600
Меняю на
Код:
$offset = StringSplit("58+0+704+0", "+", 1)

Получается: 4165CE5C


Добавлено:
Сообщение автоматически объединено:

Вроде нашел решение с несколькими, протестирую и отпишусь.
 

illja

Знающий
Сообщения
30
Репутация
10
Рад, что помог!


Код:
#include <MemoryModuleGetBaseAddress.au3>
#include <NomadMemory.au3>

$PID = "Игра.exe"
$plusG = 0x001E18D
$mof1 = 0x0 ;1й указатель
$mof2 = 0x704 ;2й указатель
$mof3 = 0x0 ;3й указатель
$mof4 = 0x58 ;4й указатель

$baseGA = _MemoryModuleGetBaseAddress($PID, '123.exe'); получаем базовый адрес процесса
$baseG = "0x" & Hex($baseGA + $plusG); складываем со смещением к базовому адресу

$11 = _MemoryRead($baseG, $Mem) ;читаем содержимое базового адреса
$M11 = "0x" & Hex($1 + $mof1) ;складываем со смещением 1 
$22 = _MemoryRead($M11, $Mem)
$m22 = "0x" & Hex($22 + $mof2)
$33 = _MemoryRead($m22, $Mem)
$m33 = "0x" & Hex($33 + $mof3)
$44 = _MemoryRead($m33, $Mem)
$m44 = "0x" & Hex($44 + $mof4)
$mapAd = _MemoryRead($m44, $Mem) ;Здесь должно быть твое значение



Гдетокактотак


Про стрингсплит не знаю, но там каждый последующий оффсет прибавляется к "Считанному" адресу из предыдущей суммы!
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
illja
Спс, еще раз, немного по другому сделал с несколькими офсетами)
Тема решена.
 

illja

Знающий
Сообщения
30
Репутация
10
Так расскажи как, нам будет интересно)
 

torrentir

Новичок
Сообщения
1
Репутация
0
Здравствуйте, дабы не плодить одинаковых тем хочу обновить эту. Топикпастер, как часто это бывает, нашел решение своей проблемы но не поделился с остальными...забил на тему.

Требуется читать данные из памяти, проблема в цепочке смещений.
С помощью cheat engine вычислил статический адрес и всю цепочку смещений
image.jpg


далее столкнулся с такой же проблемой что и у чувака в этой теме, суть в том что имеем скрипт
Код:
#include <NomadMemory.au3> 
$mid = _MemoryOpen(ProcessExists("Game.exe")) 
$offset0 = "0x" & hex(_MemoryRead(0x082AD1A0 + 0x41C, $mid)) 
$offset1 = "0x" & hex(_MemoryRead($offset0 + 0x4, $mid)) 
$offset2 = "0x" & hex(_MemoryRead($offset1 + 0x0, $mid)) 
$offset3 = "0x" & hex(_MemoryRead($offset2 + 0x40, $mid)) 
$offset4 = _MemoryRead($offset3 + 0x4, $mid) 
_MemoryClose($mid) 
MsgBox(1,"Test",$offset4)

скрипт всегда возвращает 0, подскажите что делаю не так?


Добавлено:
Сообщение автоматически объединено:


Код:
#RequireAdmin ;User Account must have Administrator privlidges 
#include <MemoryModuleGetBaseAddress.au3>
#include <NomadMemory.au3>

$plusG = 0x082AD1A0
$mof1 = 0x41c ;1й указатель
$mof2 = 0x4 ;2й указатель
$mof3 = 0x0 ;3й указатель
$mof4 = 0x40 ;3й указатель
$mof5 = 0x4 ;3й указатель

$baseGA = _MemoryModuleGetBaseAddress($PID, 'game.exe'); получаем базовый адрес процесса
$baseG = "0x" & Hex($baseGA + $plusG); складываем со смещением к базовому адресу

$11 = _MemoryRead($baseG, $Mem) ;читаем содержимое базового адреса
$M11 = "0x" & Hex($1 + $mof1) ;складываем со смещением 1 
$22 = _MemoryRead($M11, $Mem)
$m22 = "0x" & Hex($22 + $mof2)
$33 = _MemoryRead($m22, $Mem)
$m33 = "0x" & Hex($33 + $mof3)

$44 = _MemoryRead($m33, $Mem)
$m44 = "0x" & Hex($44 + $mof4)

$55 = _MemoryRead($m44, $Mem)
$m55 = "0x" & Hex($55 + $mof5)

$mapAd = _MemoryRead($m55, $Mem) ;Это итог

MsgBox(48, "Результат", $mapAd)


пробую это вариант но он тоже не работает, смущает часть кода
Код:
$baseGA = _MemoryModuleGetBaseAddress($PID, 'game.exe'); получаем базовый адрес (ТУТ В ОРИГИНАЛЕ ИСПОЛЬЗУЕТСЯ ДОПОЛНИТЕЛЬНАЯ ДЛЛ, В МОЕМ СЛУЧАЕ ВСЕ В ОДНОМ EXE)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
torrentir
Попробуйте убрать везде "0x" и преобразование в HEX.
Код:
...
$offset0 = _MemoryRead(0x082AD1A0 + 0x41C, $mid)
$offset1 = _MemoryRead($offset0 + 0x4, $mid)
$offset2 = _MemoryRead($offset1 + 0x0, $mid)
...
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Isn, torrentir, Вы только себя путаете этими преобразованиями.

Пару заметок вам: Данные вида 0x... преобразовываются в DEC после компиляции. Так же функция _MemoryRead возвращает данные в DEC(при чтении поинтера как INT). Какой смысл преобразовывать DEC в HEX, затем все это в строку, а затем обратно?

Есть у меня проект, для которого специально писал функцию для многоуровневого чтения поинтеров, если нужна - скину.



Добавлено:
Сообщение автоматически объединено:

Код:
Local $_aPoints[ 5 ][ 6 ] = [ [ 0x400000, 5 ], 
	[ 'STATIC', -1, -1, -1, -1, 0xA258C4 ], _
	[ 0x9FCDD8, 0x13A8, 0x4, 0x18, -1, 0x28 ], _
	[ 'OFFSET', -1, -1, -1, -1, 0x78 ], _ 
	[ 0x9FCDD8, 0x5FC, -1, -1, -1, 0x04 ] ] 

;Local $_aPoints[ 5 ][ 6 ] = [ [ BASEADDRESS, LEVEL ], 
	;[ ADDRESSTYPE, OFFSET1, OFFSET2, OFFSET3, OFFSET4, FINALOFFSET ], _


Код:
ADDRESSTYPE: Тип адреса
STATIC - Статический адрес.
OFFSET - Как и STATIC, но для удобства именуется оффсетом(если это оффсет).
0x... - Статический адрес первого поинтера.

OFFSET1 - Оффсет следующего поинтера по отношению указателя в предыдущем.
OFFSETN - Оффсет следующего поинтера по отношению указателя в предыдущем.
FINALOFFSET -Оффсет адреса по отношению к указателю финального поинтера.

;Возвращает одномерный массив, каждая ячейка которого соответствует ячейке $_aPoints
Код:
Func _Ilum_LoadMemoryTable( $_aPoints )
	Local $_aPoints_Size = UBound($_aPoints) - 1, $_sBinary = 0

	Local $aRet[ $_aPoints_Size ]
	For $IdxRow = 1 To $_aPoints_Size Step 1
		For $IdxCol = 0 To $_aPoints[0][1] Step 1
			If Not $IdxCol Then
				If $_aPoints[$IdxRow][0] <> 'OFFSET' Then
					$_sBinary = $_aPoints[0][0]
					If $_aPoints[$IdxRow][0] <> 'STATIC' Then
						$_sBinary = _MemoryRead( $_sBinary + $_aPoints[$IdxRow][0] )
					EndIf
				Else
					$_sBinary = 0x00
				EndIf
			ElseIf $IdxCol = $_aPoints[0][1] Then
				$_sBinary = $_sBinary + $_aPoints[$IdxRow][$_aPoints[0][1]]
			ElseIf $_aPoints[$IdxRow][$IdxCol] <> -1 Then
				$_sBinary = _MemoryRead( $_sBinary + $_aPoints[$IdxRow][$IdxCol] )
			EndIf
		Next
		$aRet[$IdxRow-1] = $_sBinary
	Next

	Return $aRet
EndFunc


Функцию чтения процесса я использовал другую, поэтому к текущей _MemoryRead добавь вторым аргументом открытый процесс.
 
Верх