Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

MemRead + Autoit

-

Вопросы и ответы, обсуждения

- Ваши вопросы по ASM/WinAPI только в данном разделе

Ответ
 
Опции темы
Старый 11.07.2011, 20:45   #1
 Разведчик
Аватар для Fanky3
 
Fanky3 на правильном путиFanky3 на правильном пути
Регистрация: 17.01.2011
Сообщений: 14
Популярность: 145
Сказал(а) спасибо: 3
Поблагодарили 33 раз(а) в 22 сообщениях
 
По умолчанию MemRead + Autoit

Всем привет! У меня есть проблема.
Кодю на аутоит (учусь).
Столкнулся с проблемой. Нашел Статик адрес, в одной мморпг, не меняется при перезапуске и вы не поверите это значение ХП.
Вопрос в следующем когда пишу скрипт и напрямую указываю этот адрес то выдает что его значение равно нулю...
что то вроде этого
Код:
   
$process_ID=ProcessExists("Client.exe")
$process_handle=_MemoryOpen($process_ID)
$HP=_MemoryRead("0x9C3D5C", $process_handle)
Подскажите в чем загвоздка... или пример обыкновенного чтения из памяти по конкретному адрессу в процессе.
Заранее благодарен. Поиск юзал и гугл тоже. но чтото ничего не фурычит...
  Ответить с цитированием
Старый 29.08.2011, 09:20   #2
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: MemRead + Autoit

Добрый ночер!
Дабы не сорить лишними топиками и ввиду схожести вопросов, пишу сюда:

как и ТС, решил потерзать АутоИт. На данном этапе интересует простая, как мне кажется, вещь - как передать команду (клик, нажатие клавиши) в неактивное окно клиента. С прочими прогами работает простой КонтролСенд. Как быть в случае с игрой? Подскажите, пожалуйста, откуда начать.

Спасибо.

З.Ы. UoPilot кстати прекрасно справляется с этой задачей, не думаю, что он что-то особо немыслимое при этом делает прямо на ходу.

Последний раз редактировалось ktulx; 29.08.2011 в 09:45.
  Ответить с цитированием
Старый 04.09.2011, 18:42   #3
 Разведчик
Аватар для •theSaboteur•
 
•theSaboteur• скоро будет известен•theSaboteur• скоро будет известен•theSaboteur• скоро будет известен
Регистрация: 14.07.2011
Сообщений: 27
Популярность: 244
Сказал(а) спасибо: 26
Поблагодарили 47 раз(а) в 37 сообщениях
Отправить сообщение для •theSaboteur• с помощью ICQ
 
По умолчанию Re: MemRead + Autoit

Fanky3
Код:
#RequireAdmin 
SETPRIVILEGE("SeDebugPrivilege", 1)
узал?

Код:
#region _Memory

Func _MEMORYOPEN($IV_PID, $IV_DESIREDACCESS = 2035711, $IV_INHERITHANDLE = 1)
	If Not ProcessExists($IV_PID) Then
		SetError(1)
		Return 0
	EndIf
	Local $AH_HANDLE[2] = [DllOpen("kernel32.dll")]
	If @error Then
		SetError(2)
		Return 0
	EndIf
	Local $AV_OPENPROCESS = DllCall($AH_HANDLE[0], "int", "OpenProcess", "int", $IV_DESIREDACCESS, "int", $IV_INHERITHANDLE, "int", $IV_PID)
	If @error Then
		DllClose($AH_HANDLE[0])
		SetError(3)
		Return 0
	EndIf
	$AH_HANDLE[1] = $AV_OPENPROCESS[0]
	Return $AH_HANDLE
EndFunc


Func _MEMORYREAD($IV_ADDRESS, $AH_HANDLE, $SV_TYPE = "dword")
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	Local $V_BUFFER = DllStructCreate($SV_TYPE)
	If @error Then
		SetError(@error + 1)
		Return 0
	EndIf
	DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
	If Not @error Then
		Local $V_VALUE = DllStructGetData($V_BUFFER, 1)
		Return $V_VALUE
	Else
		SetError(6)
		Return 0
	EndIf
EndFunc


Func _MEMORYWRITE($IV_ADDRESS, $AH_HANDLE, $V_DATA, $SV_TYPE = "dword")
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	Local $V_BUFFER = DllStructCreate($SV_TYPE)
	If @error Then
		SetError(@error + 1)
		Return 0
	Else
		DllStructSetData($V_BUFFER, 1, $V_DATA)
		If @error Then
			SetError(6)
			Return 0
		EndIf
	EndIf
	DllCall($AH_HANDLE[0], "int", "WriteProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
	If Not @error Then
		Return 1
	Else
		SetError(7)
		Return 0
	EndIf
EndFunc


Func _MEMORYCLOSE($AH_HANDLE)
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	DllCall($AH_HANDLE[0], "int", "CloseHandle", "int", $AH_HANDLE[1])
	If Not @error Then
		DllClose($AH_HANDLE[0])
		Return 1
	Else
		DllClose($AH_HANDLE[0])
		SetError(2)
		Return 0
	EndIf
EndFunc


Func SETPRIVILEGE($PRIVILEGE, $BENABLE)


	Local $HTOKEN, $SP_AUXRET, $SP_RET, $HCURRPROCESS, $NTOKENS, $NTOKENINDEX, $PRIV
	$NTOKENS = 1
	$LUID = DllStructCreate("dword;int")
	If IsArray($PRIVILEGE) Then $NTOKENS = UBound($PRIVILEGE)
	$TOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
	$NEWTOKEN_PRIVILEGES = DllStructCreate("dword;dword[" & (3 * $NTOKENS) & "]")
	$HCURRPROCESS = DllCall("kernel32.dll", "hwnd", "GetCurrentProcess")
	$SP_AUXRET = DllCall("advapi32.dll", "int", "OpenProcessToken", "hwnd", $HCURRPROCESS[0], "int", BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY), "int*", 0)
	If $SP_AUXRET[0] Then
		$HTOKEN = $SP_AUXRET[3]
		DllStructSetData($TOKEN_PRIVILEGES, 1, 1)
		$NTOKENINDEX = 1
		While $NTOKENINDEX <= $NTOKENS
			If IsArray($PRIVILEGE) Then
				$PRIV = $PRIVILEGE[$NTOKENINDEX - 1]
			Else
				$PRIV = $PRIVILEGE
			EndIf
			$RET = DllCall("advapi32.dll", "int", "LookupPrivilegeValue", "str", "", "str", $PRIV, "ptr", DllStructGetPtr($LUID))
			If $RET[0] Then
				If $BENABLE Then
					DllStructSetData($TOKEN_PRIVILEGES, 2, $SE_PRIVILEGE_ENABLED, (3 * $NTOKENINDEX))
				Else
					DllStructSetData($TOKEN_PRIVILEGES, 2, 0, (3 * $NTOKENINDEX))
				EndIf
				DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 1), (3 * ($NTOKENINDEX - 1)) + 1)
				DllStructSetData($TOKEN_PRIVILEGES, 2, DllStructGetData($LUID, 2), (3 * ($NTOKENINDEX - 1)) + 2)
				DllStructSetData($LUID, 1, 0)
				DllStructSetData($LUID, 2, 0)
			EndIf
			$NTOKENINDEX += 1
		WEnd
		$RET = DllCall("advapi32.dll", "int", "AdjustTokenPrivileges", "hwnd", $HTOKEN, "int", 0, "ptr", DllStructGetPtr($TOKEN_PRIVILEGES), "int", DllStructGetSize($NEWTOKEN_PRIVILEGES), "ptr", DllStructGetPtr($NEWTOKEN_PRIVILEGES), "int*", 0)
		$F = DllCall("kernel32.dll", "int", "GetLastError")
	EndIf
	$NEWTOKEN_PRIVILEGES = 0
	$TOKEN_PRIVILEGES = 0
	$LUID = 0
	If $SP_AUXRET[0] = 0 Then Return 0
	$SP_AUXRET = DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $HTOKEN)
	If Not $RET[0] And Not $SP_AUXRET[0] Then Return 0
	Return $RET[0]
EndFunc


Func _MEMORYPOINTERREAD($IV_ADDRESS, $AH_HANDLE, $AV_OFFSET, $SV_TYPE = "dword")
	If IsArray($AV_OFFSET) Then
		If IsArray($AH_HANDLE) Then
			Local $IV_POINTERCOUNT = UBound($AV_OFFSET) - 1
		Else
			SetError(2)
			Return 0
		EndIf
	Else
		SetError(1)
		Return 0
	EndIf
	Local $IV_DATA[2], $I
	Local $V_BUFFER = DllStructCreate("dword")
	For $I = 0 To $IV_POINTERCOUNT
		If $I = $IV_POINTERCOUNT Then
			$V_BUFFER = DllStructCreate($SV_TYPE)
			If @error Then
				SetError(@error + 2)
				Return 0
			EndIf
			$IV_ADDRESS = "0x" & Hex($IV_DATA[1] + $AV_OFFSET[$I])
			DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(7)
				Return 0
			EndIf
			$IV_DATA[1] = DllStructGetData($V_BUFFER, 1)
		ElseIf $I = 0 Then
			DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(7)
				Return 0
			EndIf
			$IV_DATA[1] = DllStructGetData($V_BUFFER, 1)
		Else
			$IV_ADDRESS = "0x" & Hex($IV_DATA[1] + $AV_OFFSET[$I])
			DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(7)
				Return 0
			EndIf
			$IV_DATA[1] = DllStructGetData($V_BUFFER, 1)
		EndIf
	Next
	$IV_DATA[0] = $IV_ADDRESS
	Return $IV_DATA
EndFunc


Func _MEMORYPOINTERWRITE($IV_ADDRESS, $AH_HANDLE, $AV_OFFSET, $V_DATA, $SV_TYPE = "dword")
	If IsArray($AV_OFFSET) Then
		If IsArray($AH_HANDLE) Then
			Local $IV_POINTERCOUNT = UBound($AV_OFFSET) - 1
		Else
			SetError(2)
			Return 0
		EndIf
	Else
		SetError(1)
		Return 0
	EndIf
	Local $IV_STRUCTDATA, $I
	Local $V_BUFFER = DllStructCreate("dword")
	For $I = 0 To $IV_POINTERCOUNT
		If $I = $IV_POINTERCOUNT Then
			$V_BUFFER = DllStructCreate($SV_TYPE)
			If @error Then
				SetError(@error + 3)
				Return 0
			EndIf
			DllStructSetData($V_BUFFER, 1, $V_DATA)
			If @error Then
				SetError(8)
				Return 0
			EndIf
			$IV_ADDRESS = "0x" & Hex($IV_STRUCTDATA + $AV_OFFSET[$I])
			DllCall($AH_HANDLE[0], "int", "WriteProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(9)
				Return 0
			Else
				Return $IV_ADDRESS
			EndIf
		ElseIf $I = 0 Then
			DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(3)
				Return 0
			EndIf
			$IV_STRUCTDATA = DllStructGetData($V_BUFFER, 1)
		Else
			$IV_ADDRESS = "0x" & Hex($IV_STRUCTDATA + $AV_OFFSET[$I])
			DllCall($AH_HANDLE[0], "int", "ReadProcessMemory", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER), "int", "")
			If @error Then
				SetError(3)
				Return 0
			EndIf
			$IV_STRUCTDATA = DllStructGetData($V_BUFFER, 1)
		EndIf
	Next
EndFunc


Func _MEMORYGETBASEADDRESS($AH_HANDLE, $IHEXDEC = 0)
	Local $IV_ADDRESS = 1048576
	Local $V_BUFFER = DllStructCreate("dword;dword;dword;dword;dword;dword;dword")
	Local $VDATA
	Local $VTYPE
	If Not IsArray($AH_HANDLE) Then
		SetError(1)
		Return 0
	EndIf
	DllCall($AH_HANDLE[0], "int", "VirtualQueryEx", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER))
	If Not @error Then
		$VDATA = Hex(DllStructGetData($V_BUFFER, 2))
		$VTYPE = Hex(DllStructGetData($V_BUFFER, 3))
		While $VTYPE <> "00000080"
			DllCall($AH_HANDLE[0], "int", "VirtualQueryEx", "int", $AH_HANDLE[1], "int", $IV_ADDRESS, "ptr", DllStructGetPtr($V_BUFFER), "int", DllStructGetSize($V_BUFFER))
			$VDATA = Hex(DllStructGetData($V_BUFFER, 2))
			$VTYPE = Hex(DllStructGetData($V_BUFFER, 3))
			If Hex($IV_ADDRESS) = "01000000"  Then ExitLoop
			$IV_ADDRESS += 65536
		WEnd
		If $VTYPE = "00000080"  Then
			SetError(0)
			If $IHEXDEC = 1 Then
				Return Dec($VDATA)
			Else
				Return $VDATA
			EndIf
		Else
			SetError(2)
			Return 0
		EndIf
	Else
		SetError(3)
		Return 0
	EndIf
EndFunc


Func _MEMORYMODULEGETBASEADDRESS($IPID, $SMODULE)
	If Not ProcessExists($IPID) Then Return SetError(1, 0, 0)
	If Not IsString($SMODULE) Then Return SetError(2, 0, 0)
	Local $PSAPI = DllOpen("psapi.dll")
	Local $HPROCESS
	Local $PERMISSION = BitOR(2, 1024, 8, 16, 32)
	If $IPID > 0 Then
		Local $HPROCESS = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $IPID)
		If $HPROCESS[0] Then
			$HPROCESS = $HPROCESS[0]
		EndIf
	EndIf
	Local $MODULES = DllStructCreate("ptr[1024]")
	Local $ACALL = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $HPROCESS, "ptr", DllStructGetPtr($MODULES), "dword", DllStructGetSize($MODULES), "dword*", 0)
	If $ACALL[4] > 0 Then
		Local $IMODNUM = $ACALL[4] / 4
		Local $ATEMP
		For $I = 1 To $IMODNUM
			$ATEMP = DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $HPROCESS, "ptr", PTR(DllStructGetData($MODULES, 1, $I)), "wstr", "", "dword", 260)
			If $ATEMP[3] = $SMODULE Then
				DllClose($PSAPI)
				Return PTR(DllStructGetData($MODULES, 1, $I))
			EndIf
		Next
	EndIf
	DllClose($PSAPI)
	Return SetError(-1, 0, 0)
EndFunc

#endregion _Memory
и возможно 0x9C3D5C не адресс переменный, а ее оффсет относительно базового адресса процесса:
$adress = MEMORYMODULEGETBASEADRESS($pid, "Client.exe") + 0x9C3D5C ;как вариант)

Последний раз редактировалось •theSaboteur•; 04.09.2011 в 18:52. Причина: addition
  Ответить с цитированием
Старый 24.02.2012, 21:20   #4
 Пехотинец
Аватар для exorcist001
 
exorcist001 на правильном пути
Регистрация: 23.12.2011
Сообщений: 91
Популярность: 71
Сказал(а) спасибо: 23
Поблагодарили 18 раз(а) в 15 сообщениях
Отправить сообщение для exorcist001 с помощью Skype™
 
По умолчанию Re: MemRead + Autoit

Цитата:
Сообщение от КодПосмотреть сообщение
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Hack By DarkExorcist", 400, 300, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Бессмертие", 5, 5, 100, 20)
$Checkbox2 = GUICtrlCreateCheckbox("Бесскон. СП", 5, 25, 100, 20)
$Button1 = GUICtrlCreateButton("Старт", 5, 265, 75, 30, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Выход", 320, 265, 75, 30, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Hack()
Case $Button2
Exit

EndSwitch
WEnd

Func _Hack();
GUISetState(@SW_HIDE);
ToolTip("Start S4 League!",0,0);
$wait = ProcessWait("Client.exe");
$PID = ProcessExists("Client.exe");
$Open = _MemoryOpen ($PID);.
If GUICtrlRead($Checkbox1) = 1 Then
_MemoryWrite(0x00FE26EA,$Open,"1","Float");
EndIf
If GUICtrlRead($Checkbox2) = 1 Then
_MemoryWrite(0x00EF37A6,$Open,"0","char[2]");
_MemoryWrite(0x00EF37D6,$Open,"0","char[2]");
_MemoryWrite(0x00EF3806,$Open,"0","char[2]")
EndIf
Exit
EndFunc




незнаю правильно ли написанно, но код пашет, покачто нежалавался, для нектрых игр понадобится код суспенда и резюма, ток я его незнаю (код нужен больше всего для игр на Икс-Трапе)
твой код я незнаю поэтому точно немогу сказать, т.к. я его незнаю, хотя чемто он похож...
ну короче, попробуй мой код.

илиже возможно надо найти Поинтер этого адресса, ты проверь, запиши тебе нужный(е) адресс(а) и потом отключи игру и сново вклюси и добавь адресс(а) вручную, есле уних будут значения, которые тебе надо найти и потом изменить то пойнтер искать ненадо, а есле значения нете которые были по этим адрессу(ам) в первый раз, то иши поинтер, онта неизменитсяю

как искать поинтер тут
________________
Помог, жми на спасибо!
Неможеш, на плюсик около авки!
Неполучается, ну что поделать

Последний раз редактировалось exorcist001; 24.02.2012 в 21:23.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Скрипт] autoit maniakk Школа Читера 0 08.03.2011 10:02

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:38.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net