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

Как прикрутить фильтр к скрипту


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

Всем привет!

Мне нужно чтобы скрипт активировался 1 раз а не постоянно.

Но плюс туда нужно добавить фильтр, так то все работает незнаю как туда прилепить фильтр

[ENABLE]alloc(newmem,2048)label(_money)label(_money2)label(originalcode)label(exit)label(returnhere)registersymbol(_money2)aobscan(aob_money2,8B 88 E8 00 00 00 8B 46 58 3B C8 76 2B 2B C8 89 4E 5C)newmem:cmp dword ptr [eax+00000128],1 //как этот фильтр прикрутить к скрипту, а то данная инструкция использует не один адресcmp dword ptr [_money],1  // Вот это нужно для того чтобы скрипт активировался 1 раз, чтобы не было бесконечного цикла активацииjne originalcodeadd [eax+000000E8],#10000mov [_money],0  // Это отключение, чтобы не было бесконечного цикла активацииoriginalcode:mov ecx,[eax+000000E8]exit:jmp returnhere_money: // метка если 1 активированоdd 0aob_money2:_money2:jmp newmemnopreturnhere:[DISABLE]unregistersymbol(_money2)_money2:mov ecx,[eax+000000E8]dealloc(newmem)
Изменено пользователем Dison
Ссылка на комментарий
Поделиться на другие сайты

cmp dword ptr [_money],1 // Вот это нужно для того чтобы скрипт активировался 1 раз, чтобы не было бесконечного цикла активации

jne originalcode

После этой конструкции добавляй фильтр.

 

И да, в конце записи нужных байтов обнуляй флаг, чтобы он отключался.

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

Попробуй. Но у тебя там тип DWORD, а для метки его многовато, поэтому я выставил 1 байт.

ИЛИ - если нужно по горячей клавише выполнять скрипт:

(Добавь в таблицу переменную с именем "_money", с типом: 1 байт. Значения: 0 - выполнить скрипт, 1 - запретить выполнение)

[ENABLE]alloc(newmem,2048)label(_money)label(_money2)label(originalcode)label(exit)label(returnhere)registersymbol(_money2)aobscan(aob_money2,8B 88 E8 00 00 00 8B 46 58 3B C8 76 2B 2B C8 89 4E 5C)newmem:cmp byte ptr [_money],#1 // Поверяем, активировался-ли скрипт ранееje originalcode // Если равно "1" - скрипт активировался, значит, выполняем оригинальный кодmov byte ptr [_money],#1 // Если не равно "1" - скрипт не активировался, значит выставляем единицу, и продолжаем выполнениеcmp dword ptr [eax+00000128],1 // Без понятия, что ты тут сравниваешьjne originalcode // Выходadd [eax+000000E8],#10000originalcode:mov ecx,[eax+000000E8]exit:jmp returnhere_money: // При активации скрипт выставляем значение равное нулю, что значит - скрипт еще не активировалсяdb 0aob_money2:_money2:jmp newmemnopreturnhere:[DISABLE]_money2:mov ecx,[eax+000000E8]unregistersymbol(_money2) // В твоем скрипте у тебя ошибка с отменой регистрации этой меткиdealloc(newmem)
[ENABLE]alloc(newmem,2048)label(_money)label(_money2)label(originalcode)label(exit)label(returnhere)registersymbol(_money2)registersymbol(_money) // Регистрируем метку для горячей клавишиaobscan(aob_money2,8B 88 E8 00 00 00 8B 46 58 3B C8 76 2B 2B C8 89 4E 5C)newmem:cmp byte ptr [_money],#1 // Поверяем, активировался-ли скрипт ранееje originalcode // Если равно "1" - скрипт активировался, значит, выполняем оригинальный кодmov byte ptr [_money],#1 // Если не равно "1" - скрипт не активировался, значит выставляем единицу, и продолжаем выполнениеcmp dword ptr [eax+00000128],1 // Без понятия, что ты тут сравниваешьjne originalcode // Выходadd [eax+000000E8],#10000originalcode:mov ecx,[eax+000000E8]exit:jmp returnhere_money: // При активации скрипт выставляем значение равное нулю, что значит - скрипт еще не активировалсяdb 0aob_money2:_money2:jmp newmemnopreturnhere:[DISABLE]_money2:mov ecx,[eax+000000E8]unregistersymbol(_money) // Отменяем регистрацию метки для горячей клавишиunregistersymbol(_money2) // В твоем скрипте у тебя ошибка с отменой регистрации этой меткиdealloc(newmem)
Ссылка на комментарий
Поделиться на другие сайты

После этой конструкции добавляй фильтр.

 

Что-то не выходит, скрипт активируется но не хочет работать

Попробуй. Но у тебя там тип DWORD, а для метки его многовато, поэтому я выставил 1 байт.

 

Не хочет работать, не знаю почему

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

Не хочет работать, не знаю почему

Не хочет работать, скорее всего, из-за твоего сравнения: cmp dword ptr [eax+00000128],1. Что ты там сравниваешь - я не знаю, попробуй закомментировать эту строчку, и если скрипт сработает - значит твой фильтр неверен.

P.S.

Только не забудь закомментировать следующую строчку после той инструкции: jne originalcode

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

NullAlex, в этой строчке 

mov byte ptr [_money],#1 // Если не равно "1" - скрипт не активировался, значит выставляем единицу, и продолжаем выполнение

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

 

ЗЫ: Я ошибся у NullAlex правильный скрипт, просто не посмотрел значение флага и прыжок (je), а так у нас одинаковые скрипты.

 

Dison, попробуй мой вариант:

[ENABLE]alloc(newmem,128)label(_money)label(_money2)label(originalcode)label(returnhere)registersymbol(_money2)aobscan(aob_money2,8B 88 E8 00 00 00 8B 46 58 3B C8 76 2B 2B C8 89 4E 5C)newmem:cmp byte ptr [_money],1  jne originalcodemov byte ptr [_money],0 cmp dword ptr [eax+00000128],1 jne originalcode            // так как я не знаю для чего 1 (для наших/или нет -ты об этом не написал),                                                       // то поставил jne (но может нужно наоборот je). add [eax+000000E8],#10000originalcode:mov ecx,[eax+000000E8]jmp returnhere_money: db 1                        // для метки достаточно byteaob_money2:_money2:jmp newmemnopreturnhere:[DISABLE]_money2:mov ecx,[eax+000000E8]unregistersymbol(_money2)dealloc(newmem) 
Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

NullAlex, в этой строчке 

mov byte ptr [_money],#1 // Если не равно "1" - скрипт не активировался, значит выставляем единицу, и продолжаем выполнение
ты не прав, т.к. скрипт будет выполняться постоянно, а соответственно будет переполнение денюжков. (и скорее всего вылет, если Dison, использует инструкцию, которая часто обращается к адресу.
Ну чегойта? Читаем скрипт:

cmp byte ptr [_money],#1 // Сравниваем значение переменной _money с единицейje originalcode // Если равно единице - выполняем оригинальный кодmov byte ptr [_money],#1 // Если не равно единице - ставим единицу, и добавляем деньги
Чтобы было понятнее, вот:

if (_money == 1) {  // выполняем оригинальный код} else {  _money = 1;  // добавляем деньги, т.е. - продолжаем выполнение скрипта}
И не забываем, что изначальное значение переменной _money равно нулю, то есть флаг говорит о том, что скрипт еще не был активирован.
Ссылка на комментарий
Поделиться на другие сайты

NullAlex, Я одноразовых скриптов уже переделал КУЧУ. 

В твоём случае флаг всегда будет равен 1. Поэтому смысла в твоём скрипте во флаге - 0.

 

ЗЫ: Я ошибся у NullAlex правильный скрипт, просто не посмотрел значение флага и прыжок (je), а так у нас одинаковые скрипты.

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

NullAlex, Я одноразовых скриптов уже переделал КУЧУ. 

В твоём случае флаг всегда будет равен 1. Поэтому смысла в твоём скрипте во флаге - 0.

Запусти на выполнение мой скрипт, для начала.

Я даже повторюсь:

Значение "1" (единица) значит, что скрипт активирован, и что деньги добавлять - не требуется.

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

Собственно, это то, чего и хотел Dison:

Мне нужно чтобы скрипт активировался 1 раз а не постоянно.

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

Запусти на выполнение мой скрипт, для начала.

Посмотрел твой скрипт, да они у нас одинаковые: я не заметил, что ты поменял jne на  je originalcode.

У меня флаг по умолчанию равен 1.

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

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

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

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