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

CTIGRA

Стажёры
  • Постов

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

  • Посещение

Репутация

0 Навыки не прокачены
  1. Вот что получилось, но не работает... что я делаю не так? [ENABLE] alloc(newmemZ,2048) label(returnhereZ) label(cheatByteCodeZ) label(QWordValueZ) label(QWordValue) label(cheatZ) registersymbol(cheatZ) aobscan(aob_scanZ,DD 40 18 DD 5F 18 8B) newmemZ: newmemZ + 64: QWordValueZ: dq (double)10000 QWordValue: dq (double)10 cheatByteCodeZ: fld qword ptr [eax+18] fstp qword ptr [edi+18] push eax fld [QWordValueZ] fcomp qword ptr [edi+08] fnstsw ax test ah,0x41 jne returnhereZ fld [QWordValueZ] fcomp qword ptr [edi+10] fnstsw ax test ah,0x41 jne returnhereZ fld qword ptr [QWordValue] fstp qword ptr [edi+08] fld qword ptr [QWordValue] fstp qword ptr [edi+10] jmp returnhereZ aob_scanZ: cheatZ: jmp cheatByteCodeZ nop returnhereZ: pop eax [DISABLE] cheatZ: fld qword ptr [eax+18] fstp qword ptr [edi+18] unregistersymbol(cheatZ) dealloc(newmemZ)
  2. спасибо, попробую. Надо только студио скачать будет... Ещё 2 вопроса если можно ) 1) По условию будет прыжок, а у нас eax в стеке. Как же достать его из стека? ставить ещё метку или можно сделать это после returnhere? 2) автоассемблер переходит на метку cheat, потом прыгает на cheatByteCode в результате имеем такой код cheat: jmp cheatByteCode nop получается что данный код это 6 байт? (потому что это 6ть байт fld qword ptr [eax+08] // значение fstp qword ptr [edi+08] // запись в структуру ) таким образом, мне нужно ещё добавить nop'ов после jmp cheatByteCodeпо формуле (кол-во байт на выполнение условия минус 6)? или можно не добавлять nop? просто перезаписать значения в адресах [edi+08] и [edi+10] согласно условию? в результате я хочу менять значения в X и Y но при условии что описано выше.
  3. CTIGRA

    Задать условие FPU

    Подскажите пожалуйста как задать вот такое условие при работе с FPU (double) Если X<10000 AND Y<10000 где X fld qword ptr [eax+08] // значение fstp qword ptr [edi+08] // запись в структуру Y fld qword ptr [eax+10] fstp qword ptr [edi+10] пробовал наподобии push eax fld [ValueX] fcom [ValueY] fstsw ax sahf jl Rezult1 -если X<Y jnle Rezult2 -если X>Y je Rezult3 -если X=Y pop eax но тут получается только ИЛИ к тому же встает вопрос как доставить из стека eax в случае ELSE (когда условие не выполняется)
  4. там нет таких явных параметров кроме координат... остальные не отображаются или высчитываюстя динамически. А имя как понять? название модели? в структуре не нашел ничего подобного...
  5. в общем смысл понятен. однако когда я вешаю на fstp qword ptr [edi+18] поиск адресов по доступу, получаю кучу мусора, при этом значения нельзя изменить... Тоесть с примерно одинаковой координатой Y (тип double) вижу много адресов как своих так и ботов, и не знаю какие правильные (какие нужно сравнивать)
  6. Я правильно понял что идея в том, чтобы поставить бряк "повыше" и начать отладку при этом смотреть значения регистров? но дело в том, что кусок кода что я привел является своего рода буфером, через него проходят все игроки. Тоесть если я поставлю бряк, то я буду смотреть только какого-то конкретного игрока в данном текущем цикле. В этом случае, чтобы определить где ID мне нужно просмотреть всех игроков, при этом найти некое условие с этим самым ID, при этом я даже не знаю что оно из себя представляет...
  7. А как просматривать регистры в отладчике СЕ? я вобще пробовал как написано тут http://forum.gamehac...ока-id-players/ (однако в моем случае у каждого игрока должен быть свой ID тк у кажного свои координаты) так же пробовал НОПить команды типа cmp находящиеся выше
  8. Здравствуйте, нашел не мало информации по поиску ИД, но все равно что-то не получается. Я нашел некий буфер через который проходят координаты всех игроков. что-то вроде push ebp mov ebp,esp mov esi,[ebp+0C] mov edi,[esi+08] mov ebx,[ebp+08] mov eax,[ebx+08] cmp eax,[edi] // ниже XYZ fld qword ptr [eax+08] fstp qword ptr [edi+08] fld qword ptr [eax+10] fstp qword ptr [edi+10] fld qword ptr [eax+18] fstp qword ptr [edi+18] Мне нужно отделить координаты ботов и свои. Работаю в CheatEngine Пытался анализировать стркутуру, пытался разбираться через отладчик. Ничего похожего на ID не нашел. Подскажите пожалуйста алгоритм действий. Потратил уже много времени, интересно разобраться )
  9. Подскажите пожалуйста, как реализовать такую логику на автоассемблере и тренер-генераторе: кнопка + = прибавляет опред. число в st(0) кнопка - = вычитает Проблема в том, что нужно сделать так чтобы скрипт работал "одну итерацию". Иначе он будет прибавлять значение с частатой "тиканья" игры.
  10. Действительно работает! Спасибо огромное. Правда работает не совсем так - камера игрока сдвигается чуть выше "модели игрока" Осталось только разобраться, как работает код и возможно немного скорректировать ) Я так понимаю DQ преобразует (double)7000 в HEX 8байт далее вынимаем из стека st(0) в edi+18 (некий m32real, я так понимаю это что-то вроде sram) далее что-то читаем из [esi+0C] в ecx далее кладем в стек QWordValue и сразу же вынимае это значение в [edi+18] тоесть получается некий эквивалент mov [edi+18],[QWordValue] // хз так можно вобще? ) и я так понимаю в ecx попадает неверное значение? (точнее не производное от фейкового) Не знаю, корректно ли в этой теме переходить на обсуждение асма и логики скрипта. Извините если что. Пытаюсь разобраться с масмом. Вобщем что хочу получить: Трейнер и две кнопки "+" = прибавляет 1000 " - "= вычетает 1000 соотв. пытался сделать что-то вроде QWordValue: dq (double)1000 cheatByteCode: fadd qword ptr [QWordValue] fstp qword ptr [edi+18] mov ecx,[esi+0C] но разумеется такое не работает, ибо каждую итерацию прибавляется 1000. тоесть мне нужно в асме нужно сделать флаг, выполнить один раз код, уставновить флаг, как то отслеживать "отпускание" кнопки в трейнере и по событию сбрасывать этот флаг.
  11. Вобщем, все скомпилилось, спасибо! но не работает ) Просто ничего не происходит. Я ещё раз нашел нужное значение, сделал скрипт на с помощью автоассамблера, пока без aob И все равно, скрипт просто не работает. (включаю его через таблицу заморозкой) [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here originalcode: fstp qword ptr [edi+18] mov [edi+18],(double)7000.0 mov ecx,[esi+0C] exit: jmp returnhere 01B133C9: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) 01B133C9: fstp qword ptr [edi+18] mov ecx,[esi+0C] //Alt: db DD 5F 18 8B 4E 0C
  12. Tiger Ругался на лейбел, поправил немного скрипт Теперь говорит что не может скомпилировать это mov qword ptr [edi+18],(double)7000.0 Хотя у меня норм компилило такое (double)7000.0 Честно, хз как правильно double в hex переводить. У меня вот что получилось 40BB580000000000, но все равно ругается на данную инструкцию Нет, это координата Z, по сути высота это корпоративная игрушка, без названия В программированиия я не новичек, но с реверсингом второй день пытаюсь разобраться. АСМ знаю на уровне атмеловских контроллеров ) Вполне мог что-то напутать. Голова уже кипит.
  13. fstp qword ptr [edi+18] - найдено по брей поинту на запись. если вручную писать в значение то норм, запускаю скрипт ничего не происходит
  14. Здравствуйте, Использую CE, нахожу нужное значение тип double. Оно в динамической памяти, поэтому пытаюсь найти указатель. Пытался использовать search pointer нашел очень много указателей, но все они отсеялись. Поставил брейк поинт на запись, вот что он нашел пытался делать автоассемблей, по примеру. Тоже ничего не вышло. Пытался использовать ReClass - но он не работает с double и показывает что-то непонятное. Игра написана на смеси c++ и java
×
×
  • Создать...

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

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