Вверх ↑
Этот топик читают: Гость
Ответов: 321
Рейтинг: 10
#1: 2016-06-04 13:19:36 ЛС | профиль | цитата
Привет ребята, подскажите кто знает, как определить первый адрес процесса игры ?!

Ну откуда он берет эти значения ?! Не понимаю, второй день мучаюсь, и так и так пытаюсь и вычитаю, складываю все что только можно.
Все понимаю, кроме откуда начинается Point...
Первый адрес 13F9C000.
13F9C000 + 01606320 и т.д...
[[["Wow.exe (он же динамический 13F9C000)"+ 01606320] 230] 20] = x cord of player.

[offtop]http://cs-soft.my1.ru/musor/memoryrw_v1.0.7z MemoryRW v1.0[/offtop]

Id Proc 3520 (hex 00000DC0) - может от айди что то зависит.
Причем первый адрес игры всегда равен 9460301 (4 Bytes)


------------ Дoбавленo в 13.19:
((
карма: 1

0
Ответов: 1841
Рейтинг: 369
#2: 2016-06-04 16:48:30 ЛС | профиль | цитата
Часть наработок из старых приложений.

Код получения того самого базового адреса модуля или образа целевого приложения.
code_37317.txt
Далее, базовый адрес прибавляем к смещению 01606320 (это именно смещение) и читаем int или int64 из памяти по адресу который мы получили.
То что мы прочитали, и должно быть 38333D10 (динамический указатель).
Далее, прибавляем к указателю 38333D10 смещение 230 и читаем следующий указатель (38335238) по получившемуся адресу.
И так далее.
------------ Дoбавленo в 16.48:
Кроме последнего вычисления указателя (38335238+20).
На последнем этапе указатель вычисляется только сложением/вычитанием смещения из указателя без последующего чтения по нему адреса (там уже игровое значение будет).
карма: 1
2
файлы: 1code_37317.txt [837B] [169]
Голосовали:Master4eG, flint2
Ответов: 321
Рейтинг: 10
#3: 2016-06-04 18:18:34 ЛС | профиль | цитата
CriDos, опять Вы, в прошлый раз объясняли принцип работы всего этого, спасибо Вам громадное за это.
В тот раз был определенный адрес, с которого все начинается, вот со старой темы, тоже кстати X координата игрока
Но то были публичные данные с зарубежного сайта.
Версия игры обновилась, размер игры с 16 Гб дорос до 28 Гб, и все оффсеты поменялись, вот хочу обновить свое творение под новый клиент игры.
Нашел сам Pointer, из 6 млн выбрал самый короткий [[["Wow.exe"+ 01606320] 230] 20].
Но в отличии от старого ( [[[CD87A8] + 0x34] + 0x24] + 0x798 ) новый имеет первое значение [Wow.exe + 01606320], что и озадачило меня


Я не понимаю как использовать code_37317.txt, я не умею вставлять коды delphi в схему.
Ума хватает только рисовать в Hiasm, смотрел на различных форумах как в delphi по handle окна находят ProcId, base оффсеты, а как это вставить в Hiasm не понимаю :\
Иногда обидно, что вроде делаю хорошие программки с кучей логики, а как это устроено в кодовом виде даже не представляю.


Читаю справки по InlineCode, попробую разобраться хоть поверхностно как код вставлять.
...
Как все сложно... По сути это нужно знать язык делфи. Синтаксис понимать.
карма: 1

0
Ответов: 1841
Рейтинг: 369
#4: 2016-06-05 16:37:44 ЛС | профиль | цитата
Эх, не любитель я паскалевского синтаксиса со всякими KOL'aми да _hi_* мотодами.
Вот накидал IC получения всех модулей необходимого процесса и их базового адреса:
Add(MainForm,536979,259,123)
{
Width=407
Height=296
link(onCreate,10869016:doFindName,[])
}
Add(EnumProcess,10869016,319,116)
{
Name="HiAsm.exe"
Point(Name)
Point(doFindName)
Point(onFind)
Point(onNotFind)
link(onFind,14371488:doGetModules,[(363,129)(363,161)(307,161)(307,192)])
}
Add(InlineCode,14371488,319,186)
{
WorkPoints=#12:doGetModules|
EventPoints=#12:onModuleName|
VarPoints=#11:BaseAddress|
DataPoints=#9:ProcessID|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|42:uses Windows, kol, Share, Debug, TlHelp32;|0:|4:type|28: THiAsmUnit = class(TDebug)|9: private|27: m_baseAddress: integer;|0:|8: public|25: ProcessID: THI_Event;|28: onModuleName: THI_Event;|0:|58: procedure doGetModules(var _Data: TData; Index: word);|57: procedure BaseAddress(var _Data: TData; Index: word);|6: end;|0:|14:implementation|0:|34:procedure THiAsmUnit.doGetModules;|3:var|21: hSnapshot: THandle;|32: ModuleEntry32: TModuleEntry32;|5:begin|21: m_baseAddress := 0;|86: hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ToIntegerEvent(ProcessID));|26: if (hSnapshot <> 0) then|7: begin|51: ModuleEntry32.dwSize := SizeOf(TModuleEntry32);|0:|53: if (Module32First(hSnapshot, ModuleEntry32)) then|12: repeat|6: |13: begin|62: m_baseAddress := integer(ModuleEntry32.modBaseAddr);|60: _hi_OnEvent(onModuleName, ModuleEntry32.szModule);|12: end;|55: until not Module32Next(hSnapshot, ModuleEntry32);|0:|27: CloseHandle(hSnapshot);|6: end;|4:end;|0:|33:procedure THiAsmUnit.BaseAddress;|5:begin|34: dtInteger(_Data, m_baseAddress);|4:end;|0:|4:end.|
link(onModuleName,12595525:doMessage,[])
link(ProcessID,10869016:CurrentID,[])
}
Add(Message,12595525,368,186)
{
link(Caption,14371488:baseAddress,[(381,174)(353,174)(353,230)(325,230)])
}
Получаемые в результате данные не проверял, но в теории всё должно быть верно.
Проблемы могут быть только в преобразовании указателей в целое число (Integer).
Ну и остановка перебора модулей отсутствует, тут уж сам как нибудь сделаешь, если потребуется.
карма: 1
0
Ответов: 321
Рейтинг: 10
#5: 2016-06-05 18:09:56 ЛС | профиль | цитата
Спасибо большое, и как всегда закон подлости, не хочет мой процесс находить
Запустил старую версию игры, ее прекрасно нашло.
Запустил новый клиент но в x32, и опять же заработало...
То есть как я понимаю x64 не будет искать ?!
[offtop]Интересно, что первые адреса, что в старом, что в новом клиенте под х32 = 400000 (hex)
Еще интересно, что как то показывает несколько процессов которые одновременно запущенны начинаются с 400000, включая Hiasm и скомпилированный проект.
Значит это не личное пространство процесса, а только лишь условный регион в котором начинается процесс?!хм
Адрес с которого начинается мой злополучный процесс отличается больно уж от 400000 - 13FAC0000[/offtop]

карма: 1

0
Ответов: 321
Рейтинг: 10
#6: 2016-06-22 21:20:28 ЛС | профиль | цитата
Up форумчане помогите...
Кто знает ?!
карма: 1

0
Ответов: 1841
Рейтинг: 369
#7: 2016-06-23 15:15:03 ЛС | профиль | цитата
Master4eG писал(а):
То есть как я понимаю x64 не будет искать ?!

да, из 32 битного процесса не будет искать
Master4eG писал(а):
Значит это не личное пространство процесса, а только лишь условный регион в котором начинается процесс?!хм

http://datadump.ru/process-address-space - Адресное пространство процесса в Windows
Master4eG писал(а):
Адрес с которого начинается мой злополучный процесс отличается больно уж от 400000 - 13FAC0000

Этот адрес явно уходит за рамки 32 битного адресного пространства, так что вывод очевиден
карма: 1
0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)