Перейти к содержанию

Можно ли упростить процедуру добавления адреса в CE?


Razi

Рекомендуемые сообщения

Можно ли написать на Lua скрипт, который будет добавлять следующий адрес от нужного нам(в листе адресов) по гарячим клавишам ctrl + английская буква?

Можно ли написать на Lua скрипт, который будет добавлять предыдущий адрес от нужного нам(в листе адресов) по гарячим клавишам ctrl + английская буква? И потом эти скрипты можно будет положить в папку autorun для автоматической загрузки. Эти скрипты могут быть полезны для тех, кто пользуется Cheat Engine.

 

Приведу пример количества нажатий кнопок для добавления адресов в CE : поскольку мне нужно было добавить от найденного адреса в таблице 50 следующих адресов и 50 предыдущих адресов то делал это через:

1) ctrl + с на нужном адресе; 2) после нажать ctrl + v; 3) нажать левой кнопкой мыши в поле "adjust address by"; 4) после нажать цифру 1; 5) далее нажать "enter"; 6) далее нажать кнопку вниз для перехода на следующий адрес.

Добавлять адреса через кнопку "add address manually" тоже вариант ненамного лучше. Самый лучший вариант это через поиск неизвестного значения выбрать где начинать сканировать и где заканчивать, но этот способ не так хорош для тех, кто не знает шестнадцатиричной системы. Хочу этим всем сказать, что все способы не очень удобны.

Ссылка на комментарий
Поделиться на другие сайты

Razi, ты зациклился на ручной вставке адресов. По началу я тоже так делал, пока количество адресов не превысило 10.

Способов несколько:

1. Либо создать вручную цикл (не добавки адресов в таблицу или в скрипт - это нонсенс ;), прикинь, если адресов будет больше сотни, у меня например был случай, когда мне нужно было скопировать участок размером больше 300 (точнее 364 байт)  - читай тему    )  

2. Выходить на игровую инструкцию (контейнер, обычно в такой инструкции участвуют два регистра, например mov eax,[ebx + 4*ecx+04], где ebx - указатель на структуру, а ecx - ID нужной нам характеристики), где эти адреса появляются.

К сожалению ссылку на табличку давать бессмысленно, так как доступ туда пока для тебя закрыт, поэтому приведу два примера своих скриптов для Героев 2:

Скрытый текст

[ENABLE]
aobscan(OpenMap1, 8axxxxxxxx8axxxxxxxxxx23xx85xx75xxc6)
alloc(newMem, 512)
label(returnHere)
label(OK)
label(Cikl)
label(OpenMap)
label(Small_Map)
label(Average_Map)
label(Big_Map)
label(Very_Large_Map)
label(K_voBt)
label(Flag)
registersymbol(OpenMap1)

newMem:
cmp byte ptr [Flag],1 // условие - чтобы сработало только один раз.
jne OK
cmp ebx,00000260 // условие - только работаем с адресами ячеек карты
jne OK
cmp ebp,000cfb6c// условие свой/чужой
jne OK
push eax
mov eax,[004F8B98]
cmp eax,24 // Карта размером 36х36 Маленькая
je Small_Map
cmp eax,48 // Карта размером 72х72 Средняя
je Average_Map
cmp eax,6c // Карта размером 108х108 Большая
je Big_Map
cmp eax,90 // Карта размером 144х144 Очень большая
je Very_Large_Map
pop eax

Small_Map:
mov dword ptr [K_voBt],510 // 1296 байт
jmp OpenMap

Average_Map:
mov dword ptr [K_voBt],1440 // 5184 байт
jmp OpenMap

Big_Map:
mov dword ptr [K_voBt],2d90 // 11664 байт
jmp OpenMap

Very_Large_Map:
mov dword ptr [K_voBt],5100 // 20736 байт
jmp OpenMap

OpenMap:
push esi // сохраняем регистры
push eax // перед использованием
mov eax,[K_voBt] // загружаем какое количество (байт) ячеек на карте
lea esi,[[005265DC]+0] // загружаем первую ячейку карты
Cikl:
cmp byte ptr [esi],0 // условие только нулевые значения на карте
jne @F
add byte ptr [esi],1 // делаем видимой ячейку карты
@@:
test byte ptr [esi],1// условие только чётные значения на карте
jne @F
add byte ptr [esi],1 // делаем видимой ячейку карты
@@:
dec eax // Уменьшаем счетчик цикла
inc esi // увеличиваем адрес-источник
cmp eax,0 // Достигли ли конца цикла?
je @F // Если да, выходим из цикла
jmp Cikl // Если нет - прыгаем на метку Cikl, то есть, переходим к следующей итерации цикла
@@: // Безымянная метка для указания местоположения выхода из цикла
pop eax
pop esi
mov byte ptr [Flag],0

OK:
mov al,[ecx+edx]
xor ecx,ecx
jmp returnHere

K_voBt:
dd 0

Flag:
db 1

OpenMap1:
jmp newMem
returnHere:

[DISABLE]
OpenMap1: // 004087A1
mov al,[ecx+edx]
xor ecx,ecx

unregistersymbol(OpenMap1)
dealloc(newMem)

 

 

 

Скрытый текст

[ENABLE]
aobscan(GuessMapPuzzle, 0fbexxxxxxxxxxb8xxxxxxxx8bxxxxd3xx23xx85xx74xx8b)
alloc(newMem,64)
label(returnHere)
registersymbol(GuessMapPuzzle)

newMem:
mov byte ptr [ecx+0000634D],1
movsx edx,byte ptr [ecx+0000634D]
jmp returnHere

GuessMapPuzzle:
jmp newMem
nop
nop
returnHere:

[DISABLE]
GuessMapPuzzle: // 0044C5D7
movsx edx,byte ptr [ecx+0000634D]

unregistersymbol(GuessMapPuzzle)
dealloc(newMem)

 

Обрати внимание, сколько бы пришлось тебе добавить адресов в табличку (скрипт), например в первом скрипте максимум - // 20736 байт, во втором тоже много.

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Кстати здесь может помочь твой АА скрипт по автонажатию кнопок, только вызывать его нужно по горячим клавишам. (Особенно если

 речь идет о добавлении 5 следующих адресов и 5 предыдущих).

Тему прочитал "Как скопировать участок памяти", но вы там все разговариваете непонятно для меня, т.е. понял только малую часть темы.

А что делает второй скрипт? В второй предложенный тобой скрипт можно привязать начало например к адресу или нету смысла?

 

 

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Razi сказал:

А что делает второй скрипт?

Записывает 1 во все адресы, с которыми работает та инструкция. Т.е. это пункт 2. из предыдущего сообщения.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Razi сказал:

В второй предложенный тобой скрипт можно привязать начало например к адресу или нету смысла?

 

Этот вопрос совсем не понял, поэтому не знаю что ответить.

Ссылка на комментарий
Поделиться на другие сайты

Скрытый текст

{
// ORIGINAL CODE - INJECTION POINT: 03050434

0305040B: 81 FA 00 00 80 1F     -  cmp edx,1F800000
03050411: 74 62                 -  je 03050475
03050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]
03050419: F7 C1 00 00 01 00     -  test ecx,10000
0305041F: 75 53                 -  jne 03050474
03050421: 8B C8                 -  mov ecx,eax
03050423: 89 C2                 -  mov edx,eax
03050425: C1 E9 10              -  shr ecx,10
03050428: 25 FF FF 00 00        -  and eax,0000FFFF
0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]
// ---------- INJECTING HERE ----------
03050434: 89 1C 08              -  mov [eax+ecx],ebx // eax - указатель на структуру, ecx - смещение (ID) до твоей нужной характеристики
03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC
// ---------- DONE INJECTING  ----------
0305043D: BB 20 00 26 03        -  mov ebx,03260020
03050442: 03 DA                 -  add ebx,edx
03050444: 8B 03                 -  mov eax,[ebx]
03050446: 3D 40 00 05 03        -  cmp eax,03050040
0305044B: 75 01                 -  jne 0305044E
0305044D: C3                    -  ret
0305044E: B8 40 00 05 03        -  mov eax,03050040
03050453: 8B 0C 10              -  mov ecx,[eax+edx]
03050456: B8 20 00 4F 03        -  mov eax,034F0020
0305045B: 8B 04 10              -  mov eax,[eax+edx]
}

 

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

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Хотел сказать, что чаще всего использую добавление следующих и предыдущих адресов во время поиска какого-то адреса и когда нашел адрес, смотрю что рядом с ним находится, т.е. следующих 25 и предыдущих 25 адресов, и в основном занимаюсь добавлением адресов в абсолютно разных играх и в совсем разных адресах.

Ссылка на комментарий
Поделиться на другие сайты

30 минуты назад, Razi сказал:

и в совсем разных адресах.

В скриптах что ты мне приводил в ЛС (для объединения), это одни и те же адреса (работающие с одной инструкцией) и их многовато для ручного добавления.;)

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Я всего лишь хочу сказать, иметь такую функцию как быстрое добавление адреса по горячим клавишам было бы хорошо. Например, можно даже сделать автонажатие ctrl+с и ctrl+v и т.д. в АА скриптах, но для этого нужно чтобы эти АА скрипты были в таблице, так что уже не подходит такой вариант. Вот тот твой первый скрипт с циклом может быть пригодился бы для автодобавления адресов в таблицу CE. Да, в скриптах что я приводил часто бывают похожие адреса, но добавление адресов мне часто нужно при поиске разных значений в разных играх.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Razi сказал:

Я всего лишь хочу сказать, иметь такую функцию как быстрое добавление адреса по горячим клавишам было бы хорошо.

Куда уже быстрее. ПКМ/"Копировать"/ПКМ/"Вставить".

 

Здесь не долго и до этого:

"А я хочу функцию автонаписания скриптов, т.е. включил игру/включилСЕ/Нажал кнопку -> Бумц  и все читы в красивом трейнере" :P

Ссылка на комментарий
Поделиться на другие сайты

13 минуты назад, Garik66 сказал:

ПКМ/"Копировать"/ПКМ/"Вставить".

В данном случае чтоб добавить адрес, нужно больше чем копировать и вставить. Нужно сделать аж 6 нажатий чтоб добавить один адрес.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Razi сказал:

аж 6 нажатий

Ну  да - я забыл, что там окошко вываливается (где можно сразу отредактировать либо смещения, либо сам адрес) и его ещё нужно закрыть.

Ссылка на комментарий
Поделиться на другие сайты

Вот я и говорю при добавлении десяти следующих и десяти предыдущих адресов нужно будет сделать 120 нажатий. А это уже не мало.

Догадываюсь уже как можно сделать добавление адреса в Lua скрипте.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Как временное решение.

Полуавтоматизация:;););)

добавляешь допустим пять адресов - 10 нажатий в таблицу. (5* "Добавить"+"Подтвердить")

Копируешь все пять, вставляешь - ПКМ+Копировать+ПКМ + Вставить + Вставить - 5 нажатий.

Копируешь все 10 и вставляешь - 5 нажатий.

Копируешь все 20 и вставляешь - 5 нажатий.

Итого за 25 нажатий имеем табличку - с 40 адресами.

Дальше копируешь свой адрес, ну и раскидываешь по 40 адресам (как тебе нужно) добавляя (или отнимая) к адресу смещения. 

 

А лучше вначале вставить адрес, а потом копировать и вставлять. Тогда останется потом прибавить(отнять) смещения.  

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

То есть имеешь в виду когда в таблице уже есть 40 адресов, то после этого в этих адресах вручную менять значение какждого адреса?

У меня есть идея, а что если сделать что-то вроде макроса по вызову горячей клавиши, тот Lua скрипт что написал AntonVitalievich с автонажатием кнопок мог бы подойти сюда, но незнаю как прилепить, чтоб кнопки нажимались именно в окне Cheat Engine.( А может это и не нужно будет).

Ссылка на комментарий
Поделиться на другие сайты

51 минуту назад, Razi сказал:

вручную менять значение какждого адреса?

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

Ссылка на комментарий
Поделиться на другие сайты

С большим количеством адресов  работают в окне Structure disscet. Там можно установить адрес структуры данных, размер, тип каждого или всех выделенные адресов. Все выделенные адреса можно через контекстное меню перенести в таблицу CE.


 

Нашли адрес.

Перешли в окно структуры

Задали структуру адрес-50 и размера 100 (цифры взяты из примера, из первого поста)

Тип данных либо автоматически оставить, либо выделить все адреса и поставить byte (раз в примере был adjust address by 1).

Выделить все адреса и перенести в таблицу CE.


 

Таким образом 100 адресов типа 1байт можно очень быстро оформить и перенести в таблицу.

 

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, MasterGH сказал:

С большим количеством адресов  работают в окне Structure disscet.

Точно MasterGHзабыл я про этот способ, хотя им пользовался.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Итого найдено 5 более упрощенных способов добавления адреса в CE. Приведу в пример все 5 способов, для таких новичков как я.

(Часть всего этого написал с телефона, так что могут быть ошибки)

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

Скрытый текст

{$lua}
timer = createTimer(true)
sleep(200)
keyDown(VK_CONTROL)
keyDown(VK_C)
sleep(100)
keyUp(VK_C)
keyUp(VK_CONTROL)
sleep(100)
keyDown(VK_CONTROL)
keyDown(VK_V)
sleep(100)
keyUp(VK_V)
keyUp(VK_CONTROL)
sleep(100)
keyDown(VK_TAB)
sleep(50)
keyUp(VK_TAB)
sleep(50)
keyDown(VK_TAB)
sleep(50)
keyUp(VK_TAB)
sleep(50)
keyDown(VK_1)
sleep(50)
keyUp(VK_1)
sleep(50)
keyDown(VK_RETURN)
sleep(50)
keyUp(VK_RETURN)
sleep(100)
keyDown(VK_DOWN)
sleep(100)
keyUp(VK_DOWN)
timer:setEnabled(false)
[ENABLE]
[DISABLE]

 

 

2) Способ предложенный MasterGH

 

В 14 Февраль 2016 г.в03:09, MasterGH сказал:

Нашли адрес.

Перешли в окно структуры

Задали структуру адрес-50 и размера 100 (цифры взяты из примера, из первого поста)

Тип данных либо автоматически оставить, либо выделить все адреса и поставить byte (раз в примере был adjust address by 1).

Выделить все адреса и перенести в таблицу CE.

Вот только не нашел, как в том окне при создании структуры, адреса автоматически были по 1-му байту (стандартно адреса по 4 байта). И MasterGH забыл видимо добавить, что когда выделяем все адреса и поставить byte, то нужно после этого, еще выделить снова все адреса и нажать на Fill gaps (т.е. заполнить пробелы) и тогда только адресов станет около 100.

 

3) В окне Structure dissect когда уже в нем есть адреса, нажать мышкой на адрес после которого хотим добавлять следующие адреса и нужно всего лишь нажать кнопку "insert" и после "enter" и автоматически добавится следующий адрес по списку (1, 2, или 4 байта).

 

4) В окне Structure dissect когда уже в нем есть адреса, нажать мышкой на адрес после которого хотим добавлять следующие адреса и нужно всего лишь нажать кнопки "ctrl + c" и "ctrl + v" и автоматически добавится следующий адрес. Если при этом держать кнопки "ctrl + v" то добавится столько следующих адресов пока будете держать кнопки.

 

5) Когда вам нужны однобайтные адреса, как и мне, выберите "byte" в окне CE там где "value type" и выберите в memory scan options с какого, по какой адрес, вам нужно добавить в лист адресов и нажмите искать неизвестное значение нажав при этом на кнопку поиска. Но процесс игры желательно чтоб был полностью остановлен (т.е. нажать на паузу что б значения не изменялись и т.д.). Дальше выберите что значение не изменилось (unchanged value) и нажмите снова поиск (next scan). И в окне сканирования должны быть все адреса, с какого по какие адреса, вы и искали.

Изменено пользователем Razi
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

И самое интересное на написанные Lua скрипты можно привязать горячие клавиши, прописав добавление горячих кнопок внутри этих же скриптов. Но как это сделать это самый интересный вопрос, потому что тогда можно привязать к любому Lua скрипту, который будет находиться в папке autorun горячую кнопку. То есть скрипту даже не нужно находиться в таблице после этого. В main.lua есть несколько (3-4) таких похожих команд, недавно смотрел. И MasterGH тоже что-то такое говорил, но сказал что не проверял эту функцию. Если, я все правильно понял конечно. Вот ссылка на это сообщение.

 

Почему-то ссылка попадает не на то место куда надо. То ли это из-за работы сайта или из-за моего браузера.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Хотел еще с самого начала темы, задать как дополнительный вопрос к MasterGH. Можно ли прикрутить счетчик адресов в Cheat Engine к листу адресов? Чтоб знать точно, сколько адресов у нас уже есть в таблице, например 100 или 500 и т.д. То есть в Cheat Engine уже есть счетчик адресов в окне сканирования, который показывает сколько адресов мы нашли. Я хочу узнать можно ли такой же счетчик прикрутить к главному окну адресов?

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.