eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: zds, SDK (+7 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Не получается добавить кусок кода через Cheat Engine
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 6.2 (гость)
Статус: Участник

Создано: 12 августа 2019 01:11 · Поправил: Simcher New!
Цитата · Личное сообщение · #1

Хочу добавить недостающего когда, сделал скрипт в Cheat Engine, прошу подсказать, что не так, видеоуроки смотрел, но не особо понял.

Code:
  1. aobscanmodule(INJECT,ArenaOnline3D.bin,8B CC 89 64 24 20 68 EC 4E)
  2. alloc(newmem,$1000)
  3.  
  4. label(code)
  5. label(return)
  6.  
  7. newmem:
  8.  
  9.        mov ecx,esp
  10.        mov [esp+20],esp
  11.        push +35E47C
  12.        call dword ptr [0074E250]
  13.        mov ecx,esi
  14.        call 005DB240
  15.        sub esp,1C
  16.        mov ecx,esp
  17.        mov [esp+20],esp
  18. code:
  19.   mov ecx,esp
  20.   mov [esp+20],esp
  21.   jmp return
  22.  
  23. INJECT:
  24.   jmp newmem
  25.   nop
  26. return:
  27. registersymbol(INJECT)
  28.  
  29. [DISABLE]
  30.  
  31. INJECT:
  32.   db 8B CC 89 64 24 20
  33.  
  34. unregistersymbol(INJECT)
  35. dealloc(newmem)


Добавлено спустя 6 минут
Мне нужно добавить в эту функцию ещё один такой же блок, который выделен на скрине.



Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 12 августа 2019 09:42 New!
Цитата · Личное сообщение · #2

идея понятна, но так недолго и стэк сорвать.
да и блоки кода выделены неправильно - начинается всё с sub esp, 1C
резервируется пространство под класс, потом из статичной строки создаётся динамический объект
значит, надо в своём коде выделить такое пространство

Code:
  1. INJECT:
  2.   jmp code
  3.   nop
  4. return:
  5.  
  6. newmem:
  7. string_object:
  8.   dd 0, 0, 0, 0, 0, 0, 0, 0
  9.  
  10. code:
  11.   lea ecx, [string_object]
  12.   push нужная_строка  //+35E47C
  13.   call dword ptr [0074E250]
  14.    mov ecx,esi
  15.    call 005DB240
  16.  
  17.   mov ecx,esp
  18.   mov [esp+20],esp
  19.   jmp return

| Сообщение посчитали полезным: Simcher


Ранг: 6.2 (гость)
Статус: Участник

Создано: 12 августа 2019 11:52 New!
Цитата · Личное сообщение · #3

-=AkaBOSS=- пишет:
Сделал такой скрипт - получил вылет, что не так вставил?
Code:
  1. [ENABLE]
  2.  
  3. aobscanmodule(INJECT,ArenaOnline3D.bin,8B CC 89 64 24 20 68 EC 4E)
  4. alloc(newmem,$1000)
  5.  
  6. label(code)
  7. label(return)
  8.  
  9. newmem:
  10. string_object:
  11.   dd 0, 0, 0, 0, 0, 0, 0, 0
  12.  
  13. code:
  14.   lea ecx, [string_object]
  15.   push +35E47C
  16.   call dword ptr [0074E250]
  17.    mov ecx,esi
  18.    call 005DB240
  19.  
  20.   mov ecx,esp
  21.   mov [esp+20],esp
  22.   jmp return
  23.  
  24. INJECT:
  25.   jmp code
  26.   nop
  27. return:
  28. registersymbol(INJECT)
  29.  
  30. [DISABLE]
  31.  
  32. INJECT:
  33.   db 8B CC 89 64 24 20
  34.  
  35. unregistersymbol(INJECT)
  36. dealloc(newmem)


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 12 августа 2019 12:06 · Поправил: -=AkaBOSS=- New!
Цитата · Личное сообщение · #4

Simcher пишет:
push +35E47C

ну как вариант - что это за число?
если относительное смещение, тогда надо указать в каком модуле. или прибавить базу вручную.

В читэнжине есть отладчик. Надо посмотреть, правильно ли ассемблер собрал код, нормально ли отрабатывает инжект. На каком этапе краш - внутри инжекта или после него. Да и без прототипов вызываемых функций нельзя наверняка сказать какие будут последствия вмешательства.

Ранг: 6.2 (гость)
Статус: Участник

Создано: 12 августа 2019 12:45 New!
Цитата · Личное сообщение · #5

Вот там каждый блок это 1 предмет шмота у персонажа, 35E47C это сумка, эти адреса всегда на одном месте и в IDA pro они не меняются.

Добавлено спустя 1 минуту
А когда пытаюсь Ваш код отдельно использовать пишет - Not all instructions could be injected


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 12 августа 2019 13:05 New!
Цитата · Личное сообщение · #6

Simcher пишет:
эти адреса всегда на одном месте и в IDA pro они не меняются

по скринам видно, что остальные строки грузятся с адресов 0x7***** ("ArenaOnline3D.bin"+3*****), потому я и спрашиваю, точно ли там всё правильно. Проверяйте внимательнее.

Ранг: 6.2 (гость)
Статус: Участник

Создано: 12 августа 2019 14:50 New!
Цитата · Личное сообщение · #7

Также вылет, вот скрипты
Code:
  1. [ENABLE]
  2.  
  3. aobscanmodule(INJECT,ArenaOnline3D.bin,8B CC 89 64 24 20 68 EC 4E)
  4. alloc(newmem,$1000)
  5.  
  6. label(code)
  7. label(return)
  8.  
  9. newmem:
  10. string_object:
  11.   dd 0, 0, 0, 0, 0, 0, 0, 0
  12.  
  13. code:
  14.   lea ecx, [string_object]
  15.   push ArenaOnline3D.bin+35E47C
  16.   call dword ptr [0074E250]
  17.    mov ecx,esi
  18.    call 005DB240
  19.  
  20.   mov ecx,esp
  21.   mov [esp+20],esp
  22.   jmp return
  23.  
  24. INJECT:
  25.   jmp code
  26.   nop
  27. return:
  28. registersymbol(INJECT)
  29.  
  30. [DISABLE]
  31.  
  32. INJECT:
  33.   db 8B CC 89 64 24 20
  34.  
  35. unregistersymbol(INJECT)
  36. dealloc(newmem)


и чисто Ваш скрипт

Code:
  1. INJECT:
  2.   jmp code
  3.   nop
  4. return:
  5.  
  6. newmem:
  7. string_object:
  8.   dd 0, 0, 0, 0, 0, 0, 0, 0
  9.  
  10. code:
  11.   lea ecx, [string_object]
  12.   push 0075E47C
  13.   call dword ptr [0074E250]
  14.    mov ecx,esi
  15.    call 005DB240
  16.  
  17.   mov ecx,esp
  18.   mov [esp+20],esp
  19.   jmp return


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 12 августа 2019 15:05 New!
Цитата · Личное сообщение · #8

Simcher пишет:
и чисто Ваш скрипт

чисто мой скрипт - это набросок того что в целом нужно сделать. сам по себе он не сработает, и это нормально.

нужно больше инфы. то что произошёл крэш это не инфа - это ситуация.
как насчёт:
-=AkaBOSS=- пишет:
В читэнжине есть отладчик. Надо посмотреть, правильно ли ассемблер собрал код, нормально ли отрабатывает инжект. На каком этапе краш - внутри инжекта или после него.


поставить бряк перед точкой инжекта, брякнуться там, включить инжект, продебажить где упадёт (в частности интересно - упадёт в коде скрипта или после него)

Ранг: -25.9 (нарушитель)
Статус: Участник

Создано: 12 августа 2019 19:00 New!
Цитата · Личное сообщение · #9

У меня попутный вопрос к людям которые используют Cheat Engine в своей практике. Есть ли у Cheat Engine какие-либо преимущества по отношению к другим отладчикам? Ну или бывают ли какие-либо ситуации или обстоятельства, где использование Cheat Engine более предпочтительнее? Если, например, человек знает windbg, x64 dbg и знаком с отладчиками в Иде, имеет ли смысл разбираться и изучать Cheat Engine или это будет уже избыточная информация, которая будет дублироваться в других отладчиках, которые перечислены выше?

Ранг: 24.1 (новичок)
Статус: Участник

Создано: 12 августа 2019 19:26 New!
Цитата · Личное сообщение · #10

sty пишет:
Ну или бывают ли какие-либо ситуации или обстоятельства, где использование Cheat Engine более предпочтительнее?

Написать скрипт-трейнер для игрушки и отдать его пользователям? В windbg навряд ли такое получится

Ранг: 134.3 (ветеран)
Статус: Участник

Создано: 12 августа 2019 19:46 · Поправил: VOLKOFF New!
Цитата · Личное сообщение · #11

sty пишет:
Есть ли у Cheat Engine какие-либо преимущества по отношению к другим отладчикам?


CE это хороший memscanner, как отладчик это к сожалению уг, ибо данный функционал чисто номинально присутствует и нужен для полноты раскрытия основных инструментов. В редких случаях можно написать скрипт который будет быстрее\удобнее давать результат по сравнению с полноценными отладчиками в силу заточенности CE, но эти случаи реально редки. Есть еще плюшки которые давали бы преимущества, но они не работают на AMD камнях от слова совсем...
Я считаю CE действительно достойным инструментом и периодически его использую, но для прямого назначения - поиск\отслеживание динамики памяти, поиск указателей, реконструкция классов.

Для разнообразия можешь глянуть cosmos advanced, аналог CE со своими плюшками, вроде его уже допилили до юзабительного состояния...

Если нужна нормальная отладка - берешь нормальный отладчик и цепляешь CE к отлаживаемому процессу, благо он никак не конфликтует и ты получаешь два в одном.

| Сообщение посчитали полезным: sty, bizkitlimp


Ранг: -25.9 (нарушитель)
Статус: Участник

Создано: 12 августа 2019 20:50 New!
Цитата · Личное сообщение · #12

Спасибо за ответы. Вопрос, который озвучен выше из серии: слышал звон... просто часто попадалась информация, что на базе Cheat Engine пишут какие-то инжекты и, вроде бы, расширяют за счет них функционал игр (программ). И еще попадалась инфа, что в Cheat Engine реализован чуть ли не самый лучший алгоритм поиска в памяти. Что касается памяти, то информация из поста VOLKOFF, еще одно тому подтверждение.

P.S. Извиняюсь за занудство, но хотел еще кое-что уточнить, чтобы уж окончательно упорядочить у себя мысли относительно Cheat Engine . Вот если, скажем, у меня есть ехе-файл со старой программой (без исходников) и я хочу немного расширить функционал (добавить в меню пару каких-нибудь новых элементов/функций). Будет ли у Cheat Engine в такой ситуации преимущество или нет?


Ранг: 316.4 (мудрец)
Статус: Участник

Создано: 12 августа 2019 22:41 New!
Цитата · Личное сообщение · #13

> в Cheat Engine реализован чуть ли не самый лучший алгоритм поиска в памяти.

Какой есчо алгоритм, вот и весь поиск:

Code:
  1. function TGroupData.ByteScan(value: byte; buf: Pbytearray; var startoffset: integer): boolean;
  2. var i: integer;
  3. begin
  4.   result:=false;
  5.   for i:=startoffset to blocksize-1 do
  6.     if buf[i]=value then
  7.     begin
  8.       startoffset:=i+1;
  9.       result:=true;
  10.       exit;
  11.     end;
  12. end;


--> Link <--

Конечно там есчо тонна подобных примитивов разного назначения.

И по факту это не поиск, а примитивное уг, на дельфях другое и не пишут. Если таким сканом пройти по всей юзер памяти, то вся эта память будет закреплена в рабочем наборе. Это значит что нужно выделить очень много памяти, а это затратно и долго. Как минимум нужно определить рабочий набор и по нему сканить. А есчо это нужно делать синхронно и не без костылей.

Ранг: -25.9 (нарушитель)
Статус: Участник

Создано: 12 августа 2019 23:58 New!
Цитата · Личное сообщение · #14

difexacaw пишет:
Какой есчо алгоритм, вот и весь поиск:


difexacaw, а вдруг вы ошибаетесь по поводу примитивного сканера памяти в Cheat Engine? Как минимум два достаточно авторитетных человека на нашем форуме хорошо отзывались или предлагали воспользоваться Cheat Engine, именно при работе с памятью. Один из них это VOLKOFF, а второй SegFault.


Ранг: 316.4 (мудрец)
Статус: Участник

Создано: 12 августа 2019 23:59 New!
Цитата · Личное сообщение · #15

sty

Как я могу ошибаться, если выше прямой линк на сурец

Ранг: 134.3 (ветеран)
Статус: Участник

Создано: 13 августа 2019 00:29 New!
Цитата · Личное сообщение · #16

Инде, не шатай психику человеку
Все там прямо запилено.

Ранг: -25.9 (нарушитель)
Статус: Участник

Создано: 13 августа 2019 00:30 New!
Цитата · Личное сообщение · #17

difexacaw пишет:
Как я могу ошибаться, если выше прямой линк на сурец


Черт знает, может и есть доля истины в вашем утверждении, если вы хорошо разбираетесь в коде, который должен сканировать память. А какой тогда по вашему есть хороший инструмент, которым бы можно было отслеживать изменения в памяти?


Ранг: 539.6 (!)
Статус: Участник
оптимист

Создано: 13 августа 2019 00:34 New!
Цитата · Личное сообщение · #18

difexacaw пишет:
И по факту это не поиск, а примитивное уг, на дельфях другое и не пишут

да да на делфях пишут только дауны тру хекеры пишут на сиськах,
sty пишет:
и я хочу немного расширить функционал (добавить в меню пару каких-нибудь новых элементов/функций). Будет ли у Cheat Engine в такой ситуации преимущество или нет?

Cheat Engine тут в основном для хака памяти( поиск констант), для твоего случая лучше написать отдельную Dll и загружать её вместе с программой, для исследования программы лучше всего использовать --> Link <-- есть туториалы --> Link <--

| Сообщение посчитали полезным: sty


Ранг: 6.2 (гость)
Статус: Участник

Создано: 13 августа 2019 00:49 New!
Цитата · Личное сообщение · #19

Слушайте, а может проще пропатчить, т.е добавить кусок кода в эту функцию, но как это сделать и не будет ли краша?
Отдельно по теме: суть в том, что в игре есть панели информации о себе и информации о выбранном чужом персонаже.
Но отображение надетой сумки есть только в первой. Так вот я хочу патч сделать или скрипт для игроков, чтобы они видели сумки остальных, потому что это не предусмотрено игрой(видимо забыли или поленились)

Ранг: -25.9 (нарушитель)
Статус: Участник

Создано: 13 августа 2019 01:04 New!
Цитата · Личное сообщение · #20

ClockMan пишет:
Cheat Engine тут в основном для хака памяти( поиск констант), для твоего случая лучше написать отдельную Dll и загружать её вместе с программой


ClockMan, спасибо за отзывчивость. То что расширить функционал программы можно (а может и нужно) без всяких отладчиков, это я знаю. Поди не в первый раз общаюсь с difexacaw . Тут я именно для себя решил выяснить все способности Cheat Engine. Думал, что с помощью Cheat Engine есть какие-то более легкие способы решения одних и тех же вещей. Есть же специальный сайт по хаку игр, так там буквально молятся на Cheat Engine и если верить им на слово, то с помощью Cheat Engine, разве что, только в космос нельзя улететь . Вот я и заинтересовался. Мануал, если я не ошибаюсь, у Cheat Engine слабоватый. Я там даже о том как сделать трассировку ничего не нашел. Вполне возможно, что плохо искал. Опять же штудировать мануал, чтобы убедиться, что этот инструмент тебе не нужен - то еще удовольствие.

Ранг: 134.3 (ветеран)
Статус: Участник

Создано: 13 августа 2019 01:30 · Поправил: VOLKOFF New!
Цитата · Личное сообщение · #21

sty пишет:
есть какие-то более легкие способы решения

безусловно есть и для целей сабжа обычного скрипта должно хватить, вот только чтобы его написать нужно точно знать какой код и куда (и как) внедрять и вот тут мы ненавязчиво возвращаемся к теме отладки...

CE безусловно покрывает большинство нужд по играм, но как уже говорил, некоторые казалось бы простые моменты из-за определенных особенностей движка могут превратиться в танец с саблями на граблях и "в космос" вам придется не лететь а подниматься по лестнице на костылях (хотя в итоге можно будет и дойти).


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 13 августа 2019 02:18 New!
Цитата · Личное сообщение · #22

Simcher пишет:

Слушайте, а может проще пропатчить, т.е добавить кусок кода в эту функцию, но как это сделать и не будет ли краша?

если крашится инжект, то с большой вероятностью и патч тоже будет.

Simcher пишет:
я хочу патч сделать или скрипт для игроков, чтобы они видели сумки остальных, потому что это не предусмотрено игрой

И Вы наивно полагаете, что в клиенте игры есть функционал, отдающий данные инвентаря других игроков, осталось только кнопку в меню добавить?)))
Саму игру я не смотрел, но маловероятно что разработчики настолько глупы, чтобы передавать клиенту такие данные.

Добавлено спустя 7 минут
sty пишет:
даже о том как сделать трассировку ничего не нашел

Читэнжин - это не инструмент для отладки.
Он больше для поиска значений, отслеживания изменений этих значений, разбора и сравнения структур.
Ну и, разумеется, для внедрения своих хуков в интересные места наживую, без патчей и лоадеров

| Сообщение посчитали полезным: sty


Ранг: 6.2 (гость)
Статус: Участник

Создано: 13 августа 2019 07:55 New!
Цитата · Личное сообщение · #23

Вы не поняли, мне нужно просто показывать надетую сумку, а не её содержимое.
Работоспособность проверял, заменяя в push'e адрес belt на адрес backpack и все работало, но проблема в том, что тогда пояса не будет.
Может кто знает как пропатчить?Или какая-нибудь статья с подобной штукой есть?


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 13 августа 2019 09:36 · Поправил: -=AkaBOSS=- New!
Цитата · Личное сообщение · #24

ок, идею понял.
вечерком качну поиграюсь

к следующему посту
bartolomeo пишет:
ну в Диабло 2 в мапхаке C3PO - был такой функционал

Ну дык между ней и современной игрой сколько? Без пяти минут 20 лет прошло.
Одно дело заря сетевых игр и читохакинга, и совсем другое сейчас - когда человек почти без опыта может насмотреться видеогайдов и слепить свой хак. За глупые ошибки разрабов быстро наказывают.

Ранг: 36.5 (посетитель)
Статус: Участник

Создано: 13 августа 2019 10:02 New!
Цитата · Личное сообщение · #25

-=AkaBOSS=- пишет:
И Вы наивно полагаете, что в клиенте игры есть функционал, отдающий данные инвентаря других игроков, осталось только кнопку в меню добавить?)))

ну в Диабло 2 в мапхаке C3PO - был такой функционал


Ранг: 149.7 (ветеран)
Статус: Участник

Создано: 14 августа 2019 07:04 New!
Цитата · Личное сообщение · #26

в общем говоря, проблема примерно понятна


правильный (в плане корректности кода) скрипт должен выглядеть так
но нужны доработки другого плана
Code:
  1. aobscanmodule(INJECT,"ArenaOnline3D.bin",8B CC 89 64 24 20 68 EC 4E)
  2.  
  3. [enable]
  4. alloc(hack_mem,$1000)
  5.  
  6.   INJECT:
  7.     jmp hook1
  8.       nop
  9.   return1:
  10.  
  11. hack_mem:
  12. hook1:
  13.   mov ecx,esp
  14.   mov [esp+20],esp
  15.   push "ArenaOnline3D.bin"+35E47C
  16.   call dword ptr [0074E250]
  17.   mov ecx,esi
  18.   call 005DB240
  19.  
  20.   sub esp, 1C
  21.   mov ecx,esp
  22.   mov [esp+20],esp
  23.   jmp return1
  24.  
  25.  
  26. [disable]
  27.  
  28. INJECT:
  29.   db 8B CC 89 64 24 20
  30.  
  31. dealloc(hack_mem)




Simcher пишет:
Работоспособность проверял, заменяя в push'e адрес belt на адрес backpack и все работало

не работает это - тоже крашится.
причина - в гуе не прописан слот для отображения сумки
сравниваем файлы data\interface\char_info.xml и data\interface\enemy_info.xml
в первом (просмотр инфы о персонаже) есть слот equip_item_backpack
во втором (просмотр инфы о ком-либо через правый клик) - слота нет, отображать некуда.
Скопируйте строчку из одного файла в другой - крашиться перестанет.

Остальные детали вроде "а отдаёт ли сервер инфу о наличии сумки у других игроков" у меня проверять нет времени.

Добавлено спустя 33 минуты
Мысля вдогонку:
Адрес для инжекта ищется через aobscan - это хорошо, чтобы не заморачиваться при выходе новой версии игры. Но остальные адреса в скрипте вписаны статично. Это надо пофиксить - для функций использовать их символьные имена, а адрес строки надо тоже искать через aobscan

| Сообщение посчитали полезным: Simcher


Ранг: 6.2 (гость)
Статус: Участник

Создано: 14 августа 2019 12:23 New!
Цитата · Личное сообщение · #27

Спасибо Вам!
Извиняюсь, забыл добавить, что у меня в енеми инфо уже было это сделано, по-этому при замене оффсета пояса на сумку не крашилось приложение.

Добавлено спустя 3 часа 36 минут
А не подскажите как пропатчить теперь, имея этот скрипт?

Добавлено спустя 6 часов 4 минуты
Патч получилось сделать, записав в cave нужный код и сделав прыжок в нужных местах.
Вопрос, как сделать, чтобы не было небольшой задержки, когда открываются слоты?
Может записать код чуть ближе к нужному месту?Или это будет всегда из-за прыжка?

Ранг: 24.1 (новичок)
Статус: Участник

Создано: 14 августа 2019 19:25 New!
Цитата · Личное сообщение · #28

Simcher пишет:
Может записать код чуть ближе к нужному месту?Или это будет всегда из-за прыжка?

прыжок очень быстра операция, задержки не из-за этого

Ранг: 6.2 (гость)
Статус: Участник

Создано: 14 августа 2019 20:05 New!
Цитата · Личное сообщение · #29

А по какой причине она может возникать?
Она занимает где-то 20 мс, но в некоторых моментах может быть не очень приятной

Ранг: 24.1 (новичок)
Статус: Участник

Создано: 14 августа 2019 20:38 New!
Цитата · Личное сообщение · #30

добавилось отображение нового предмета, вполне возможно, что игра перед отображением инфы по этому предмету подгружает какие-то дополнительные данные, что и вызывает задержки
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Не получается добавить кусок кода через Cheat Engine

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS