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

[CE] Вопрос по возврату значения в [DISABLE]


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

Только что, Garik66 сказал:

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

 

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

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

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

1 минуту назад, Alex2411 сказал:

 

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

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

Но то. что вы творите в скрипте - у меня на лоб глаза лезут.
Выделяете где-то память. Ею не пользуетесь. туда ничего не записываете и потом пытаетесь оттуда прочитать что-то ссылаясь на другое место.
Посмотрите свой скрипт повнимательнее.

 

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

10 минут назад, Garik66 сказал:

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

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

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

1 минуту назад, FENIX145 сказал:

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

Ну тогда включай голову.
И посмотри мой видос 

Спойлер

 

может поможет - как и где сохранить, и что нужно прочитать (readmem)

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

Только что, Garik66 сказал:

может поможет - как и где сохранить, и что нужно прочитать (readmem)

ок, спасибо, гляну, но с головой вроде проблем нет. Если человек чего-то не знает, это не значит что у него "выключена" голова ;) 

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

22 минуты назад, Garik66 сказал:

Посмотрите свой скрипт повнимательнее.

 

  не понял . где я в  своем скрипте  выделял пмять и не пользуюсь ? ты не чего не путаешь ?

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

@Alex2411 перепробовал все варианты с readmem но так и не получилось завести, написал на офф сайте, может дарк байт поможет, ошибки на которые ты указал - я поправил, но не знаю как завести скрипт. Он просто не хочет запускаться. Возможно как написала @imaginary придется реализовать это на lua. Но я с lua не знаком от слова совсем, так что придется еще помучиться. Обидно просто весь день потратить так ничего и не добившись. А использовать вариант с флагами - вообще не хочется. Получается что при деактивации скрипта, забыв перевести флаг в 0 состояние к примеру, мы получим то же самое перманентное изменение, чего очень бы не хотелось. В общем грусть, печаль...

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

36 минут назад, FENIX145 сказал:

А использовать вариант с флагами - вообще не хочется. Получается что при деактивации скрипта, забыв перевести флаг в 0 состояние к примеру, мы получим то же самое перманентное изменение, чего очень бы не хотелось.

 

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

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

10 минут назад, Alex2411 сказал:

что бы автоматом  возвращало оригинал  когда отключаеться скрипт

да, я обычно так же делаю, но штука в том что значение статическое и не меняется нигде, в этом то и проблема. Это минимальный, максимальный дамаг оружия... и оно не изменяется. По этому и сижу парюсь. Был бы менее ответственный - установил вон перманентную максималку, а дальше как хочешь :D Но ведь для себя делаю и хочется по-человечески сделать, может из друзей кто будет использовать. В любом случае надо на совесть сделать. Сейчас с Dark Byte`ом общаюсь, может он что подскажет.

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

Только что, FENIX145 сказал:

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

 

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

 

кстати у тебя в скрипте

alloc(newmem,$1000,SUPER_WPN)
alloc(original_struct,4096)

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

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

3 минуты назад, Alex2411 сказал:

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

я уже чего только не указывал, уже 300 раз этот скрипт переписал, но бестолку, дарк байт задал единственный вопрос и пока пропал "are all 4096 bytes starting from the address of STORED_ADDR readable ?"

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

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

5 минут назад, FENIX145 сказал:

я если честно даже не совсем понимаю его вопрос

 

ты выделяешь  для SAVED_ADDR  размер 8 байт dq 0 , а читаешь память  от этого адреса   в readmem размер  4096 . после  этих 8 байт ты знаешь  что у тебя находиться  в памяти куда обращаеться readmem ?

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

7 минут назад, Alex2411 сказал:

после  этих 8 байт ты знаешь  что у тебя находиться  в памяти куда обращаеться readmem ?

понятия не имею, даже не знаю как узнать :( По логике, там находиться моя структура из RDI и она вся readable. На сколько я могу судить.... Но к сожалению я понятия не имею как посмотреть что храниться в SAVED_ADDR  после заполнения

PS. Может в дискорд переберемся?

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

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

 

mov [SAVED_ADDR],rdi

 

а потом 

 

original_struct:

readmem(SAVED_ADDR,4096)

 

или наоборот . если  сначала  сработает  readmem  то получаеться  он будет пытаться читать  из пустого  адреса . тогда  будет ошибка .

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

4 минуты назад, FENIX145 сказал:

понятия не имею, даже не знаю как узнать

 

поставь для проверки  вместо  4096 число 8 . тогда размер будет одинаковый и память точно будет  читаемая .

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

1 минуту назад, Alex2411 сказал:

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

Спойлер

[ENABLE]

aobscanregion(SUPER_WPN, BoardHUD:Invalidate+615, BoardHUD:Invalidate+666, 48 8B 41 78 48 63 89 10 01 00 00) // should be unique
alloc(newmem,$1000,SUPER_WPN)
alloc(storedValue,4096)

label(code)
label(return)
registersymbol(SUPER_WPN)
registersymbol(STORED_ADDR)
registersymbol(storedValue)

newmem:
  push rbx
  push rdi
  mov rbx,[rcx+78]
  mov rdi,[rbx+20]
  test rdi,rdi
  jz @F
  mov [STORED_ADDR+8],rdi
  mov [rdi+50],#1
  mov [rdi+78],#1
  mov [rdi+a0],#1
  mov [rdi+13c],#9999
  mov [rdi+140],#9999
@@:
  pop rdi
  pop rbx
code:
  mov rax,[rcx+78]
  movsxd rcx,dword ptr [rcx+00000110]
  jmp return

STORED_ADDR:
  dq 0
storedValue:
  readmem(STORED_ADDR,4096)

SUPER_WPN:
  jmp newmem
  nop 6
return:

[DISABLE]

STORED_ADDR:
   readmem(storedValue,4096)
unregistersymbol(STORED_ADDR)

SUPER_WPN:
  db 48 8B 41 78 48 63 89 10 01 00 00
unregistersymbol(SUPER_WPN)

dealloc(storedValue)
dealloc(newmem)

 

текущий скрипт, чтобы мы смотрели на один энд поинт :)

Касаемо твоего вопроса - я даже не знаю как ответить, почему здесь как во многих языках нет логирования, вывел console.log в обоих кусках кода и увидел кто первый выполнился.... 

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

3 минуты назад, Alex2411 сказал:

поставь для проверки  вместо  4096 число 8 . тогда размер будет одинаковый и память точно будет  читаемая .

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

Я наверно на сегодня все, 2-ой час ночи, нужно отдыхать, завтра как проснусь зайду на форум, может еще кто имел опыт работы с readmem и подскажет что.

В любом случае, еще раз спасибо, Леш.

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

7 часов назад, FENIX145 сказал:

Касаемо твоего вопроса - я даже не знаю как ответить, почему здесь как во многих языках нет логирования, вывел console.log в обоих кусках кода и увидел кто первый выполнился.... 

в lua можно создавать файлы и записывать в них всякое.

Вот так тоже можно(взял имеющийся скрипт, изменения не проверял, но вроде работать должно? Самому интересно в каком оно там порядке выполняться будет)

 

Спойлер

[ENABLE]

alloc(newmem,1024)
alloc(strPth,1024)
registerSymbol(strPth)
{$lua}
s='data/models_strat/resource_mine.CAS'..string.char(0);
WriteString(strPth,s)
{$asm}
alloc(res,1024)
createthread(newmem)

newmem:

push 1
push 1
push 1
push 2
push 91c
push strPth
call 00a04f00
mov [res],eax
add esp,18
ret
{$lua}
Print(ReadString(strPth,200))
Print(res)
{$asm}
[DISABLE]
dealloc(newmem)

 

Print() выводит сообщение в специальное окошко для lua скриптов.

 

Дальше:

Вообще не понял что тебе нужно, но предложенные выше варианты мне нравятся. Если ты хочешь, чтобы при закрытии/открытии CE и включении скрипта при уже включённом скрипте?он отключался то можешь в код добавить проверку текущего значения или куска кода(смотря что ты там меняешь). Если ты хочешь чтобы что-то при включении/выключении менялось на старое что-то, то это старое что-то сначала нужно где-нибудь сохранить. Ты можешь выделить кусочек памяти и записать это что-то туда вместе с информацией о том, что это за что-то и что с этим чем-то делать?При включении/выключении скрипта можно проверять что же там написано, и если там написано "вернуть как было", то можно взять данные, записанные после "вернуть как было" и записать куда там тебе надо, после чего написать "вернул как было". Кажется что-то подобное тут выше уже предлагали. Вообще вариантов масса, задача вроде простая, а ты такие странные вопросы задаёшь. Ты точно программист??

 

Спойлер

unknown.png

Как тебе такие кейсы, фень?

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

11 часов назад, FENIX145 сказал:

может еще кто имел опыт работы с readmem и подскажет что

 

 

дарк байт ответил . оказалось  что второй вариант 

Цитата

readmem only executes at the time the script is injected, and it reads the bytes stored at STORED_ADDR
 

в общем    как я и подозревал

Цитата

если  сначала  сработает  readmem  то получаеться  он будет пытаться читать  из пустого  адреса . тогда  будет ошибка .

 

нужно чтобы  при активации  скрипта с readmem  в  памяти  уже были значания  тогда  readmem прочитает как надо ..

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

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

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

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

в lua можно создавать файлы и записывать в них всякое.

STDOUT называется :D 

 

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

Как тебе такие кейсы, фень?

ващпе огонь, только они мне не подходят :D 

 

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

Ты точно программист??

это фейк инфа, я работаю мойщиком окон в гугле, ага ;) 

 

@Alex2411 ответ от Dark Byte:


readmem only executes at the time the script is injected, and it reads the bytes stored at STORED_ADDR, not where STORED_ADDR points to
Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Alex2411 сказал:

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

да, видимо так придется все таки сделать, ну ладно, зато разобрались с readmem 

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

7 часов назад, FENIX145 сказал:

STDOUT называется :D 

 

?

7 часов назад, FENIX145 сказал:

ващпе огонь, только они мне не подходят :D 

 

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

7 часов назад, FENIX145 сказал:

это фейк инфа, я работаю мойщиком окон в гугле, ага ;) 

 

вот так я и думал, наслушался "умных" слов и как попугай теперь повторяешь?

7 часов назад, FENIX145 сказал:
readmem only executes at the time the script is injected, and it reads the bytes stored at STORED_ADDR, not where STORED_ADDR points to

юзай асм, фень?Там тоже файлы создавать можно и лог писать. Это наверное лучший кейс из всех кейсов в данном случае.

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

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

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

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