Что нового

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

Isn

Новичок
Сообщения
119
Репутация
3
Доброго времени суток.
Решил набросать простой трейнер:

Код:
;-------------------------------------------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3> 
;-------------------------------------------------------------------------------------------------------------
$Form1 = GUICreate("Test", 241, 117)
$Button1 = GUICtrlCreateButton("Button1", 80, 32, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 80, 64, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
;-------------------------------------------------------------------------------------------------------------
$sProcess = _Memoryopen(ProcessExists("test.exe"))
;-------------------------------------------------------------------------------------------------------------
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	    Case $Button1
			; Пример Memorywrite(0x1E1D40, $sProcess, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C,"dword")
	    Case $Button2
	EndSwitch
WEnd
;-------------------------------------------------------------------------------------------------------------


Подскажите как записать адресс со смещением Hex

Адрес со смещением +001E1D40 смещение Hex 4C
Как правильно написать в коде?
В поиске форума только схожие примеры что выше.
Спасибо.
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
Код:
_Memorywrite(0x1E1D40, $sProcess, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C,"dword[6]")
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
100% работает
Код:
_Memorywrite(0x1E1D40, $sProcess, "0x4c4c4c4c4c4c", 'byte[10]')
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
У меня не первый вариант не второй не срабатывает.
А что значит dword[6] тип и на что изменить?

Нашел статью: AutoIt 3 Memory Editing

Может по этому примеру получится?



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

радикал
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
все работает как бы :smile:

7f39da6791.jpg


Код:
#include <NomadMemory.au3>
_Memorywrite(0x02D80020, _Memoryopen(ProcessExists("zA.exe")), "0x4c4c4c4c4c4c", 'byte[6]')
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Black_Hole
У тебя как и в стандартом примере.
У меня адрес при каждом запуске в игре меняется а не постоянный, потому со смещением
В твоем примере, я думаю этого не добится.

И на этом спасибо, буду рыть дальше.
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
Isn
Адрес будет всегда меняться при новом запуске
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Для этого есть поиск поинтеров и офсетов. Пойнтер есть и офсет тоже


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

Думаю решение в этой теме но пока не разобрался.
 

illja

Знающий
Сообщения
30
Репутация
10
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>

AdlibRegister("_msg", 50)

$write = 0
$ADR = ; вписать адрес
$ZN = ;вписать записываемое значение

;-------------------------------------------------------------------------------------------------------------
$Form1 = GUICreate("Test", 241, 117)
$Button1 = GUICtrlCreateButton("Button1", 80, 32, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 80, 64, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
;-------------------------------------------------------------------------------------------------------------
$sProcess = _Memoryopen(ProcessExists("zA.exe"))

;-------------------------------------------------------------------------------------------------------------
While 1
	Sleep(10)
WEnd

Func _msg()
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			If $write = 0 Then
				AdlibRegister("Write_", 50)
				$write = 1
			ElseIf $write = 0 Then
				AdlibUnRegister("Write_")
                                                         $write = 0
			EndIf
		Case $Button2
	EndSwitch
EndFunc   ;==>_msg

Func write_()
	_Memorywrite($ADR, $sProcess, $ZN, 'byte[6]')
EndFunc   ;==>write_


Возможно просто адрес надо не разово писать, а морозить.
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Пример рабочий но мне не подходит мне нужно посчитать с офсетом
что вроде того:
Код:
#include <nomadmemory.au3>

$proces_name="SpiderSolitaire.exe"
$base_adres=0x923090
$ofset1=0x8C
$ofset2=0x10
$data=99

$PID=ProcessExists($proces_name)
$memory = _MemoryOpen($PID)
$poit1=_MemoryRead($base_adres, $memory)
$poit2=_MemoryRead($poit1+$ofset1, $memory)
_MemoryWrite($poit2+$ofset2,$memory,$data)



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

Пробую пример что написал выше, ни чего не выходит. Без офсета нормально меняет значение. Но мне нужно с офсетом.
 

illja

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

$plusG = 0x72AB20
$mof1 = 0x44 ;1й указатель
$mof2 = 0x714 ;2й указатель
$mof3 = 0x0 ;3й указатель

$baseGA = _MemoryModuleGetBaseAddress($PID, 'Engine.dll'); получаем базовый адрес процесса
$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)
$mapAd = _MemoryRead($m33, $Mem) ;Это итог


Пожалста
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Поробывал твой код исправил опечатки, не хотит работать((
 

Spyhunter

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

$proces_name = "SpiderSolitaire.exe"
$base_adres = 0x923090
$vOffset1 = 0x8C
$vOffset2 = 0x10

$iPID = ProcessExists($proces_name)
$hMemory = _MemoryOpen($iPID)
$iData = '99'

$11 = _MemoryRead($base_adres, $hMemory) ;Читаем содержимое базового адреса

$M11_1 = "0x" & Hex($11 + $vOffset1) ;Складываем со смещением 1
$M11 = StringReplace($M11_1, '0x000000000', '0x') ;Посмотри сколько лишних 0 в полученной строке
$22 = _MemoryRead($M11, $hMemory)

$m22_1 = "0x" & Hex($22 + $vOffset2) ;Складываем со смещением 2
$M22 = StringReplace($m22_1, '0x000000000', '0x') ;Посмотри сколько лишних 0 в полученной строке
$33 = _MemoryRead($M22, $hMemory) ;Полученный адресс

_MemoryWrite($33, $hMemory, $iData)


Я не проверял и не особо настраивал к твоему случаю, но суть такова.

OffTopic:
Илья, на одну игру проги делаем :smile:
 

illja

Знающий
Сообщения
30
Репутация
10
Код 100% рабочий. У меня ж работает, дай свой баовый адрес+оффсеты.


Угу на 1 игру) только я уже не делаю, так поддерживаю.
 
Автор
Isn

Isn

Новичок
Сообщения
119
Репутация
3
Вот скрие СЕ:
радикал
Игра Сокровища Монтесумы

В се значения времени без проблем меняются и после перезапуска.
Но в autoit не могу своять, ни чего не выходит.
Указываю адрес, офсет но безрезультатно
Код:
#include <nomadmemory.au3>

$proces_name = "TheTreasuresofMontezuma.wrp.exe"
$base_adres = 0x003c72f0
$vOffset1 = 0x6FC

$iPID = ProcessExists($proces_name)
$hMemory = _MemoryOpen($iPID)
$iData = '10000'

$11 = _MemoryRead($base_adres, $hMemory) ;Читаем содержимое базового адреса
$M11_1 = "0x" & Hex($11 + $vOffset1) ;Складываем со смещением 1
$M11 = StringReplace($M11_1, '0x0000000', '0x') ;Посмотри сколько лишних 0 в полученной строке
$22 = _MemoryRead($M11, $hMemory)

_MemoryWrite($22, $hMemory, $iData)
 

illja

Знающий
Сообщения
30
Репутация
10
щелкни 2жды на адресс ув своем СЕ, откроется табличка с указателями, вот она и нужна.
 
Автор
Isn

Isn

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

illja

Знающий
Сообщения
30
Репутация
10
Ну там путь не до базового модуля. базовый адрес определяется например так

"Engine.dll"+00788E58+28 Это все в коде автоит будет иметь следующий вид

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

$plusG = 0x00788E58
$mof1 = 0x28 ;1й указатель

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

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

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


Ну и так до бесконечности, в зависимости от "вложенности" адреса

базовый адрес такой зелененький в читэнжине.
 
Автор
Isn

Isn

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

Ошибку выдает


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

illja
А почему у тебя в инкладх эти две?
Код:
#include <MemoryModuleGetBaseAddress.au3>
#include <NomadMemory.au3>

В NomadMemory.au3 есть же функция MemoryModuleGetBaseAddress
 
Верх