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

[CE] Вопрос по Lua:registerSymbol


Archmage

Рекомендуемые сообщения

На вики СЕ функция описана как function registerSymbol(symbolname, address, donotsave OPTIONAL) , где address= CEAddressString or Integer.

Однако, при попытке прописать registerSymbol(key,[AGE.EXE+1C6020]+55120) выдает: "Error....unexpected symbol near '['

Поиском ничего толкового не нашел (сплошные аоб сканы, но никак не адрес)

Вопрос: как присвоить символу значение по адресу со смещением?

 

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

Спойлер

Имеется игра шифрующая значения по меняющемуся при каждом запуске ключу и кручению байт, шифрование убить нельзя - 100% вылет.

Таким веселым образом создал свой тип данных такого вида:


ConvertRoutine:
mov eax,[rcx]
rol eax,0B
xor eax,58FD24A2
ror eax,19
ret

ConvertBackRoutine:
ror ecx,07
xor ecx,58FD24A2
rol ecx,15
mov [r8],ecx
ret

58FD24A2- это меняющееся каждый запуск значение ключа.

запрашивать его из игры - поток ошибок доступа СЕ,  прописывать через ассемблер (registerSymbol()) - не выходит: в таблице как адреса они работают, а в скрипте типа данных уже не воспринимаются.

Пока лазал искал, нашел упоминание, что луа переменные работать будут, но пока работает только прописывать каждый раз руками.

 

 

Ссылка на комментарий
Поделиться на другие сайты

 

3 часа назад, Archmage сказал:

Вопрос: как присвоить символу значение по адресу со смещением?

 

Спойлер

alloc(newmem,$1000)
registersymbol(newmem)
alloc(base, $8)
registersymbol(base)

newmem:

  push eax
  mov eax, "AGE.exe"+1C6020
  mov eax, [eax]
  add eax, 55120
  mov [base], eax
  pop eax

  ConvertRoutine:
  mov eax,[rcx]
  rol eax,0B
  xor eax,[base]
  ror eax,19
  ret

  ConvertBackRoutine:
  ror ecx,07
  xor ecx,[base]
  rol ecx,15
  mov [r8],ecx
  ret

[DISABLE]
unregistersymbol(newmem)
dealloc(newmem)
unregistersymbol(base)
dealloc(base)

 

 

На луа, все примерно так же будет, просто для чтения/записи адресов надо использовать api.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Archmage сказал:

Однако, при попытке прописать registerSymbol(key,[AGE.EXE+1C6020]+55120) выдает: "Error....unexpected symbol near '['

 

key = "Health"
address = getAddress("[AGE.EXE+1C6020]+55120")
registerSymbol(key,address)

 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Archmage сказал:

Ну

Лучше бы разместил в разделе конкретно по игре и соответственно переоформил бы тему.

Потому что скорее всего ты ошибаешься и скрипт можно было реализовать гораздо проще.

4 часа назад, Archmage сказал:

запрашивать его из игры - поток ошибок доступа СЕ

Что-то делаешь не правильно. Лучше бы выложил стандартный СЕ-ный скрипт с Логами.

 

Если вот эту часть скрипта: 

Спойлер

  push eax
  mov eax, "AGE.exe"+1C6020
  mov eax, [eax]
  add eax, 55120
  mov [base], eax
  pop eax

 

который предложил @partoftheworlD, СЕ не скушает, попробуй её по другому переписать:

Спойлер

  push eax
  lea eax,["AGE.exe"+1C6020]
  push [eax+55120]
  pop [base]
  pop eax

 

 

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Garik66 сказал:

скушает, попробуй её по другому переписа

Скушает, я этот же код использовал в теме по получению индекса оружия в кс, только там длл была, вместо exe

  • Смешно 1
Ссылка на комментарий
Поделиться на другие сайты

В 02.12.2018 в 06:21, Garik66 сказал:

Лучше бы разместил в разделе конкретно по игре и соответственно переоформил бы тему.

Потому что скорее всего ты ошибаешься и скрипт можно было реализовать гораздо проще.

Что-то делаешь не правильно. Лучше бы выложил стандартный СЕ-ный скрипт с Логами.

 

Если вот эту часть скрипта: 

  Показать контент


  push eax
  mov eax, "AGE.exe"+1C6020
  mov eax, [eax]
  add eax, 55120
  mov [base], eax
  pop eax

 

который предложил @partoftheworlD, СЕ не скушает, попробуй её по другому переписать:

  Показать контент


  push eax
  lea eax,["AGE.exe"+1C6020]
  push [eax+55120]
  pop [base]
  pop eax

 

 

Спасибо за ответы, но нет не ошибаюсь. Тут вопрос именно не по конкретной игре, а по работе собственного типа данных.

 

И в итоге я узнал в чем проблема.

Тот скрипт что отрабатывает в кастомном типе данных выполняется не в игре, а в самом cheat engine.

 

То есть нужно не просто прописать переменную в луа или в ассемблере, а именно передать ее в чит энджин, вот в чем была проблема.

Цитата

combine it with a lua script that sets the key value (in ce"s memory,not the game's) when the process gets opened

Собственно вот, что в итоге нужно. Сначала не разобрался лазая по поиску (английский не так уж хорошо знаю, а на вики про это ни  слова)

Если кому не сложно, можете подсказать, как это сделать?, потому как в LUA не понимаю от слова совсем)  (Заодно было бы здорово сделать это в виде в котором можно добавить в Help File:Custom type examples, ну это уже идеал...)

 

Полностью  custom type выглядит вот так: (и на всякий случай - пока переменная ключа указана вручную циферками все работает как часы)

Спойлер

alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
alloc(CallMethod,1)

TypeName:
db 'AGE.exe',0
ByteSize:
dd 4
UsesFloat:
db 0
CallMethod:
db 1

ConvertRoutine:
mov eax,[rcx]
rol eax,0B
xor eax,34C51485 // вот тут нужно переменную
ror eax,19
ret

ConvertBackRoutine:
ror ecx,07
xor ecx,34C51485  // вот тут нужно переменную
rol ecx,15
mov [r8],ecx
ret

 

Если у кого, так же как и у меня возникнет светлая мысль просто убить/изменить сам ключ - это не работает, игра шифрует все подряд (в ходе экспериментов либо вылет, либо запуск но даже не видно пунктов стартового меню, а при нажатии на место где они должны быть - вылет)

Изменено пользователем Xipho
Большие куски кода нужно убирать под спойлер.
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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