Razi Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 Можно ли написать на 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" тоже вариант ненамного лучше. Самый лучший вариант это через поиск неизвестного значения выбрать где начинать сканировать и где заканчивать, но этот способ не так хорош для тех, кто не знает шестнадцатиричной системы. Хочу этим всем сказать, что все способы не очень удобны. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 (изменено) 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 байт, во втором тоже много. Изменено 13 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 Кстати здесь может помочь твой АА скрипт по автонажатию кнопок, только вызывать его нужно по горячим клавишам. (Особенно если речь идет о добавлении 5 следующих адресов и 5 предыдущих). Тему прочитал "Как скопировать участок памяти", но вы там все разговариваете непонятно для меня, т.е. понял только малую часть темы. А что делает второй скрипт? В второй предложенный тобой скрипт можно привязать начало например к адресу или нету смысла? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 10:30, Razi сказал: А что делает второй скрипт? Показать Записывает 1 во все адресы, с которыми работает та инструкция. Т.е. это пункт 2. из предыдущего сообщения. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 10:30, Razi сказал: В второй предложенный тобой скрипт можно привязать начало например к адресу или нету смысла? Показать Этот вопрос совсем не понял, поэтому не знаю что ответить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 10:37, Garik66 сказал: Этот вопрос совсем не понял Показать Я неверно подумал про то, что делает тот второй скирпт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 (изменено) Razi, практически все инструкции, которые ты давал для написания скриптов и есть уже выполненный пункт 2., пример Показать контент { // 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] } И вот, если ты разберёшься с этим - тебе не нужно будет добавлять вручную кучу адресов в таблицу (или в скрипт). Изменено 13 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 Хотел сказать, что чаще всего использую добавление следующих и предыдущих адресов во время поиска какого-то адреса и когда нашел адрес, смотрю что рядом с ним находится, т.е. следующих 25 и предыдущих 25 адресов, и в основном занимаюсь добавлением адресов в абсолютно разных играх и в совсем разных адресах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 (изменено) В 13.02.2016 в 11:27, Razi сказал: и в совсем разных адресах. Показать В скриптах что ты мне приводил в ЛС (для объединения), это одни и те же адреса (работающие с одной инструкцией) и их многовато для ручного добавления. Изменено 13 февраля, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 Я всего лишь хочу сказать, иметь такую функцию как быстрое добавление адреса по горячим клавишам было бы хорошо. Например, можно даже сделать автонажатие ctrl+с и ctrl+v и т.д. в АА скриптах, но для этого нужно чтобы эти АА скрипты были в таблице, так что уже не подходит такой вариант. Вот тот твой первый скрипт с циклом может быть пригодился бы для автодобавления адресов в таблицу CE. Да, в скриптах что я приводил часто бывают похожие адреса, но добавление адресов мне часто нужно при поиске разных значений в разных играх. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 14:25, Razi сказал: Я всего лишь хочу сказать, иметь такую функцию как быстрое добавление адреса по горячим клавишам было бы хорошо. Показать Куда уже быстрее. ПКМ/"Копировать"/ПКМ/"Вставить". Здесь не долго и до этого: "А я хочу функцию автонаписания скриптов, т.е. включил игру/включилСЕ/Нажал кнопку -> Бумц и все читы в красивом трейнере" Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 15:43, Garik66 сказал: ПКМ/"Копировать"/ПКМ/"Вставить". Показать В данном случае чтоб добавить адрес, нужно больше чем копировать и вставить. Нужно сделать аж 6 нажатий чтоб добавить один адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 15:59, Razi сказал: аж 6 нажатий Показать Ну да - я забыл, что там окошко вываливается (где можно сразу отредактировать либо смещения, либо сам адрес) и его ещё нужно закрыть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 (изменено) Вот я и говорю при добавлении десяти следующих и десяти предыдущих адресов нужно будет сделать 120 нажатий. А это уже не мало. Догадываюсь уже как можно сделать добавление адреса в Lua скрипте. Изменено 13 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 (изменено) Как временное решение. Полуавтоматизация: добавляешь допустим пять адресов - 10 нажатий в таблицу. (5* "Добавить"+"Подтвердить") Копируешь все пять, вставляешь - ПКМ+Копировать+ПКМ + Вставить + Вставить - 5 нажатий. Копируешь все 10 и вставляешь - 5 нажатий. Копируешь все 20 и вставляешь - 5 нажатий. Итого за 25 нажатий имеем табличку - с 40 адресами. Дальше копируешь свой адрес, ну и раскидываешь по 40 адресам (как тебе нужно) добавляя (или отнимая) к адресу смещения. А лучше вначале вставить адрес, а потом копировать и вставлять. Тогда останется потом прибавить(отнять) смещения. Изменено 13 февраля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 13 февраля, 2016 Автор Поделиться Опубликовано 13 февраля, 2016 То есть имеешь в виду когда в таблице уже есть 40 адресов, то после этого в этих адресах вручную менять значение какждого адреса? У меня есть идея, а что если сделать что-то вроде макроса по вызову горячей клавиши, тот Lua скрипт что написал AntonVitalievich с автонажатием кнопок мог бы подойти сюда, но незнаю как прилепить, чтоб кнопки нажимались именно в окне Cheat Engine.( А может это и не нужно будет). Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 13 февраля, 2016 Поделиться Опубликовано 13 февраля, 2016 В 13.02.2016 в 16:50, Razi сказал: вручную менять значение какждого адреса? Показать Так как ты обычно забиваешь кучу адресов которые находятся рядом в регионе памяти (помню что визуально они отличались на 4 байта), то останется только вручную поменять смещения, т.е. открываешь адрес и прямо вверху добавляешь +4 (или -4) и сохраняешь адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 14 февраля, 2016 Автор Поделиться Опубликовано 14 февраля, 2016 Можно еще поставить вопрос так. Как в Lua скрипте сделать просто автонажатие некоторых клавиш, при вызове по одной или двум кнопкам? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 14 февраля, 2016 Поделиться Опубликовано 14 февраля, 2016 С большим количеством адресов работают в окне Structure disscet. Там можно установить адрес структуры данных, размер, тип каждого или всех выделенные адресов. Все выделенные адреса можно через контекстное меню перенести в таблицу CE. Нашли адрес. Перешли в окно структуры Задали структуру адрес-50 и размера 100 (цифры взяты из примера, из первого поста) Тип данных либо автоматически оставить, либо выделить все адреса и поставить byte (раз в примере был adjust address by 1). Выделить все адреса и перенести в таблицу CE. Таким образом 100 адресов типа 1байт можно очень быстро оформить и перенести в таблицу. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 февраля, 2016 Поделиться Опубликовано 14 февраля, 2016 В 14.02.2016 в 01:09, MasterGH сказал: С большим количеством адресов работают в окне Structure disscet. Показать Точно MasterGH, забыл я про этот способ, хотя им пользовался. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 (изменено) Итого найдено 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.02.2016 в 01: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). И в окне сканирования должны быть все адреса, с какого по какие адреса, вы и искали. Изменено 15 февраля, 2016 пользователем Razi 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 15 февраля, 2016 Автор Поделиться Опубликовано 15 февраля, 2016 (изменено) И самое интересное на написанные Lua скрипты можно привязать горячие клавиши, прописав добавление горячих кнопок внутри этих же скриптов. Но как это сделать это самый интересный вопрос, потому что тогда можно привязать к любому Lua скрипту, который будет находиться в папке autorun горячую кнопку. То есть скрипту даже не нужно находиться в таблице после этого. В main.lua есть несколько (3-4) таких похожих команд, недавно смотрел. И MasterGH тоже что-то такое говорил, но сказал что не проверял эту функцию. Если, я все правильно понял конечно. Вот ссылка на это сообщение. Почему-то ссылка попадает не на то место куда надо. То ли это из-за работы сайта или из-за моего браузера. Изменено 15 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 19 февраля, 2016 Автор Поделиться Опубликовано 19 февраля, 2016 (изменено) Хотел еще с самого начала темы, задать как дополнительный вопрос к MasterGH. Можно ли прикрутить счетчик адресов в Cheat Engine к листу адресов? Чтоб знать точно, сколько адресов у нас уже есть в таблице, например 100 или 500 и т.д. То есть в Cheat Engine уже есть счетчик адресов в окне сканирования, который показывает сколько адресов мы нашли. Я хочу узнать можно ли такой же счетчик прикрутить к главному окну адресов? Изменено 19 февраля, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения