Garik66 Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 (изменено) Вопрос в видео Не могу понять - что я упускаю?[ENABLE]alloc(newMem, 2048)label(returnHere)label(coordX)label(coordY)label(coordZ)label(OK)label(load)label(flag1)registersymbol(flag1)newMem:cmp ebp,0018e5acjne OKcmp byte ptr [flag1],1jne loadpush ebxmov ebx,[ecx]mov dword ptr [coordX],ebxmov ebx,[ecx+04]mov dword ptr [coordY],ebxmov ebx,[ecx+08]mov dword ptr [coordZ],ebxpop ebxmov byte ptr [flag1],0OK:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnHereload:cmp dword ptr [coordX],0je OKcmp byte ptr [flag1],2jne OKpush ebxmov ebx, dword ptr [coordX]mov [ecx],ebxmov ebx, dword ptr [coordY]mov [ecx+04],ebxmov ebx, dword ptr [coordZ]mov [ecx+08],ebxpop ebx//mov byte ptr [flag1],0 // пришлось убрать - иначе нет телепорта.jmp OKcoordX:dd (float)0coordY:dd (float)0coordZ:dd (float)0flag1:db 0Might & Magic Heroes VI.exe+6609FE:jmp newMemnopnopreturnHere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]unregistersymbol(flag1)dealloc(newMem) Изменено 17 марта, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 Предположу, что сам герой, координаты которого меняет скрипт, и дорожка следов за ним - это два разных объекта, и дорожке тоже нужно менять координаты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 Предположу, что сам герой, координаты которого меняет скрипт, и дорожка следов за ним - это два разных объекта, и дорожке тоже нужно менять координаты.У меня сложилось не много другое впечатление, вроде бы (не уверен) выходил на адреса дорожки, и если посмотреть в регионе памяти, то координаты дублируются аж три раза. Может где-то идёт проверка координат и дорожка строится не от Героя, а от сохранённых где-то координат? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 Кажется появилась идея. Если получиться отпишусь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 Идея не сработала, так что вопрос пока открытый. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 Попробуй так. [ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(save_coord)label(load_coord)label(z_coord)label(x_coord)label(y_coord)label(s_enable)label(l_enable)registersymbol(s_enable)registersymbol(l_enable)newmem:cmp ebp,0018e5acjne originalcodecmp [s_enable],1je save_coordcmp [l_enable],1je load_coordmov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheresave_coord:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]fld [ecx] //save coordsfstp [x_coord]fld [ecx+04]fstp [y_coord]fld [ecx+08]fstp [z_coord]mov [s_enable],0jmp returnhereload_coord:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]fld [x_coord] //load coordsfstp [ecx]fld [y_coord]fstp [ecx+04]fld [z_coord]fstp [ecx+08]mov [l_enable],0jmp returnhereoriginalcode:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheres_enable:dd 0l_enable:dd 0x_coord:dd 0z_coord:dd 0y_coord:dd 0Might & Magic Heroes VI.exe+6609FE:jmp newmemnopnopreturnhere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]dealloc(newmem)unregistersymbol(s_enable)unregistersymbol(l_enable) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 Попробуй так.ARM4ND0, спасибо, сейчас попробую. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 (изменено) ARM4ND0, спасибо, сейчас попробую.Попробовал, не даже не телепортирует. Подправил твой скрит:Тоже не телепортирует. Хотя видно что попытки есть.[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(save_coord)label(load_coord)label(z_coord)label(x_coord)label(y_coord)label(s_enable)label(l_enable)registersymbol(s_enable)registersymbol(l_enable)newmem:cmp ebp,0018e5acjne originalcodecmp [s_enable],1je save_coordcmp [l_enable],1je load_coordjmp originalcodesave_coord:fld [ecx] //save coordsfstp [x_coord]fld [ecx+04]fstp [y_coord]fld [ecx+08]fstp [z_coord]mov [s_enable],0jmp originalcodeload_coord:fld [x_coord] //load coordsfstp [ecx]fld [y_coord]fstp [ecx+04]fld [z_coord]fstp [ecx+08]//mov [l_enable],0 // Пробовал, как у меня в скрипте не обнулять флаг.jmp originalcodeoriginalcode:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]jmp returnheres_enable:dd 0l_enable:dd 0x_coord:dd 0z_coord:dd 0y_coord:dd 0Might & Magic Heroes VI.exe+6609FE:jmp newmemnopnopreturnhere:[DISABLE]Might & Magic Heroes VI.exe+6609FE:mov eax,[ecx]mov [edx],eaxmov eax,[ecx+04]unregistersymbol(s_enable)unregistersymbol(l_enable)dealloc(newmem) Изменено 15 марта, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 Тогда надо использовать другую инструкцию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 Тогда надо использовать другую инструкцию.Да, потихоньку, как появиться время, переберу инструкцию. Если повезёт, может удастся выйти на инструкцию, которая отвечает за координаты появления дорожки, и если её (дорожку) телепортнуть, то думаю героя телепортировать уже не придётся, он сам поскачет уже по новой дорожке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 марта, 2015 Автор Поделиться Опубликовано 19 марта, 2015 Попробовал сегодня ночью - поперебирал инструкции и на запись и на доступ координат героя, попробовал выходить на инструкции адресов координат дорожки и по ним тоже писал скрипты, пробовал записывать все три пары координат (координаты дублируются по три раза) (в сумме наверное штук 30 или 40 скриптов написал), но всё пока бестолку - герой телепортируется, а дорожка так и начинается от старта телепорта.Так что вопрос темы пока остаётся открытым.Если у кого есть время и сможет помочь (может на свежий взгляд окажется удачнее), то проблема описана в первом посте. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 марта, 2015 Поделиться Опубликовано 19 марта, 2015 Ищи любые координаты перса или дорожкиСтавь бряк на записьДвигай чараПопробуй использовать эту функцию(функции и окна) для сбора информации с адресов Сравнивай стеки через desectData structureЕсли найдешь хоть какие-то отличия обращай на них внимание как на координаты и перезаписывай прямо в стеке на постоянные значенияЕсли отличий много делай сохранение игры и используй TinyDumper для поиска одинаковых значений в стеке перед тем как перс сдвинулся с одного и того же места. Хотя может быть и более простой вариант, который можно узнать только при ковырянии игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 марта, 2015 Поделиться Опубликовано 19 марта, 2015 Похоже есть динамический список указателей на эти точки. По указателю на первую точку можно добраться до её позиции, а по позиции первой или последней точки может выстраиваться новый маршрут. Предположительно все точки - динамические структуры. При новом маршруте структуры точек, скорее всего, создаются по новым адресам. Позицию точки найти через сканер предположительно не получиться. Можно попробовать выйти на динамический список точек, например, по количеству точек.Понять как получить адрес на первую или последнюю точкуСравнить несколько точек, чтобы отличить их позиции и найти смещение.Поменять позицию по смещению первой точки и попробовать мышкой сделать новый маршрут Пока такие мысли Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 марта, 2015 Автор Поделиться Опубликовано 19 марта, 2015 Мои мысли: Дорожка всегда начинается с координат позиции Героя, соответственно, не смотря на то, что дорожка это другой объект (как писал keng), она всё равно связана с координатами героя, но не прямую.В регионе памяти видны три тройки повторяющихся адресов Героя, моё предположение, что из одной тройки дорожка и получает адреса первой точки, но пока мне не удалось выйти на эту инструкцию.Сегодня уже не буду этим заниматься, но завтра постараюсь всё-таки выйти на инструкцию. MasterGH, из динамических адресов точек (их можно получить из многих инструкций связанных с координатами Героя и в частности из инструкции скрипта из 1 поста) мне пока ни чего сделать не удалось (2, 3 скрипта писал, но не сработали).Всё таки думаю копать именно со стороны адресов координат Героя. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 марта, 2015 Поделиться Опубликовано 19 марта, 2015 Дорожка всегда начинается с координат позиции Героя Мне не удалось это подтвердить.Я нашел по моему предположению все возможные X координаты героя через правило увеличилось и уменьшилось. Несколько десятков адресов типа float было по одной оси X. Заморозив их герой ставился в замороженное положение X, а дорожка,так скажем, "жила своей жизнью" - никак не менялась. От мышки ставится конец дорожки, а первый элемент дорожки, который "рядом с героем" как-то дрейфует сам по себе в памяти копируясь (ИМХО). Подозреваю что герой больше зависит от этого первого элемента дорожки и стремиться к нему. Т.е. грой зависит от дорожки больше чем она от него. Поэтому он за ней бегает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 марта, 2015 Автор Поделиться Опубликовано 19 марта, 2015 Т.е. грой зависит от дорожки больше чем она от него. Поэтому он за ней бегает.С этим утверждением согласен однозначно: если её (дорожку) телепортнуть, то думаю героя телепортировать уже не придётся, он сам поскачет уже по новой дорожке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 марта, 2015 Автор Поделиться Опубликовано 19 марта, 2015 ЗЫ: Может будет полезно?Если включить скрипт из первого поста, телепортнуть героя, не выключать скрипт (оставить Flag на 2), построить дорожку, чтобы конец дорожки был рядом с Героем и потом нажимать ЛКМ, то точки дорожки начнут исчезать начиная со стороны старта телепорта и постепенно доходят до Героя. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения