DarkPower2 Опубликовано 15 августа, 2018 Поделиться Опубликовано 15 августа, 2018 (изменено) Доброго времени суток. Вступление Хочу написать некий телепорт. Игра CoD: AW. Когда-то делал Grab скрипт для SAMP'a, вот решил провернуть что-то такое в CoD средствами CE (AA). Есть вектор игрока и вектор камеры (2 координаты). Сами проблемы Столкнулся с проблемой обычного изменения координаты в АА Спойлер [ENABLE] loadlibrary(luaclient-x86_64.dll) globalalloc(newmem,4096) createthread(newmem) label(end) registersymbol(end) newmem: push eax push ecx //Помещаем 15 патронов mov eax, ["s1_sp64_ship.exe"+03C19040] mov [eax+5B8], 15 luacall(speakEnglish("It Work", true)) //luacall(showMessage(eax)) pop ecx pop eax push 0x000003e8 call kernel32.Sleep //Игнорит luacall(speakEnglish("It Work 2", true)) cmp [end], 1 jne newmem //jmp newmem //Все равно не срабатывает luacall(speakEnglish("It Work 3", true)) ret end: dd 0 [disable] end: dd 1 Посмотрел примеры, как делали в интернете. Создают поток. Создал - и ничего. Т.е. luacall(speakEnglish("It Work", true)) работает. Патроны не меняются, пробовал на прямой адрес (без указателей) - результат тот же. 143F10708 = 30 //Патроны 5B8 -> 143F10150+5B8 = 143F10708 "s1_sp64_ship.exe"+03C19040 -> 143F10150 //Игрок В коде выше просто игнорятся: call kernel32.Sleep //Игнорит и cmp [end], 1 jne newmem //jmp newmem //Все равно не срабатывает Почему такое происходит? И как мне сделать Таймер? Как вывести значение из регистра в МеседжБокс? luacall(showMessage(eax)) Что-то типа такого Сокращения и аббревиатуры: CoD: AW - Call of Duty: Advanced Warfare Grab - Перетаскивание(изменениее координат) чего-либо с помощью обзора мышки. Установка координат объекту с помощью направления камеры, растояния и позиции. SAMP - San Andreas Multiplayer AA - Auto Assembler P.S. Знаю, что можно реализовать это все не в АА (C#, lua, C++ и другие), но меня интересует именно это направление. Изменено 15 августа, 2018 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 15 августа, 2018 Поделиться Опубликовано 15 августа, 2018 Пошаговая отладка в Cheat Engine подскажет что не так. Заранее вручную создаем newMem-память, метку и вручную запускаем поток и там делаем пошаговую отладку. Разбираемся в причинах. Правим. Проверяем и так пока не будет работать. Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 15 августа, 2018 Автор Поделиться Опубликовано 15 августа, 2018 38 минут назад, MasterGH сказал: Пошаговая отладка в Cheat Engine подскажет что не так. Заранее вручную создаем newMem-память, метку и вручную запускаем поток и там делаем пошаговую отладку. Разбираемся в причинах. Правим. Проверяем и так пока не будет работать. Так и сделал. Поток - работает. JMP - работает. Понял, что luacall не добовляет инструкции в память, а сразу выполняет. mov eax, ["s1_sp64_ship.exe"+03C19040] //Тут я озадачен - получаем в ответ [00000000] Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 15 августа, 2018 Автор Поделиться Опубликовано 15 августа, 2018 Разобрался, если кому нужно будет пример таймера, то вот: Спойлер [ENABLE] globalalloc(newmem,1024) globalalloc(end, 4) createthread(newmem) label(end) registersymbol(end) newmem: push eax push ecx //logic start mov rax, s1_sp64_ship.exe add rax, 03C19040 mov rax, [rax] add rax, 5B8 mov [rax], 15 //logic end //wait mov ecx, 00001388 //5000ms - mov ecx, #5000 call kernel32.sleep pop ecx pop eax cmp [end], 1 jne newmem //jmp newmem ret end: dd 0 [disable] end: dd 1 //dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 августа, 2018 Поделиться Опубликовано 16 августа, 2018 3 часа назад, DarkPower2 сказал: Разобрался А так в СЕ разве не работает? Спойлер mov [["s1_sp64_ship.exe"+03C19040]+5B8], 15 // Вместо: mov rax, s1_sp64_ship.exe add rax, 03C19040 mov rax, [rax] add rax, 5B8 mov [rax], 15 Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 16 августа, 2018 Автор Поделиться Опубликовано 16 августа, 2018 (изменено) 12 минут назад, Garik66 сказал: А так в СЕ разве не работает? Нет. Флажок не переключается в enable Разве что так: Спойлер mov rax, s1_sp64_ship.exe add rax, 03C19040 mov rax, [rax] mov [rax+5B8], 15 //ammo Изменено 16 августа, 2018 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 августа, 2018 Поделиться Опубликовано 16 августа, 2018 6 минут назад, DarkPower2 сказал: Нет Странно. Я сейчас проверил на Туториале СЕ (2 шаг) (СЕ 6.5) и у меня все работает: Спойлер Скрипт: { Game : Tutorial-i386.exe Version: Date : 2018-08-16 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(INJECT,Tutorial-i386.exe,81 BB 80 04 00 00 E8 03 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) registersymbol(INJECT) newmem: mov [["Tutorial-i386.exe"+2345D0]+480],000003E8 code: cmp [ebx+00000480],000003E8 jmp return INJECT: jmp newmem db 90 90 90 90 90 return: [DISABLE] INJECT: db 81 BB 80 04 00 00 E8 03 00 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Tutorial-i386.exe"+23AC3 "Tutorial-i386.exe"+23AB1: E8 0A 9D FE FF - call Tutorial-i386.exe+D7C0 "Tutorial-i386.exe"+23AB6: 5E - pop esi "Tutorial-i386.exe"+23AB7: 5B - pop ebx "Tutorial-i386.exe"+23AB8: C9 - leave "Tutorial-i386.exe"+23AB9: C3 - ret "Tutorial-i386.exe"+23ABA: 00 00 - add [eax],al "Tutorial-i386.exe"+23ABC: 00 00 - add [eax],al "Tutorial-i386.exe"+23ABE: 00 00 - add [eax],al "Tutorial-i386.exe"+23AC0: 53 - push ebx "Tutorial-i386.exe"+23AC1: 89 C3 - mov ebx,eax // ---------- INJECTING HERE ---------- "Tutorial-i386.exe"+23AC3: 81 BB 80 04 00 00 E8 03 00 00 - cmp [ebx+00000480],000003E8 // ---------- DONE INJECTING ---------- "Tutorial-i386.exe"+23ACD: 75 2C - jne Tutorial-i386.exe+23AFB "Tutorial-i386.exe"+23ACF: 8B 83 68 04 00 00 - mov eax,[ebx+00000468] "Tutorial-i386.exe"+23AD5: B2 01 - mov dl,01 "Tutorial-i386.exe"+23AD7: 8B 8B 68 04 00 00 - mov ecx,[ebx+00000468] "Tutorial-i386.exe"+23ADD: 8B 09 - mov ecx,[ecx] "Tutorial-i386.exe"+23ADF: FF 91 20 02 00 00 - call dword ptr [ecx+00000220] "Tutorial-i386.exe"+23AE5: 8B 83 78 04 00 00 - mov eax,[ebx+00000478] "Tutorial-i386.exe"+23AEB: B2 00 - mov dl,00 "Tutorial-i386.exe"+23AED: 8B 8B 78 04 00 00 - mov ecx,[ebx+00000478] "Tutorial-i386.exe"+23AF3: 8B 09 - mov ecx,[ecx] } Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 16 августа, 2018 Автор Поделиться Опубликовано 16 августа, 2018 (изменено) 21 минуту назад, Garik66 сказал: Странно. Снова проверил. Теперь флажок ставится, а игра крашится моментально. Моим способом все отличо. Суть в чем, я как-то переходил по адресам через CTRL+G на значение от ("s1_sp64_ship.exe"+03C19040) и 143F10150 - итог разные участки памяти и данные были, хотя сам cheat engine показывает что ["s1_sp64_ship.exe"+03C19040] <=> 143F10150 (В табллице) Ну или может потому что конечное число статическое. Т.е. сразу зеленое s1_sp64_ship.exe+3F10708 Изменено 16 августа, 2018 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 16 августа, 2018 Автор Поделиться Опубликовано 16 августа, 2018 (изменено) Спойлер Возможно потому что это в потоке отдельном делается. Попробуйте создать поток. Изменено 16 августа, 2018 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения