Думаю пора рассказать как ищутся основные оффсеты для айон, на примере текущей на 27.01.2015 г. Европейской версии и нужных для поддерживаемых мною ботов Angelbot и Angelbot2.
Цитата:
FileVersion: 4515.0319.0112.8881
В этих ботах используется библиотека aionmemory.dll для доступа к игре. В файле Enums.cs находятся описания всех смещений. Исходники можно найти в интернете либо обработать текущую версию бота Reflector'ом для извлечения исходников на C# (си-шарп).
Для работы нужны:
1. Ms visual studio 2012
2. CheatEngine 6.3
3. Aion
4. Исходники библиотеки aionmemory.dll
ps: 1 и 4 пункты нужны для тех, кто будет компилить новые версии, а остальным достаточно п.п. 2 и 3.
Приступим.
Запускаем в любой последовательности CheatEngine, Айон в оконном режиме (обязательно заходим чаром и как правило выбираем себя).
Располагаем окна так, чтобы было удобно и желательно видно обе программы и CheatEngine и Айон.
1. «EntityMap»
Первое что нужно искать, это EntityMap.
С помощью этого смещения можно найти все сущности, т.е. NPC, игроков и т.д. в Айон.
С помощью CheatEngine ищем строковую последовательность «None».
Ищем так, в CheatEngine выбираем:
«Value Type»: «String»;
«Scan Type»: «Search for text»;
галочку "Unicode" не ставим;
в поле «Text» пишем «None» и жмем кнопку «New Scan» (будет найдено немного адресов).
В найденных адресах ищем статичный адрес (зеленый) в котором по ctrl+b в окне Memory Viewer, мы должны увидеть последовательность – «None Player User NPC GameObject..." – для нас это оказывается адрес 0x301311A8
Далее от адреса 0x301311a8 отнимаем смещение 44 (0x2C) (это смещение может изменяться в небольших пределах) и оказываемся на нужном адресе 0x3013117C (для контроля, по этому адресу всегда должен быть 00. Я проверяю все найденные смещения с помощью AngelBot2. Вставляю в исходник, компилирую и смотрю, что получается. =)
Это адрес EntityMap. Для CheatEngine нужны смещения в виде «game.dll+offset», а для библиотеки aionmemory.dll нужен только "offset".
Для этого смещение на EntityMap находим после следующих вычислений => адрес этой ячейки (0x3013117C) минус адрес game.dll (0x2F300000) и получим смещение EntityMap (0xE3117c), т.е. «game.dll+E3117C» или "0xE3117C" соостветсвенно для CheatEngine и aionmemory.dll.
PS: адрес game.dll можно найди в окне «Memory Viewer» в меню «View/Enumerate dll's and symbols» программы CheatEngine, для этого жмем ctrl+b, ctrl+alt+s, ctrl+f, вводим строку "game.dll" и в списке видим нужный адрес (0x2f300000 = game.dll).
PPS: адрес game.dll при каждом запуске Айон другой.
Ищем HasTarget. По этому смещению находится ячейка, которая указывает выбрали мы кого либо целью или нет (4 бита = соответственно 1 или 0).
Ищем так, в CheatEngine выбираем:
1) «Scan Type»: «Exact Value»; «Value Type»: «4 Bytes»; в поле «Values» ставим 0 и жмем кнопку «new scan» (будет найдено много адресов);
2) выбираем целью себя; в поле «Values» ставим 1 и жмем кнопку «Next Scan» (будет отброшено часть адресов, но их будет ещё много);
3) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
4) сбрасываем себя с таргета; «Scan Type»: «Changed value»; жмем кнопку «Next Scan» (будет отброшено часть адресов);
5) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
6) выбираем целью себя; «Scan Type»: «Changed value»; жмем кнопку «Next Scan» (будет отброшено часть адресов);
7) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
8) повторяя п.п. 4-7 уменьшаем количество адресов до приемлемого количества и уже в нем ищем наш статичный (зеленый) адрес.
Два раза кликаем по найденному адресу или жмем красную стрелку справа-внизу от списка найденных адресов и видим его в нижнем списке.
В нашем случае адрес равен 0x30a15488, а полученное смещение для этого адреса «game.dll+9E5488».
Само по себе смещение HasTarget нас мало волнует. Далее из найденного смещения HasTarget надо получить очень важное для нас смещение «Entry» указывающее на массив данных по выбранному в цель персонажу.
Для этого от HasTarget (0x9E5488) отнимаем 0x8 и получаем начало таргетов «Target Entity Pointer», это смещение будем называть Entry и оно равно (game.dll+9E5480). «показать исходник»
3.1. Inventory
Ищем количество денег и смотрим кто имеет access к этой ячейке (в списке выбираем зеленый адрес).
Делаем Show Disassembler для каждой строчки и смотрим код.
В дизассемблере должно быть ptr и offset типа такого: mov eax,[game.dll+E526A0] и add eax,000008E0
или типа такого: mov eax,[game.dll+E526A0] и mov ecx,[eax+000008E0])
3.2. Ability
Это тоже самое, что и инвентарь -> сначала ищем по ячейкам инвентаря, затем ищем статический адрес.
Как найти: Ставим скилл "Return" в первую ячейку панели быстрого доступа к скиллам. «показать скриншот»
Ищем ID этого скила Return = 1801, перемещаем скил в другую ячейку и продолжаем искать уже 0, возвращаем скил в первую ячейку
и продолжим искать снова 1801. В результате получили: «показать скриншот»
Просматривая код по Ctrl+B ищем повторение два раза ID (включим перед этим десятичное отображение), «показать скриншот»
Смотрим для него "Find out what accesses". Скорее всего первая строка это то что надо, смотрим для неё дизассемблер.
Первый адрес сразу подошел. Прокрутили код немного вверх. «показать скриншот»
Далее нужно найти в коде последовательность
mov ecx,[eax+14], mov edx,[ecx+04], mov ecx,[edx+08], а ниже соответственно искать строку типа cmp eax,[ebx+00000B24] - это и есть AbilityOffset «показать скриншот»
________________ Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС. Все мои читы/программы/статьи тут:http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
PS: может народ подтянется и начнет что-то делать для Айон?
Давно пытаюсь подтолкнуть на это народ. Вот еще бы L2PH реснуть для работы с АктивАнтичитом. Я думаю у тебя есть мысли по этому поводу, как это реализовать.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
Думаю пора рассказать как ищутся основные оффсеты для айон, на примере текущей на 27.01.2015 г. Европейской версии и нужных для поддерживаемых мною ботов Angelbot и Angelbot2.
В этих ботах используется библиотека aionmemory.dll для доступа к игре. В файле Enums.cs находятся описания всех смещений. Исходники можно найти в интернете либо обработать текущую версию бота Reflector'ом для извлечения исходников на C# (си-шарп).
Для работы нужны:
1. Ms visual studio 2012
2. CheatEngine 6.3
3. Aion
4. Исходники библиотеки aionmemory.dll
ps: 1 и 4 пункты нужны для тех, кто будет компилить новые версии, а остальным достаточно п.п. 2 и 3.
Приступим.
Запускаем в любой последовательности CheatEngine, Айон в оконном режиме (обязательно заходим чаром и как правило выбираем себя).
Располагаем окна так, чтобы было удобно и желательно видно обе программы и CheatEngine и Айон.
1. «EntityMap»
Первое что нужно искать, это EntityMap.
С помощью этого смещения можно найти все сущности, т.е. NPC, игроков и т.д. в Айон.
С помощью CheatEngine ищем строковую последовательность «None».
Ищем так, в CheatEngine выбираем:
«Value Type»: «String»;
«Scan Type»: «Search for text»;
галочку "Unicode" не ставим;
в поле «Text» пишем «None» и жмем кнопку «New Scan» (будет найдено немного адресов).
В найденных адресах ищем статичный адрес (зеленый) в котором по ctrl+b в окне Memory Viewer, мы должны увидеть последовательность – «None Player User NPC GameObject..." – для нас это оказывается адрес 0x301311A8
Далее от адреса 0x301311a8 отнимаем смещение 44 (0x2C) (это смещение может изменяться в небольших пределах) и оказываемся на нужном адресе 0x3013117C (для контроля, по этому адресу всегда должен быть 00. Я проверяю все найденные смещения с помощью AngelBot2. Вставляю в исходник, компилирую и смотрю, что получается. =)
Это адрес EntityMap. Для CheatEngine нужны смещения в виде «game.dll+offset», а для библиотеки aionmemory.dll нужен только "offset".
Для этого смещение на EntityMap находим после следующих вычислений => адрес этой ячейки (0x3013117C) минус адрес game.dll (0x2F300000) и получим смещение EntityMap (0xE3117c), т.е. «game.dll+E3117C» или "0xE3117C" соостветсвенно для CheatEngine и aionmemory.dll.
PS: адрес game.dll можно найди в окне «Memory Viewer» в меню «View/Enumerate dll's and symbols» программы CheatEngine, для этого жмем ctrl+b, ctrl+alt+s, ctrl+f, вводим строку "game.dll" и в списке видим нужный адрес (0x2f300000 = game.dll).
PPS: адрес game.dll при каждом запуске Айон другой.
Ищем HasTarget. По этому смещению находится ячейка, которая указывает выбрали мы кого либо целью или нет (4 бита = соответственно 1 или 0).
Ищем так, в CheatEngine выбираем:
1) «Scan Type»: «Exact Value»; «Value Type»: «4 Bytes»; в поле «Values» ставим 0 и жмем кнопку «new scan» (будет найдено много адресов);
2) выбираем целью себя; в поле «Values» ставим 1 и жмем кнопку «Next Scan» (будет отброшено часть адресов, но их будет ещё много);
3) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
4) сбрасываем себя с таргета; «Scan Type»: «Changed value»; жмем кнопку «Next Scan» (будет отброшено часть адресов);
5) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
6) выбираем целью себя; «Scan Type»: «Changed value»; жмем кнопку «Next Scan» (будет отброшено часть адресов);
7) «Scan Type»: «Unchanged value»; жмем несколько раз кнопку «Next Scan» (будет отброшено часть адресов);
8) повторяя п.п. 4-7 уменьшаем количество адресов до приемлемого количества и уже в нем ищем наш статичный (зеленый) адрес.
Два раза кликаем по найденному адресу или жмем красную стрелку справа-внизу от списка найденных адресов и видим его в нижнем списке.
В нашем случае адрес равен 0x30a15488, а полученное смещение для этого адреса «game.dll+9E5488».
Само по себе смещение HasTarget нас мало волнует. Далее из найденного смещения HasTarget надо получить очень важное для нас смещение «Entry» указывающее на массив данных по выбранному в цель персонажу.
Для этого от HasTarget (0x9E5488) отнимаем 0x8 и получаем начало таргетов «Target Entity Pointer», это смещение будем называть Entry и оно равно (game.dll+9E5480). «показать исходник»
3.1. Inventory
Ищем количество денег и смотрим кто имеет access к этой ячейке (в списке выбираем зеленый адрес).
Делаем Show Disassembler для каждой строчки и смотрим код.
В дизассемблере должно быть ptr и offset типа такого: mov eax,[game.dll+E526A0] и add eax,000008E0
или типа такого: mov eax,[game.dll+E526A0] и mov ecx,[eax+000008E0])
3.2. Ability
Это тоже самое, что и инвентарь -> сначала ищем по ячейкам инвентаря, затем ищем статический адрес.
Как найти: Ставим скилл "Return" в первую ячейку панели быстрого доступа к скиллам. «показать скриншот»
Ищем ID этого скила Return = 1801, перемещаем скил в другую ячейку и продолжаем искать уже 0, возвращаем скил в первую ячейку
и продолжим искать снова 1801. В результате получили: «показать скриншот»
Просматривая код по Ctrl+B ищем повторение два раза ID (включим перед этим десятичное отображение), «показать скриншот»
Смотрим для него "Find out what accesses". Скорее всего первая строка это то что надо, смотрим для неё дизассемблер.
Первый адрес сразу подошел. Прокрутили код немного вверх. «показать скриншот»
Далее нужно найти в коде последовательность
mov ecx,[eax+14], mov edx,[ecx+04], mov ecx,[edx+08], а ниже соответственно искать строку типа cmp eax,[ebx+00000B24] - это и есть AbilityOffset «показать скриншот»
Долго и упорно бился над Ability согласно инструкции, оказалось, корейцы, на 4.8 здорово все переиначили, и теперь чтобы найти смещение на дерево скилов, не нужна огромадная цепочка смещений, типа этого:
пришлось закомментировать все ветки, и написать одну на +10, все идет напрямую.
[Game.dll+0xE8D1F8] -> [+ACC] - начало дерева скилов. Что интересно, это смещение, также указывает на массив предметов в инвентаре, только вместо [ACC] цепочка:
[Game.dll+0xE8D1F8] -> [+96C] -> [+18] и можно перебирать...