Что нового

Работа с памятью процесса

ergo

Новичок
Сообщения
6
Репутация
0
Собственно я занимаются этим делом не давно, но уже пришел к выводу, что если хочется написать что, то более разумное, чем клик в пиксель нужно лезть в память процесса. Мой вопрос такой – как с конкретного процесса по заданному адресу ячейки памяти выудить ее содержимое по средствам Autoit, По возможности выложите простой пример. К примеру можно взять процесс любой популярной ММО Eve либо WoW либо вообще notepad...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
В еве подключение к памяти процесса затруднительно и немедленно наказуемо. Вот пример для AO сделанный на основе WoW.
Код:
#include <nomadmemory.au3>
#include <GUIConstantsEx.au3> 
#Include <Timers.au3> 
 
 $AllodsProcessName = "MMO A1"

$ProcessID = WinGetProcess($AllodsProcessName,"")
SetPrivilege("SeDebugPrivilege", 1)
If $ProcessID = -1 Then
	MsgBox(4096, "ERROR", "Failed to detect MMO A1 running.")
	Exit
EndIf


$DllInformation = _MemoryOpen($ProcessID)
		If @Error Then
			MsgBox(4096, "ERROR", "Failed to open memory.")
			Exit
		EndIf
		
		
$BotVersion = "0.04" 
Global  $GUITitle = "AO Bot v" & $BotVersion 
Global  $win_main, $mem_label1, $mem_label2 ,$mem_label1_1, $mem_label2_1
 
$i = "1" 
TestGUI() 
 
Func TestGUI() 
    $win_main = GUICreate($GUITitle, 200, 200, -1, -1) 

	$mem_label2_1 = GUICtrlCreateLabel('HP:', 15, 25, 150, 20) 
	$mem_label2 = GUICtrlCreateLabel('11', 40, 25, 150, 20)
	
	$mem_label1_1 = GUICtrlCreateLabel('EN:', 15, 50, 150, 20) 
	$mem_label1 = GUICtrlCreateLabel('11', 40, 50, 150, 20) 
    GUISetState(@SW_SHOW) 
 
    _Timer_SetTimer($win_main, 500, '_Update_mem') 
 
	While 1 
        $msg = GUIGetMsg() 
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop 
    WEnd 
 
    GUIDelete() 
EndFunc 
 
Func _Update_mem($hWnd, $Msg, $iIDTimer, $dwTime) 
_CurrentEN()
_CurrentHP()

GUICtrlSetData($mem_label1, StringFormat($ENdec)) 
GUICtrlSetData($mem_label2, StringFormat($HPdec))
EndFunc

Func  _CurrentEN()
	$CurrentEN = (_MemoryRead(0x08747DEC, $DllInformation, 'ptr'))
	If @Error Then
		MsgBox(4096, "ERROR", "Failed to read memory.")
		Exit
	EndIf
	Global $ENdec = dec(StringTrimLeft($CurrentEN, 2))
EndFunc

Func _CurrentHP()
	$CurrentHP = (_MemoryRead(0x08747DE8, $DllInformation, 'ptr'))
	If @Error Then
		MsgBox(4096, "ERROR", "Failed to read memory.")
		Exit
	EndIf
	Global $HPdec = dec(StringTrimLeft($CurrentHP, 2))
EndFunc
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
Работа с памятью всегда черевата различными сложностями, не стоит забывать, что в случае с онлайн играми кроме клиента имеется сервер :-X
 

Archy26

EVE DEVE eve bot development group
Сообщения
60
Репутация
42
Белфигор и Панда +1

Возьмём к примеру EVE. Подключение к памяти процесса в ней наказуемо немедленным крашем клиента. И, хотя и не немедленным, но неотвратимо последующим баном, если в этот момент был загружен оплаченый аккаунт.

В следствие этого, мы с Белфигором, потратив большое количество времени на тесты, пришли к выводу что в еве выгоднее: либо взламывать клиент по настоящему (а кто такое умеет, ботов для игрушек не пишет :smile: ), либо сразу писать OCR-бота.

Ну и ДА! Есть ещё сервер, который регистрирует правильность запросов и ответов, правильность шифрования, и даже правильную последовательность пакетов, и т.д.

Вот и причина, почему именно OCR-бот, а не что-то умнее.

P.S.: Для тех, кто считает себя умнее других, предлагаю, средствами автоита написать снифер памяти клиента EVE-онлайн, который будет стабильно распознавать хотя бы состояние локала. Сколько там плюсов, сколько там минусов, и сколько там в целом народу.
Сделавшему это публично вынесу поздравления.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Суть не в этом, есть ряд людей котрые больше 4-х лет пытаются взломать пакеты евы, но без особых успехов. Но например на AutoIt был написан снифер пакетов WoW
 

Archy26

EVE DEVE eve bot development group
Сообщения
60
Репутация
42
Belfigor сказал(а):
Суть не в этом, есть ряд людей котрые больше 4-х лет пытаются взломать пакеты евы, но без особых успехов. Но например на AutoIt был написан снифер пакетов WoW
А зачем ты мне про колбасу, когда я про корову??? :smile:
Я ведь говорю конкретно про EVE-online
 

serivanov

Новичок
Сообщения
9
Репутация
0
Belfigor сказал(а):
В еве подключение к памяти процесса затруднительно и немедленно наказуемо. Вот пример для AO сделанный на основе WoW.
Что делает данный скрипт в WoW?
В Perfect World вроде как нет нормальной защитой от этого (пока).
Интересует, как подключиться к процессу, отвечающему за движение персонажа, чтоб передвигаться не эмулируя клики мышкой, а посылая значения координат в память клиента.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
в WoW этот скрипт ищет указанные ячейки памяти и тягает из них данные чтобы отобразить в своей форме.
чтобы подключиться к "процессу, отвечающему за движение персонажа" надо сперва хотябы погуглить чтобы иметь представление о том куда лезть пытаешься
31.gif
 

killbond

Осваивающий
Сообщения
96
Репутация
32
выудить ее содержимое по средствам Autoit
Как выудить разобрались...
А как узнать что мы ищем? :smile: В смысле, например, в игре по какой-то локации бродят мобы, как узнать их координаты, и вообще, как все это ищется? Неужели ArtMoney или Cheat Engine? И потом, как посредством памяти выполнять определенные действия чаром? Для этого нужен, наверное, дебаггер и знание Assembler? Предположим, это есть и что вот так скролить тысячи строчек кода в поисках нужной?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ищешь где в памяти хранится инфа относительно ротиции, х, у и з выделенной цели и ту же инфу про чара, далее имея ее ты сможешь вычислить куда бежать и тд и тп.
 

killbond

Осваивающий
Сообщения
96
Репутация
32
ищешь где в памяти хранится инфа относительно ротиции

А вот про это место можно поподробнее? Чем искать? (нее, я то знаю - Cheat Engine или ArtMoney, но хотелось бы знать, чем настоящие профи пользуются :smile:) Что значит ротация? или "ротиция"? (я так понял, кусок памяти, где сгруппированы значения для одного класса)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я пробовал аллоды и искал с помощью Детектив стори искал обычными методами, подвигался - посмотрел что изменилось, не подвигался, отсек все ячейки что за время неподвижного состояние притерпели изменения, снова подвигался, снова посмотрел что изменилось, подвигался по плоскости, посмотрел что изменилось и тд и тп. Но координаты найти не так уж просто и найти на них оффсеты мне так и не удалось, с хп, мп и тд и тп проще, ищится за 3-4 проверки. Ротация - от слова Rotation, в данном контексте - угол поворота
 

killbond

Осваивающий
Сообщения
96
Репутация
32
Хм... :blink: я то думал все намного сложнее... спасибо.
 

maddoc

Новичок
Сообщения
48
Репутация
2
Archy26 сказал(а):
Белфигор и Панда +1

Возьмём к примеру EVE. Подключение к памяти процесса в ней наказуемо немедленным крашем клиента. И, хотя и не немедленным, но неотвратимо последующим баном, если в этот момент был загружен оплаченый аккаунт.

В следствие этого, мы с Белфигором, потратив большое количество времени на тесты, пришли к выводу что в еве выгоднее: либо взламывать клиент по настоящему (а кто такое умеет, ботов для игрушек не пишет :smile: ), либо сразу писать OCR-бота.

Ну и ДА! Есть ещё сервер, который регистрирует правильность запросов и ответов, правильность шифрования, и даже правильную последовательность пакетов, и т.д.

Вот и причина, почему именно OCR-бот, а не что-то умнее.

P.S.: Для тех, кто считает себя умнее других, предлагаю, средствами автоита написать снифер памяти клиента EVE-онлайн, который будет стабильно распознавать хотя бы состояние локала. Сколько там плюсов, сколько там минусов, и сколько там в целом народу.
Сделавшему это публично вынесу поздравления.

Что прям так тупа ничего нельзя читать из памяти? Непойму, куча программ читает память (атнивирусы, и прочая лабуда) без каких либо последствий. В чем еве особенный? В конечном итоге каким тех образом они могут отследить что я читаю память ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
структура хранения инфы в еве не позволяет читать. Поставь и попробуй. мб с доминионом что изменилось
 

JimmyN

Новичок
Сообщения
20
Репутация
0
можешь для ВоВ скрипт сниффера выложить, буду очень признателен)
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
вот неужели так трудно тему ниже почитать ....где все разжеванно и с картинками
что касается сниффера вот-
Allows very simply from an Autoit script to access the main functionalities offered by the WinPcap driver: capture, filter, save/read and send data packets on a network interface.
 

JimmyN

Новичок
Сообщения
20
Репутация
0
Вопрос был глупым) Написал не разобравшись бывает, теперь по существу, как получить числовое значение я понял а как быть с текстом, если он русский и в кодировке UNICOD? Адрес в ячейке я нашел с помощью артмани вроде бы тот. Но вот как при обращении к нему получить текст а не набор циферок?
 

Dragon

Новичок
Сообщения
13
Репутация
2
Вот так вроде
Код:
$HP = Dec(StringTrimLeft($CurrentHP, 2))
 
Верх