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

Garik66

Помогаторы
  • Постов

    5 750
  • Зарегистрирован

  • Победитель дней

    292

Весь контент Garik66

  1. Dison, в чём собственно сложность? У тебя всё уже есть. Скорее всего путаешь то, что StarID - это адрес, в который записывается твой поинтер, т.е. [starID] - это и есть поинтер. Чтобы написать точнее скрипт, нужно было выложить, что ты хочешь им получить. Скрипт будет выглядеть примерно так: newmem:push eax // сохраняем регистр eax (нужно выбрать неиспользуемый регистр)mov eax,[StarID] // загружаем в него твой поинтерadd eax,4c // прибавляем твоё смещение, теперь в eax лежит то, что тебе нужно, точнее не в eax, а по адресу, который лежит в eax, т.е. [eax] - это нужное тебе значение ---------- // сюда вставляешь, что тебе нужно от этого смещенияpop eax // восстанавливаем регистр
  2. Ну что можно сказать из той информации, которую ты предоставил: 1. Ты выбрал инструкции "На запись". 2. У тебя две инструкции: одна срабатывает, когда ты подбираешь ресурс - add [esi+eax*4+00000FDC],ecx, вторая, когда ты его тратишь - sub [ecx+edx*4+00000FDC],esi. 3. Так как инструкции срабатывают только при подборе или трате ресурса, фильтр не нужен, поэтому скрипт, например на постоянное значение ресурса (ну например - 1000 ед.), будет выглядеть так: [ENABLE]alloc(addresmem,2048)label(subresmem)label(returnhere)label(returnhere1)addresmem:add [esi+eax*4+00000FDC],ecx mov [esi+eax*4+00000FDC],#1000jmp returnheresubresmem: sub [ecx+edx*4+00000FDC],esimov [ecx+edx*4+00000FDC],#1000jmp returnhere1"RiseAndFall.exe"+3AE683:jmp addresmemnopnopreturnhere"RiseAndFall.exe"+3AC183:jmp subresmemnopnopreturnhere1:[DISABLE]"RiseAndFall.exe"+3AE683:add [esi+eax*4+00000FDC],ecx"RiseAndFall.exe"+3AC183:sub [ecx+edx*4+00000FDC],esidealloc(addresmem)
  3. Baracuda, так на вскидку быстро не найду скрипты, но примеров было много на форуме. А так почитай мои ранние статьи, например это сообщение и пройди по ссылкам (если они конечно ещё работают) в этом сообщении. Там есть ссылки и на два видео - нахождение фильтров классическим способом (через Анализ структур) и способом фильтр/регистр.
  4. Baracuda, вначале проверь разовая ли твоя инструкция (событие в игре - срабатывание инструкции) или постоянно работающая. Для таких скриптов лучше использовать часто работающую инструкцию. Второе проверь с какими адресами работает твоя инструкция (F3 0F 10 41 0C), если не только с твоим адресом (нужным тебе), то найди фильтр (часто можно использовать в качестве фильтра значение другого регистра при срабатывании твоей инструкции). PS: и третье: вместо globalalloc(_fuer,4), можно использовать конструкцию без выделения дополнительной памяти, т.е.: [ENABLE]label(_fuer)registersymbol(_fuer)---------_fuer:dd 0---------[DESABLE]unregistersymbol(_fuer)
  5. Korol2010, скорее всего не активируется из-за того что в сигнатуру попал адрес: 8B 00 83 EC 08 51 50 E8 , а точнее именно E8 (т.е. инструкция call 07095EF0 у тебя выглядит чуть-чуть по другому), попробуй вместо E8 поставить XX, т.е. вот так сделай - 8B 00 83 EC 08 51 50 XX, а лучше удлини сигну, так как сканер может несколько инструкций найти, например сделай так: 8B 00 83 EC 08 51 50 XX XX 00 00 00 83 C4 10 C9 C3.
  6. NullAlex правильно написал нужно так как инструкция mov dword ptr [edi+18],(float)60 просто замораживает значение из-за того что игровая инструкция fld [edi+18] постоянно (т.е. часто) обращается к адресу. Т.е. код инъекции будет выглядеть примерно так: cmp [flag],1jne originalcodmov dword ptr [edi+18],(float)60mov [flag],0originalcod:fld [edi+18]jmp returnflag:dd 1 или, если хочешь, чтобы можно было менять начальное значение таймера, то так: cmp [flag],1jne originalcodmov [flag],0fld [TimerNew]jmp returnoriginalcod:fld [edi+18]jmp returnflag:dd 1TimerNew:dd (float)60 / вводим в таблице адрес с адресом и названием TimerNew и меняем на 2, 3 минуты и т.д.ЗЫ: Если дальше в игровом коде нету что-то типа: fstp [edi+18]то последний код нужно будет немного изменить. Скорее всего сам 'шанс критического удара' в игре - это константа. а меняются именно кол-во вложенных очков в это умение и игровой код умножает кол-во вложенных очков на константу. Соответственно нужно искать целое значение (скорее всего 4 байта), но для отсева нужно несколько очков умений, чтобы вложить.
  7. ANT'], всё забываю написать - xmplayer у меня работает, после настройки запуска СЕ в режиме совместимости с 8-ой - сама 10 предложила этот вариант и музыка теперь у меня играет.
  8. Версия 1.01

    7 раз скачали

    1. Введение. Сейчас играю в самую любимую свою игру Fallout2, а точнее в мод для неё Restoration Project v.2.3.3. Ранее я выкладывал Редактор сейвов к игре в этом посте. Он прекрасно работает. Решил к нему немного добавить возможностей. 2. Видио-инструкция. Торможения на видео по-видимому связаны с конфликтом м/у Бандикамом и графичским модом игры -> наверное используют в определённые моменты одно и тоже. Без Бандикама - торомозов в игре нет. PS: подтвердилось. Вторую видео-инструкцию записывал с помощью Action!, там глюков не было. 3. Скрипты.
  9. Baracuda, сигнатуру можно брать с любого участка, главное: 1. Сигнатура должна быть уникальна. 2. Повторяема, т.е. после перезагрузки игры, она должна быть той же самой. 3. Не обязательно, чтобы начало сигнатуры совпадало с первым байтом нужной тебе инструкции, ты можешь сделать сигнатуру, а потом добавить нужное кол-во байт к метке. Ну наверное ты видел такие скрипты, ну например вот известный скрипт из твоей же темы: [ENABLE]aobscanmodule(InfiniteCash,GTA5.exe,E2 48 83 C1 10 48 89 4C 24 10 8B 01 33 C9 89 44 24 08) alloc(newmem,$1000,"GTA5.exe"+C31565) label(code)label(return)label(go)label(michael)label(franklin)label(trevor) label(Odin) registersymbol(Odin)registersymbol(InfiniteCash)newmem:cmp [rcx+d4],'MONE'//Y_SPENT_IN_CLOTHESje franklincmp [rcx+134],'MONE'//Y_SPENT_IN_CLOTHESje michaelcmp [rcx+94],'MONE'//Y_SPENT_IN_CLOTHESje trevormichael:cmp [rcx+144],'LOTH'je gojmp codefranklin:cmp [rcx+e4],'LOTH'je gojmp codetrevor:cmp [rcx+a4],'LOTH' je gojmp codego:cmp byte ptr[Odin],1 jne code mov byte ptr[Odin],0 xor [rcx],rcx add [rcx],#100000 xor [rcx],rcx code:mov eax,[rcx]xor ecx,ecxmov [rsp+08],eaxjmp returnOdin: db 1 InfiniteCash+0A: // Вот что я имею ввиду, как видишь здесь добавляется 10 байт, чтобы попасть наjmp newmem // нужную нам инструкцию.nopnopnopreturn:[DISABLE]InfiniteCash+0A: // Вот что я имею ввиду, как видишь здесь добавляется 10 байт, чтобы попасть на // нужную нам инструкцию.db 8B 01 33 C9 89 44 24 08unregistersymbol(Odin) unregistersymbol(InfiniteCash)dealloc(newmem)
  10. Нужно построить структуру, зацепив [ecx-0C], т.е. выше чем ecx. Тогда по смещению -0с у тебя будет поинтер, при нажатии на него раскроется новая структура и вот там уже по смещению +10 и будет лежать искомое число 65726966.
  11. Да точно - верна, эт я не внимательно прочитал. Извини.
  12. Не после Мастера, а во время, когда я писал комметы, сообщения от Мастера ещё не было. (вот такой онлайн)
  13. Korol2010, Спасибо. Но вообще-то там под спойлером комментарии для тебя (как вижу ты их не читал).
  14. //Base code[ENABLE]alloc(newmem,512)//Понимаю // Хорошоlabel(returnhere)//Понимаюlabel(exit)//Понимаю aobscan(aob_BaseCode,89 11 8B 50 04 89 ?? ?? B9 ?? ?? ?? ?? 39 ?? ?? 7C 6A)//не совсем но понимаю. Скрипт сканирует участок памяти с байтами инструкций, но почему эта сигнатура такая длинная я не знаю, т. к. если я правильно помню у меня автоматом АОБ СЕ выделяет только это: 89 11 8B 50 04 89.// Видимо потому, что по короткой сигнатуре сканером находится несколько инструкций,// поэтому автор удлинил сигнатуру и заменил байты которые меняются на знаки ?.label(BaseCode)registersymbol(BaseCode)//не понимаю зачем дополнительный лейбол BaseCode и зачем его регистрировать // label для использования метки внутри скрипта, registersymbol, // если собираетесь использовать и в других скриптах таблицы или в отдельном адресе. globalalloc(t_GodMode,4)//тоже не понимал, ну сейчас мне объяснил MastrGH что эта функция делает, но я всё же не понимаю зачем происходит ещё выделение памяти и конкретно 4 байта. // как я понял раньше использовали для регистрации меток с выделением локальной памяти,// можно заменить (без ущерба) предыдущей конструкцией.globalalloc(t_InfAbility,4)//аналогичноglobalalloc(t_InfMoney,4)//аналогичноlabel(GodMode1)//ну с этим тоже всё понятно, просто метки // Хорошоlabel(GodMode2)//+label(InfAbility)//+label(InfMoney)//+ t_GodMode:dd 0// как я понимаю это устанавливается значение для зарегистрированной меткиt_InfAbility:dd 0//аналогичноt_InfMoney:dd 0//аналогично newmem: // на эту метку происходит прыжок от -> 111 (смотри ниже).mov [ecx],edx//первая оригинальная инструкция. // Здесь я не понимаю почему эта инструкция находится именно здесь и почему АОБ не делается на эту метку - //вопрос не понял. GodMode1:cmp [t_GodMode],1//тут на сколько я понял сравнивается значение в зарегистрированной метке с единицей (изначально у нас 0, после включения под скрипта №3-один)jne InfAbility//не прыгаем если равно единице // наоборот прыгаем на метку InfAbility, если не равно 1.cmp edi,00000001//сравниваем регистр инструкции mov [ecx],edx с единицейjne InfAbility//не прыгаем если равно единице // см. вышеcmp [ecx+04],00000003//сравниваем значение лежащее по смещению с тройкойjne InfAbility//не прыгаем если равно трём // см. вышеpush esi//загружаем регистр // сохраняемmov esi,[ecx+08]//кладём в загруженный регистр указатель по смещению [ecx+8]cmp [esi+10],00005048 //"HP"// в моём понимании это что-то вроде фильтра первичного для жизней юнитов отряда игрокаpop esi//восстанавливаем регистрjne InfAbility//не прыгаем если равно 5048 // см. вышеpush esi//загружаем регистр // восстанавливаемmov esi,[ecx-0C]//не совсем, но я понимаю что это делается и всё же думаю что лучше бы это дело мне объяснить=)cmp [esi+10],65726966 //"fire"Active (You)//сравниваем с неким числом лежащим в указателе по смещению [ecx-C] // не верно - по [[ecx-0c]+10] лежит значение 65726966 в HE , //но вот от куда это число берётся я так и не понял // в структуре.pop esi//восстанавливаем регистрjne GodMode2//не прыгаем если равно 65726966 // см. вышеmov [ecx],(float)999//устанавливаем нужное кол-во жизней GodMode2:push esi//ну это понятно, дальше я буду пропускать эти строкиmov esi,[ecx-0C]//опять же то что я не совсем понимаю, но по сути мы кладём опять же указатель лежащий по смещению [ecx-C] в регистрcmp [esi+10],72677075 //"upgr"adeLevel (Squad)//сравниваем значение лежащее в указателе [ecx-C] по смещению [esi+10] // тоже не верно см. выше подобную инструкциюpop esijne InfAbility//далее писать про эти строки я не будуmov [ecx],(float)999//опять же записываем нужное значение здоровья, но для меня не понятно зачем было это делать 2 раза и в таком виде, да и ещё используя аж 3 фильтра // это нужно изучать код, чтобы понять, но предположу, // что при записи в одном месте GodMod не срабатывал, //я лично делал тоже самое в Ведьмаке 3 ( записывал максимальное значение живучести, // в двух инструкциях - после этого работало). InfAbility:cmp [t_InfAbility],1//про это я тоже писать больше не буду и так всё ясноjne InfMoneycmp edi,00000009//сравниваем регистр со значением 9jne InfMoneycmp [ecx+04],00000003//сравниваем значение лежащее по смещению с тройкойjne InfMoneypush esimov esi,[ecx+08]//кладём указатель лежащий по смещению [ecx+8] в регистрcmp [esi+10],72616863 //"char"ges//ещё 1 фильтрpop esijne InfMoneymov [ecx],(float)99//записываем нужное кол-во расходников InfMoney:cmp [t_InfMoney],1jne exitcmp edi,00000001//опять же сравниваем регистр с единицейjne exitcmp [ecx+04],00000003//значение лежащее по смещению [ecx+4] сравниваем с тройкойjne exitpush esimov esi,[ecx+08]//аналогично как было и вышеcmp [esi+10],6F736572 //"reso"urces//ещё фильтpop esijne exitmov [ecx],(float)9999//устанавливаем нужное кол-во денег exit:mov edx,[eax+04]//вторая оригинальная инструкция идущая по кодуjmp returnhere aob_BaseCode:BaseCode:jmp newmem //111//вообще не понятно почему тут так сделано какой-то прям бутерброд получается:-Dreturnhere:[DISABLE]BaseCode:mov [ecx],edxmov edx,[eax+04]//выполняем оригинальный кодdealloc(newmem)//удаляем выделенную памятьunregistersymbol(BaseCode)//снимаем регистрацию с метки
  15. krocki, вот в этом видео я немного рассказываю про прыжки (переходы:
  16. @@ - безымянная метка. @f - короткий прыжок вперёд на ближайшую безымянную метку. @b - короткий прыжок назад на ближайшую безымянную метку.
  17. В структуре скорее всего будут рядом максимальное кол-во живучести. А скрипт будет выглядеть примерно так: [ENABLE]alloc(newmem,64)label(returnhere)newmem:cmp [eax+20],00120000 jne @f mov edi,[eax+08] // либо [eax+0] или [eax]. Посмотри в структуре. @@:mov [eax+04],edi jle "GAME.EXE"+5839Bjmp returnhere"GAME.EXE"+58384:jmp newmemreturnhere:[DISABLE]"GAME.EXE"+58384:mov [eax+04],edijle "GAME.EXE"+5839Bdealloc(newmem)
  18. Master GH + + +. Из всего, что в этом топике, наверное три единственно адекватных сообщения.
  19. Garik66

    Телепорт.

    Жень, попробуй использовать в скрипте регистр xmm1 из инструкции, с которой ты делал скрипт, он всё равно ею затирается. Примерно так (но это не точно, нужно посмотреть как правильно пишутся скрипты с этими регистрами): movss xmm1,[rcx+000000C0]movss [coordX],xmm1movss xmm1,[rcx+000000C4]movss [coordY],xmm1movss xmm1,[rcx+000000C8]movss [coordZ],xmm1Ну и в секции Load тоже самое сделай.
  20. Форумчане у меня просьба - перестаньте идти на поводу у одного "клоуна" и превращать форум в "балаган". Надоело эту x....... читать.
  21. Garik66

    Телепорт.

    Частая ошибка при переходе с 32-битных игрушек на 64. Координаты - 4 байта. При копировании в полный регистр ( у тебя rax - 8 байт) копируется не всё нужное, поэтому и вылет. Поменяй регистр rax на eax: push rax // эти rax можно оставитьmov eax,dword ptr [rcx+000000C0] // а эти поменять на eaxmov [coordX],eaxmov eax,dword ptr [rcx+000000C4]mov [coordY],eaxmov eax,dword ptr [rcx+000000C8]mov [coordZ],eaxpop rax // эти rax можно оставить// Ну и далее по коду, поменяй всё.Ну и ещё если инструкция работает не только с координатами (хотя навряд ли), то фильтр.
  22. Цирк уехал, а клоуна забыли. По-видимому, он им тоже не нужен -> слишком отстойный (дети от него не смеются, а плачут.)
  23. дон Педро, первое: зачем ты морозишь адрес при поиске указателей? По-моему это делать не нужно, главное чтобы адрес был актуален, т.е. количество гранат в игре менялось, при смене значения по адресу. Второе: у тебя бесплатная версия "Артемона"? Помнится, что в бесплатной версии можно было искать только максимум указатели второй степени, а если там больше, то либо нужна версия PRO Артемона, либо переходи на СЕ - видео-уроков по поиску (ручному и автоматическому) много у нас на форуме.
  24. gmz, у меня просьба: ты можешь иногда спускаться с небес твоего уровня до нашего нубского уровня, особенно, если даёшь какую-то инструкцию. Я из твоих сообщений на форуме, дай бог 10 % теста воспринимаю (ну типа Здравствуйте и до свидания, а остальное тёмный лес ). Если что знаешь, (если конечно не сложно, ещё раз повторюсь "это просьба") пиши пожалуйста инструкции поподробней и если есть последствия, то тоже их описывать.
×
×
  • Создать...

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

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