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

tirion

Пользователи
  • Постов

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

  • Посещение

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

  1. tirion

    Авто отладка

    Здравствуйте . В какой то из версий СЕ была возможность заставить автоматически степать инструкции(имитация зажатой клавиши F8). Не подскажите в какой?
  2. Здравствуйте. Подскажите пожалуйста есть ли возможность в СЕ удобно просматривать IAT ? Если да, то как? (Опечатался в названии темы, прошу прощения)
  3. Доброго времени суток Друзья! Не подкинете ли какую-либо статейку где можно почитать о синтаксисе bms скриптов? Похоже это единственный официальный сайт http://aluigi.altervista.org/quickbms.htm, но здесь ничего толкового не написано
  4. Всем доброго времени суток! Подскажите пожалуйста как задать скорость трассировки инструкций по зажатию клавиши F8, раньше пробегали достаточно быстро, а щас что-то случилось..
  5. да и без слип пробовал, но без интервала логично что игра рухнет
  6. Это очень странно.. при таком зацикливании функции отрабатывают в течение 5сек и затем игра вылетает. Но если вручную быстро кликать Enable Disable, то все нормально. Поэтому, думаю, тут дело не в таймере
  7. отчасти да. Эксперты, подскажите, это корректное зацикливание потока? [ENABLE]alloc(newmem,4096)CREATETHREAD(newmem);label(flag)registersymbol(flag)newmem:push 00mov ecx,023FB090call 0x00393A20mov ecx,eaxcall 0x00366100{$lua}sleep(1000){$asm}cmp [flag],0jne newmemretflag:db 1[DISABLE]unregistersymbol(flag)dealloc(newmem)
  8. Спасибо вам ребят. Автору топика, думаю, будет о чем поразмышлять
  9. Да, моя теория подтвердилась. Вызвал эти подфункции отдельно, теперь не критует. По всей видимости указатель стека смещался и прыгал не туда
  10. [ENABLE]alloc(newmem,2048)CREATETHREAD(newmem)newmem:call 0x003016B0ret[DISABLE]dealloc(newmem)
  11. прочитал, к сожалению ничего нового не узнал.. Тоже интересен момент, как именно сделать удаленный поток средствами Cheat Engine. Щас буду искать статьи от Dark Byte А у тебя тоже вылет происходит?
  12. Испохабить, значит функция запишет в них другое значение и последующие выполнение кода уже будет считывать эти значения В общем вызываю функцию так (аргументы не принимает) alloc(newmem,2048)CREATETHREAD(newmem)newmem:call 0x003016B0retполучаю вылет Вызываю вот так(по срабатыванию инструкции)[ENABLE]alloc(newmem,2048)label(returnhere)newmem:mov [ecx+00000080],00000000call 0x003016B0jmp returnhere0042FCDC9:jmp newmemnopnopnopnopnopreturnhere:[DISABLE]dealloc(newmem)0042FCDC9:mov [ecx+00000080],00000000все отлично
  13. Почитал я статью, но все равно не пойму, как эти потоки работают. Ну работают они параллельно с нашим кодом(на сколько я понял). Но какова вероятность, что этот самый поток вызова функции испохабит нам все регистры, из - за чего игра просто вылетет
  14. Т.е по сути у нас тут никого оригинального кода, а лишь одиночный вызов функции?
  15. keng, объясни пожалуйста чем CREATETHREAD(mycode); в данном случае будет отличается от label(mycode); ? и почему в конце стоит RET? Ведь у той функции, которую вызываем уже есть свой RET и соответственно по ее завершению она перейдет на наш RET в инъекции кода, Но куда он нас выкинет? Разве не должно ли там стоять что-то типа jmp return, где return адрес возврата в оригинальный код
  16. О на этом спасибо, думаю будет более эффективно нежели ставить на хп
  17. В принципе я это понимаю, но все равно спасибо. А вообще хотелось бы понять, как взаимодействует нажатие клавиш с памятью игры. Правильное ли это рассуждение? "При нажатии кнопки, сама игра перехватывает функцию нажатия клавиши, а затем активирует какой-либо флаг, и этот флаг передается в функцию передвижения в качестве аргумента, мол "все ОК, идти разрешаю"" А вот допустим я хочу найти функцию атаки. Если я поставлю бряк на хп противника, выведит ли он меня на функцию атаки?
  18. Ребят, подскажите пожалуйста каким наиболее удобным способом можно искать внутриигровые функции? Допустим как найти функцию передвижения персонажа? А именно в игре мы нажимаем кнопку "w", тем самым заставляя игрока двигаться. Суть в том чтобы заставить персонажа аналогично передвигаться, но при этом, нажимая кнопку из своей программы. Пожалуйста, не надо предлагать использовать WinApi хуки, для меня это как темный лес. Хотелось бы все это провернуть на уровне памяти, либо за счет передачи своих аргументов в функцию. Я полагаю при нажатии кнопки, сама игра перехватывает функцию нажатия клавиши, а затем активирует какой-либо флаг, и этот флаг передается в функцию передвижения в качестве аргумента, мол "все ОК, идти разрешаю", если это даже и так, то я ума не приложу, каким образом его искать с помощью Cheat Engine...
  19. Всем спасибо! Вроде бы понял разницу между внедрением кода и удаленным потоком. Удаленный поток вызывается по требованию пользователя, т.е он не вешается ни на какую инструкцию и не ожидает ее выполнения, именно поэтому нужно обязательно передавать функции все ее аргументы
  20. Но, как тогда объянить восстановление регистров после возврата на оригинальную функцию с данными аргументами? Ведь опдкод popad никогда не выполнится да, ты совершенно прав, автор использует данный прием hProcThread = CreateRemoteThread(hProc,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,pParams,NULL,NULL); Это означает что в удаленном потоке не используется никаких джампов ретурнов, вычислений размеров инъекции? И чтобы пролить лучик ясности нужно детально изучить эту CreateRemoteThread функцию?
  21. Ребята, прошу прощения, но это выше моих сил. Я думал, задав наводящие вопросы, это позволит мне ближе подойти к разрешению моего основого вопроса, но увы нет. Задам вопрос прямо. Этот кусок кода взят из исходника трейнера. Грубо говоря эта функция вытащена из отладчика и переделана на свой лад, НО не могу понять каким образом она вызывается, а именно подменяет оригинальную функцию, тк тут нет никаких джампов и ретурнов, а самое главное вычисления размера. Я предполагаю что она записывается в свободную область памяти при помощи функции VirtualAllocEx, но каким образом она подменяет оригинальную? У меня была мысль, что на этом месте - call edx она возвращается в оригинальный код, но почему тогда после опкода call edx идет восстановление регистров, ведь он никогда не выполнится по сути. void __stdcall Attack_THREAD() { __asm{pushadmov edx,0x0044FE60 // адрес вызываемой функцииmov ecx,dword ptr ds:[BA]mov ecx,dword ptr ds:[ecx+0x1C]mov ecx,dword ptr ds:[ecx+0x20] // структуру игрока пихаем в ecxpush -1 // понятия не имею, что это за параметрыpush 0 // они просто взяты из OllyDbgpush 0push 0call edxpopad}}NullAlex: код необходимо обрамлять соответствующим тегом.
  22. keng, я понял тебя, но уж больно трудно скомпоновать все это в единую мысль
×
×
  • Создать...

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

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