d0c Опубликовано 13 марта, 2015 Поделиться Опубликовано 13 марта, 2015 (изменено) В общем, есть игра(Plants vs Zombies) и я хочу найти указатели на солнышки, но не все так просто если просто искать многоуровневый указатель типа game.exe+F+256+B8 то можно сказать это сделать невозможно их там УЙМА! Делал я как-то очень давно скрипт для игры Starbound и находил там указатели через этот самый AA скрипт, но с этой игрой что-то не катит хотя схема везде одинаковая. Вот кусочек кода для Starbound:alloc(newmem,1024)registersymbol(newmem)aobscan(money, 8B 01 89 E5 8B 51 04 5D C3 8D B6 00 00 00 00 55 89 E5 8B 45 08 8B 55 0C 5D 01 01 11 51 04 C2 08)label(_money)registersymbol(_money)label(money_addr)label(money_exit) newmem:dd 0 money_addr:mov [newmem],ecxmov eax,[ecx]mov ebp,espmov edx,[ecx+04]jmp money_exit money:_money:jmp money_addrdb 90 90money_exit:После этого добавляем адрес в CE и вводим newmem со смещением 0, вот мы и нашли указатель, он работает после включения скрипта, как я понял он перемещает значение ecx в переменную newmem. Но с PvZ такое не прокатило просто не видит никакой адрес, хотя сделал все аналогично. Подскажите в чем проблема, заранее спасибо! Изменено 13 марта, 2015 пользователем NullAlex Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 13 марта, 2015 Поделиться Опубликовано 13 марта, 2015 Скинь скрипт PvZ на солнышки. Посмотрю что можно сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 13 марта, 2015 Автор Поделиться Опубликовано 13 марта, 2015 (изменено) У меня есть 2 подобных, пробовал по разному:1) Показать контент 2) Показать контент NullAlex: настоятельно рекомендую прочитать про тег кода, в соответствующем FAQ[ENABLE]aobscan(addmoneyaob, 01 88 ?? ?? ?? ?? 8B 88 ?? ?? ?? ?? 83 EC 0C 81 F9) //0041E6E0label(_addmoney)registersymbol(_addmoney)label(addmoney_addr)label(return1)alloc(newmem,2048)registersymbol(newmem)aobscan(movmoneyaob, 89 B7 ?? ?? ?? ?? B0 01 5E C3 8B 8F ?? ?? ?? ??) //0041E846label(_movmoney)registersymbol(_movmoney)label(movmoney_addr)label(return2) newmem:dd 0 0 addmoney_addr:mov [newmem+8],eaxadd [eax+00005578],ecxjmp return1 movmoney_addr:mov [newmem+11],esimov [edi+00005578],esijmp return2 addmoneyaob:_addmoney:jmp addmoney_addrnopreturn1: movmoneyaob:_movmoney:jmp movmoney_addrnopreturn2: [DISABLE]_addmoney:add [eax+00005578],ecx _movmoney:mov [edi+00005578],esi dealloc(newmem)dealloc(newmem)unregistersymbol(_addmoney)unregistersymbol(_movmoney)unregistersymbol(newmem)[ENABLE]aobscan(addmoneyaob, 01 88 ?? ?? ?? ?? 8B 88 ?? ?? ?? ?? 83 EC 0C 81 F9) //0041E6E0label(_addmoney)registersymbol(_addmoney)label(return1)alloc(newmem,1024)registersymbol(newmem)aobscan(movmoneyaob, 89 B7 ?? ?? ?? ?? B0 01 5E C3 8B 8F ?? ?? ?? ??) //0041E846label(_movmoney)registersymbol(_movmoney)label(return2) addmoneyaob:_addmoney:jmp newmemnopreturn1: newmem:mov [newmem],ecxadd [eax+00005578],ecxjmp return1 movmoneyaob:_movmoney:jmp newmem+11nopreturn2: newmem+11:mov [newmem+11],edimov [edi+00005578],esijmp return2 [DISABLE]_addmoney:add [eax+00005578],ecx _movmoney:mov [edi+00005578],esi dealloc(newmem)unregistersymbol(_addmoney)unregistersymbol(_movmoney)unregistersymbol(newmem) Изменено 13 марта, 2015 пользователем NullAlex Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 13 марта, 2015 Поделиться Опубликовано 13 марта, 2015 Если ты хочешь читать нужное значение, то попробуй так и добавь указатель с адресом pMoney и оффсет 5578.[ENABLE]alloc(newmem,256)label(returnhere)label(originalcode)aobscan(addmoneyaob, 01 88 ?? ?? ?? ?? 8B 88 ?? ?? ?? ?? 83 EC 0C 81 F9) //0041E6E0label(_addmoney)registersymbol(_addmoney)globalalloc(pMoney,8)newmem:mov [pMoney],eaxoriginalcode:add [eax+00005578],ecxjmp returnherepMoney:dd 0addmoneyaob:_addmoney:jmp newmemnopreturnhere:[DISABLE]_addmoney:add [eax+00005578],ecxdealloc(newmem)dealloc(pMoney)unregistersymbol(_addmoney)//Alt: db 48 8D 64 24 D8 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 14 марта, 2015 Автор Поделиться Опубликовано 14 марта, 2015 (изменено) В 13.03.2015 в 10:37, ARM4ND0 сказал: Если ты хочешь читать нужное значение, то попробуй так и добавь указатель с адресом pMoney и оффсет 5578.Спасибо большое! Заработало! Получается дело всего лишь в globalalloc ? А чем она вообще отличается от alloc ? Изменено 14 марта, 2015 пользователем NullAlex Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 марта, 2015 Поделиться Опубликовано 14 марта, 2015 Грубо говоря, результаты alloc доступны только в рамках того скрипта, который ее вызвал, а globalalloc - из всей Cheat Engine. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 15 марта, 2015 Автор Поделиться Опубликовано 15 марта, 2015 (изменено) Такс, возникла точно такая же проблема в Assassins Creed RevelationsОпять же сделал аналогичный скрипт[ENABLE]globalalloc(pMoneysell,8)alloc(newmem,256)aobscan(moneyaob,89 4E 0C 5E 5D C2 ?? ?? CC CC CC CC CC CC CC CC CC 55 8B EC 8B 41 0C) //01F3D9FFlabel(exit1)label(_money)registersymbol(_money) newmem:mov [pMoneysell],esimov [esi+0C],ecxpop esipop ebpjmp exit1 moneyaob:_money:jmp newmemexit1: pMoneysell:dd 0 [DISABLE]_money:mov [esi+0C],ecxpop esipop ebp dealloc(newmem)dealloc(pMoneysell)unregistersymbol(_money)Например значение денег = 1200, а pMoneysell + 0C = 10000.Вроде записываю в pMoneysell ту переменную.Например если записать :mov [esi+0C],#5000То значение денег станет 5000. Подскажите как быть Вот снимок отладчика если нужно может там где-нибудь защита: Изменено 15 марта, 2015 пользователем d0c Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 Попробуй так.[ENABLE]globalalloc(pMoneysell,8)alloc(newmem,256)aobscan(moneyaob,89 4E 0C 5E 5D C2 ?? ?? CC CC CC CC CC CC CC CC CC 55 8B EC 8B 41 0C) //01F3D9FFlabel(exit1)label(_money)registersymbol(_money) newmem:mov [pMoneysell],esimov [esi+0C],ecxpop esipop ebpjmp exit1 pMoneysell:dd 0moneyaob:_money:jmp newmemexit1: [DISABLE]_money:mov [esi+0C],ecxpop esipop ebp dealloc(newmem)dealloc(pMoneysell)unregistersymbol(_money) Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 16 марта, 2015 Автор Поделиться Опубликовано 16 марта, 2015 В 15.03.2015 в 10:08, ARM4ND0 сказал: Попробуй так.Хорошо, как попробую отпишусь. А разница то какая? Местами просто поменял, от этого что-то зависит? NullAlex: цитаты укорачивать принято, для удобочитаемости. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 16 марта, 2015 Поделиться Опубликовано 16 марта, 2015 В 16.03.2015 в 10:28, d0c сказал: Местами просто поменял, от этого что-то зависит?Если сделать как ты, то будет краш игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 17 марта, 2015 Автор Поделиться Опубликовано 17 марта, 2015 (изменено) В 16.03.2015 в 16:49, ARM4ND0 сказал: Если сделать как ты, то будет краш игры.Ну я так уже делал, и никакого краша небыло, просто находился неправильный адрес. Изменено 17 марта, 2015 пользователем d0c Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 марта, 2015 Поделиться Опубликовано 17 марта, 2015 В 16.03.2015 в 10:28, d0c сказал: А разница то какая?Разница есть. У тебя объявление переменной находится на выходе из кода, у ARM4ND0 переменная объявляется вне кода, как и метки.Ты кстати попробовал код ARM4ND0? Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 18 марта, 2015 Автор Поделиться Опубликовано 18 марта, 2015 Проверил скрипт, все то же самое, находится адрес(esi+0C) и он = 10000. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 марта, 2015 Поделиться Опубликовано 18 марта, 2015 В 18.03.2015 в 05:16, d0c сказал: Проверил скрипт, все то же самое, находится адрес(esi+0C) и он = 10000.У меня, что-то подобное было, когда писал скрипт на добавление ресурсов здесь., то перед написанием окончательного скрипта пробовал добавлять ресурсы в первой части кода (её я использую потом в другом скрипте на добавление опыта здесь.), то у меня тоже ресурсы становились удвоенными, думаю у меня это было связанно с тем, что инструкция работает не только с ресурсами и нужно было отфильтровать именно на ресурсы, как это я сделал с добавлением опыта. Так что может и тебе нужно поискать фильтр. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 20 марта, 2015 Автор Поделиться Опубликовано 20 марта, 2015 В 18.03.2015 в 15:31, garik66 сказал: У меня, что-то подобное было, когда писал скрипт на добавление ресурсовОк, спасибо попробую сделать фильтр. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 20 марта, 2015 Поделиться Опубликовано 20 марта, 2015 Может быть, я не совсем правильно понял вопрос. Есть игра, в ней есть некоторое значение, адрес которого нужно найти скриптом, а не указателем. Сначала я удивился, что не ищутся указатели. Ищутся, пусть их и много. Это еще не самый крутой пример и уровней вложенности, если я правильно помню, всего три. Потом я написал скрипт, который приведу чуть ниже. Взял адрес, поставил на него брейкпоинт на чтение, отладчик выдал мне две инструкции. Выбрал первую. Дальше скрипт: [ENABLE]aobscanmodule(INJECT,PlantsVsZombies.exe,03 82 * * * * 39 44 24 * 0F 9E C0 C2 04 00)alloc(newmem,$1000)registersymbol(INJECT)globalalloc(addr_suns,4)newmem: ADD EAX,[EDX+00005578] // Оригинальная инструкция PUSH EAX // Сохраняем регистр EAX в стеке LEA EAX,[EDX+5578] // Загружаем в него адрес нужного нам значения MOV [addr_suns],EAX // Кладем его в переменную POP EAX // Восстанавливаем регистр EAX RET // И выходимINJECT: CALL newmem NOP[DISABLE]INJECT: db 03 82 78 55 00 00 unregistersymbol(INJECT) dealloc(newmem) dealloc(addr_suns) Показать контент Остается только включить скрипт и добавить в список адресов адрес addr_suns. Xipho: название спойлера теперь обязательно, иначе он "поломается" Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения