DarkPower2
-
Постов
32 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные DarkPower2
-
-
21 минуту назад, Garik66 сказал:
Странно.
Снова проверил. Теперь флажок ставится, а игра крашится моментально.
Моим способом все отличо.
Суть в чем, я как-то переходил по адресам через CTRL+G на значение от ("s1_sp64_ship.exe"+03C19040) и 143F10150 - итог разные участки памяти и данные были, хотя сам cheat engine показывает что
["s1_sp64_ship.exe"+03C19040] <=> 143F10150 (В табллице)
Ну или может потому что конечное число статическое.
Т.е. сразу зеленое s1_sp64_ship.exe+3F10708
-
12 минут назад, Garik66 сказал:
А так в СЕ разве не работает?
Нет. Флажок не переключается в enable
Разве что так:
Спойлерmov rax, s1_sp64_ship.exe add rax, 03C19040 mov rax, [rax] mov [rax+5B8], 15 //ammo
-
Разобрался, если кому нужно будет пример таймера, то вот:
Спойлер[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)
-
38 минут назад, MasterGH сказал:
Пошаговая отладка в Cheat Engine подскажет что не так. Заранее вручную создаем newMem-память, метку и вручную запускаем поток и там делаем пошаговую отладку. Разбираемся в причинах. Правим. Проверяем и так пока не будет работать.
Так и сделал.
Поток - работает.
JMP - работает.
Понял, что luacall не добовляет инструкции в память, а сразу выполняет.
mov eax, ["s1_sp64_ship.exe"+03C19040] //Тут я озадачен - получаем в ответ [00000000]
-
Доброго времени суток.
Вступление
Хочу написать некий телепорт.
Игра 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++ и другие), но меня интересует именно это направление.
-
Столкнулся с проблемой обычного изменения координаты в АА
-
Суть проблемы: в чужом окне есть RichEdit в котором при нажатии клавиши Enter отсылается текст.
Написал код на Delphi которой добавляет текст и нажимает клавишу ентер - все отлично работает!
Написал код на C# который добавляет текст и нажимает клавишу ентер - текст пишет нормально, а вот ентер пишет в РичЕдит, тоесть не отсылает текст...Код на Delphi:
Скрытый текстSendMessage(EDITCtrl, WM_SETTEXT, 0, Integer(Edit2.Text));
SendMessage(EDITCtrl, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(EDITCtrl, WM_KEYUP, VK_RETURN, 0);Код на C#:
Скрытый текстWIN32.SendMessage(hwnd_edit, WM_SETTEXT, IntPtr.Zero, textBox1.Text);
WIN32.SendMessage(hwnd_edit, WM_KEYDOWN, (IntPtr)VK_ENTER, IntPtr.Zero);
WIN32.SendMessage(hwnd_edit, WM_KEYUP, (IntPtr)VK_ENTER, IntPtr.Zero);Что не так? Почему не выполняется событие на нажатие клавиши ентер?
В результате не отправляется текст, а просто пишется после текста перенос. -
Fallout 3
Герои 3
Rise of Nations
Command and Conquer 3 tiberium wars
Sacred 1/2
FlatOut 2
NFS
GTA SA
-
Вот оно как, не понятное описанее было. Спасибо, попробую покапать.
Вот только они же не влияют на xmm1, или же я ошибкюсь?
-
9 часов назад, Garik66 сказал:
lea edi,[ebx+000001B4] lea esi,[ebp-20] movsd movsd movsd
позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI.
3 MOVSD = 3 координаты. Наверное здесь.
Как то странно, 3 раза копирует одно и тоже в edi.
-
Цитата
3. А скрипт у тебя точно рабочий? Просто, если оригинальная инструкция например эта:
Там 2 оригинальных инструкции... просто если персонаж совпадает с моим, то пропускается одна инструкция.
Проблема не в коде, проблема в том, что тот регион памяти меняется при смене измерения или при смерти или при выходе из сервера, и не всегда там хранятся мои данные. Когда мой персонаж умирает, то данные стераются или заменяются другим живым персонажем.
Вот, можно ли проверить есть ли данные по указоному адресу или еще как-то, что считать их без краха?
-
23 минуты назад, Garik66 сказал:
По выложенному тобой участку кода, это не понятно.
Ну вот побольше сделал.
Скрытый текстtest eax,eax mov [ebp+0C],eax fild dword ptr [ebp+0C] jnl cnc3game.Debug::PostStaticInit+23017D fadd dword ptr [cnc3game.dat+62AE40] fdivr dword ptr [cnc3game.dat+634448] movss xmm1,[ebp+08] comiss xmm1,[edi+40] fstp dword ptr [ebp+0C] jna cnc3game.Debug::PostStaticInit+2301AA test byte ptr [edi+54],01 jne cnc3game.Debug::PostStaticInit+2301AA push ebx mov ecx,edi call cnc3game.Debug::PostStaticInit+22F82A fadd dword ptr [edi+40] movss xmm1,[ebp+08] fstp dword ptr [edi+40] movss xmm0,[edi+40] comiss xmm0,xmm1 jna cnc3game.Debug::PostStaticInit+2301C8 subss xmm0,[ebp-04] comiss xmm1,xmm0 movss [edi+40],xmm0 jna cnc3game.Debug::PostStaticInit+2301C8 movss [edi+40],xmm1 movss xmm0,[esi] mov ecx,[ebp+14] test ecx,ecx movss [ebp-30],xmm0 movss xmm0,[esi+04] movss [ebp-2C],xmm0 movss xmm0,[esi+08] movss [ebp-28],xmm0 movss xmm0,[edi+40] movss [ebp+08],xmm0 je cnc3game.Debug::PostStaticInit+230380 cmp byte ptr [ecx+0E],00 je cnc3game.Debug::PostStaticInit+23020C xorps xmm0,xmm0 movss [edi+40],xmm0 mov byte ptr [ecx+0E],00 inc [ecx] push edi lea eax,[ebp-24] push eax call cnc3game.Debug::PostStaticInit+2F38F6 mov esi,eax lea edi,[ebp-4C] movsd movsd movsd movsd lea esi,[ebp-48] lea edi,[ebp-30] movsd movsd movsd mov esi,[ebp-08] push 01 push ecx fld dword ptr [esi+40] mov ecx,[ebp+14] lea eax,[ebp-30] fstp dword ptr [esp] push eax call cnc3game.Debug::PostStaticInit+30E788 mov ecx,[ebp+14] push esi lea eax,[ebp-24] push eax call cnc3game.Debug::PostStaticInit+2F38F6 mov ecx,[ebp+14] mov esi,eax mov eax,[ecx] test eax,eax lea edi,[ebp-4C] movsd movsd movsd movsd je cnc3game.Debug::PostStaticInit+230264 dec eax mov [ecx],eax movss xmm0,[ebp-48] movss [ebp-20],xmm0 movss xmm0,[ebp-44] movss [ebp-1C],xmm0 movss xmm0,[ebp-40] movss [ebp-18],xmm0 lea edi,[ebx+000001B4] lea esi,[ebp-20] movsd movsd mov byte ptr [ebx+000001C2],01 movsd movss xmm1,[ebp-30] //этот xmm1 не совпадает movss xmm0,[ebp-2C] cmp byte ptr [ebx+000001C2],00 lea eax,[ebx+38] movss xmm2,[eax+08] movss [ebp-28],xmm2 je cnc3game.Debug::PostStaticInit+2302BB lea eax,[ebx+000001B4] movss xmm3,[eax] movss [ebp-20],xmm3 movss xmm3,[eax+04] movss [ebp-1C],xmm3 movss [ebp-18],xmm2 lea edi,[ebx+000001B4] lea esi,[ebp-20] movsd movsd movsd mov esi,[ebp-08] mov byte ptr [ebx+000001C2],01 lea eax,[esi+78] movss [eax+1C],xmm0 movss [eax+0C],xmm1 //xmm1 не совпадает с вот этим movss [eax+2C],xmm2
-
Вот примерно такой был, но суть в том, что когда персонаж умирал, то окончательный адрес менялся на левый, значение соответственно то ?? то еще какое нибудь.
Скрытый текстnewmem: push R13 mov R13, ["server.dll"+01C508B8] mov R13, [R13] mov R13, [R13+48] cmp rbx, [R13] je exit movss [rbx+000007EC],xmm7 exit: pop R13 movss xmm1, [rbx+7EC] jmp returnhere "server.dll"+884A2A: push RDI mov RDI, newmem jmp RDI nop nop returnhere: pop RDI
-
Только что, Garik66 сказал:
В твоём скрипте нет.
Ай, блин... Просто неверный код скинул. Я потерял тот, это тестовый я делал... щас отредактирую...
-
Я изменил код.
Ну вобще в конце указателя бывает.
Разве не сохраняется R13?
-
9 минут назад, Garik66 сказал:
отому что здесь идёт просто пересылка координат, но не их расчёт. Т.е. тебе нужно искать инструкция откуда в [ebp-30] и т.д. попадают значения, причём не по еbp, а по конкретному адресу, так как регистр может и поменяться.
Вот только, почему в xmm1 (то что сверху) не совпадают координатами xmm1 (то что снизу)?
-
9 минут назад, Garik66 сказал:
Короче попробуй сделать "Анализ структуры" например из этой инструкции:
movss xmm0,[ebp-2C]
Скорее всего в ней и будет лежать коэффициент ускорения.
Спасибо, попробую. Я обновил пост из другой темы (про чтение из несуществующего адреса).
-
6 часов назад, Garik66 сказал:
Выложи свой скрипт, посмотрим что можно сделать.
А так - нужно дополнительно фильтровать в скрипте - делать проверку.
Скрытый текстnewmem: originalcode: mov R13, ["server.dll"+01C508B8] //вот тут бывакт mov R13, [R13] mov R13, [R13+48] cmp rbx, [R13] je exit movss [rbx+000007EC],xmm7 exit: movss xmm1, [rbx+7EC] jmp returnhere "server.dll"+884A2A: push RDI mov RDI, newmem jmp RDI nop nop returnhere: pop RDI
-
Только что, Garik66 сказал:
Именно этими инструкциями и меняются координаты, которые находятся в [eax+1C], [eax+0C] и [eax+2C]. А в xmm0 (и соответственно в других) лежит новое значение координат.
А что ты пишешь? Для чего искал координаты? Телепорт?
Да я понимаю... Вот я и хочу как раз узнать где меняются новые координаты... Хочу ускорить моего персонажа.
-
1 минуту назад, Garik66 сказал:
Скорее всего вот они все три координаты:
movss [eax+1C],xmm0 movss [eax+0C],xmm1 movss [eax+2C],xmm2
Да, это они, но где они изменяются, это меня интересует. То есть где меняется xmm1 к примеру.
-
Можно ли в CE сохранить измененные инструкции в exe как в Олли?
-
Как бороться с вот этим?
ЦитатаЧтение(или запись) из не существующего адреса (или адреса с протекцией памяти не для чтения) и случай выполнения перемещённой инструкции.
Просто бывает, при смерти моего персонажа, указатель на него меняется на несуществующий адрес.
-
Игра: Command and Conquer 3.
Указатель на координаты: найден.
Там 3 адреса на 1 координату которые зависят друг от друга...
В итоге я дошел до такой команды: movss [eax+0C],xmm1
В xmm1 и содержится координата. Полистав выше, в поисках кто и что пишет в xmm1, я нашел только: movss xmm1,[ebp-30]
Регистр ebp вроде бы негде не менялся, я взял регистр ebp, отнял от него 30 по хексу и добавил его в СЕ.
Получил в итоге статический адрес значение которого не совпадает с координатой (при попытки его заморозить игра вылетает, при просмотре что пишет туда игра зависает, так как много команд пишут туда...)
Помогите найти инструкцию изменения координаты, вот листинг от movss [eax+0C],xmm1 и выше...
Скрытый текстmovss xmm1,[ebp-30] movss xmm0,[ebp-2C] cmp byte ptr [ebx+000001C2],00 lea eax,[ebx+38] movss xmm2,[eax+08] movss [ebp-28],xmm2 je cnc3game.Debug::PostStaticInit+2302BB lea eax,[ebx+000001B4] movss xmm3,[eax] movss [ebp-20],xmm3 movss xmm3,[eax+04] movss [ebp-1C],xmm3 movss [ebp-18],xmm2 lea edi,[ebx+000001B4] lea esi,[ebp-20] movsd movsd movsd mov esi,[ebp-08] mov byte ptr [ebx+000001C2],01 lea eax,[esi+78] movss [eax+1C],xmm0 movss [eax+0C],xmm1 movss [eax+2C],xmm2
-
Можете показать пример через call?+тебе не обязательно сохр регистр, посмотри какие там ниже не юзаются и выбери временный из RAX RCX RDX R8 R9 R10 R11
+лучше оформи через call [xxxxx]
-
АА это автоассемблер...сделать скрипт на эту инструкцию movss [rbx+000007EC],xmm7, то есть выбираешь её в отладчике жмёшь на:
"Инструменты -> автоассемблер -> Появится окно далее шаблон -> Вставить секции -> Инъекция кода.
Ну а там уже можешь скриптить\делать внедрения своего кода в эту инструкцию movss [rbx+000007EC],xmm7
Странно как то твой модуль отображается в отладчике...учитывая что твоя метка отключена:
В отладчике отображается так: "server.-crt_debugger_hook+2D668A"
В скрипте выглядит так: "server.dll"+884A2A
Ну я так и делал, просто потом мне надо будет внедрять это все в память через c#... И там нету асмблеровсой вставки, все по хексу... А делать dll на c++ не вариант.
В четинейдже прыгает на 8 байтный адрес с помощю 4 байтов (отниманием "куда прыжок" от "откуда прыжок" и "колово байт на прыжок" - не помогает - прыгает на неверный адрес), я уже пробовал по разному, самый лучший вариант - поместить 8 байтный адрес в регистр, а потом прыгать не регистр, но при таком раскладе игра крашится...
"server.-crt_debugger_hook+2D668A" - это в доте так...
Выполнение логики в таймере(потоке)
in Cheat Engine
Опубликовано · Изменено пользователем DarkPower2
Возможно потому что это в потоке отдельном делается.
Попробуйте создать поток.