-
Постов
319 -
Зарегистрирован
-
Посещение
-
Победитель дней
43
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные imaginary
-
-
А какой скрипт у тебя не портит игру?
-
Обращайся так же, по моему работает
[[[saveadr]+2C]+4]: db 200 [[[saveadr]+2C]+8]: db 5
- 1
-
Нужно создать метку, сохранить туда адрес того что нужно потом восстановить, и после записать в неё:
Спойлер[ENABLE] label(savedadr) newmem: push rdi mov rdi,[rсx+20] test rdi,rdi jz @F mov rdi,[rdi+18] lea rdi,[rdi+13c] // mov [rdi],#9999 mov [savedadr],rdi //сохранение адреса в котором нужно восстановить @@: pop rdi code: mov rax,[rcx+78] movsxd rcx,dword ptr [rcx+00000110] jmp return savedadr: dq 0 //dq или dd, 64 или 32 бит return: [DISABLE] [savedadr]: //Это делать до dealloc dd #200 //dd или dq или db или dw твоё значение
-
Не знаю как работает Bitmap.Canvas.Pixels[x,y], но мне кажется это не просто доступ к массиву, если бы у тебя сразу bitmap обрабатывалась как массив, тогда бы у тебя и один поток наверное всё бы успевал, SetPixel это вообще супер медленный метод! А несколько потоков простых, например созданных через CreateThread и работающих со своими bitmap вообще никак не могут друг друга заблокировать, они при такой проблеме скорей бы вызвали ошибку, это всё язык на котором ты пишешь и его навороты, что он там сотворяет внутри.
-
Для того что бы было видно что происходит в примере, потому и 2 числа загружаются, а не просто одно загружается и сравнивается.
-
Всё можно сравнить с помощью fpu, в этом нету никаких сложностей, просто команды загрузки разные.
Вот например сравнение двух double чисел:
Спойлер//В [label] хранится double 200, а в [label+8] хранится double 2 //Будем всё загружать, что бы не было сложностей с пониманием если числа изначально не с плавяющей запятой, но 8 байт //Предположим что у нас rax занят, и его нельзя портить push rax //сохраняем rax (eax если 32 бит) fld qword [label] //Загрузить в стек fpu double число (qword) без преобразований (fld), теперь оно в st(0) fld qword [label+8] //Загрузить второе число, теперь в стеке 2 числа (2 и 200), теперь оно в st(0), а первое в st(1) fcomp st(0), st(1) //Сравнить число 2 с числом 200, и убрать из стека число 2 (fcomp) fstp st(0) //Убрать оставшееся число из стека, что бы он стал чистым. fstsw ax //Поместить флаги fpu в регистер ax (который часть eax, который часть rax) sahf //Загрузить флаги из регистра во флаги cpu pop rax //восстанавливаем rax (eax если 32 бит) //Нужно заметить что после этого нельзя использовать операторы сравнения которые основаны на незагруженных флагах, то есть нельзя использовать jl или jg, вместо них нужно использовать jb и ja ja metka //прыжок куда нужно
Если нужно сравнить не double числа, а float, то qword нужно заменить на dword, а если нужно сравнить числа 8 байт без плавающей запятой, тогда нужно заменить команды на вот такие:
Спойлер{ В этом примере сравниваются 2 разных числа, одно int64, а второе float32, занимающие 8 и 4 байта. Для сравнения float загружается без изменений (fld), и указанием размера 4 байта (dword), а int64 загружается с преобразованием (в число с плавающей запятой, fild), и размером 8 байт (qword). Понимая эти параметры, используя код снизу можно сравнить любые числа, просто меняя их. } //В [label] integer64 число 97, в [label+8] float число 7 push rax //сохраняем rax (eax если 32 бит) fild qword [label] //Загрузить в стек fpu int64 число (qword) с преобразованием! (fild), теперь оно в st(0) fld dword [label+8] //Загрузить второе, но уже float, (dword) без преобразований (fld) число, теперь в стеке 2 числа (7 и 97) fcomp st(0), st(1) //Сравнить число 7 с числом 97, и убрать из стека число 7 (fcomp) fstp st(0) //Убрать оставшееся число из стека, что бы он стал чистым. fstsw ax //Поместить флаги fpu в регистер ax (который часть eax, который часть rax) sahf //Загрузить флаги из регистра во флаги cpu pop rax //восстанавливаем rax (eax если 32 бит) ja metka //прыжок куда нужно
С помощью этого примера можно сравнивать любые числа любых доступных размеров и типов просто изменяя команды в нём. -
-
Видимо ты не понимаешь что LP означает указатель указатель, то есть LPWSTR это тоже самое что &(wstring[0]), тебе нужно конвертировать string в wstring, а как это сделать, задаёшь вопрос в поисковике, и сразу же первые ссылки. Какой смысл тут об этом спрашивать? Только время своё теряешь. Wstring всего лишь означает что строка в юникоде, и символы занимают 2 байта, а не 1, как в простой строке. Зная это, можно конвертировать даже не используя существующий конвертер, а просто составив строку пропуская лишние байты, или добавляя.
-
1 час назад, Pitronic сказал:
А ты когда начинала сразу всё догоняла?
Конечно, посмотри, попробуй найти тут на форуме хоть один вопрос от меня, тут есть только одна тема за всё время, и там никто не ответил. А тебе "помогать" нету смысла, потому что ты ко всем пристаёшь, и мне в лс ты тоже писал, только с другим. Ничего сам не делаешь, даже твои таблички что ты выкладывал для разных игр, это куски работы разных пользователей, а не твоей. Где тут изучение? Это называется - воровство. Только другого вида.
Тебе даже тему прислали где всё практически есть, надо чуть чуть подумать, но нет, лучше ты будешь писать что ничего не понятно, и тебе нужен готовый код. Собственно ты так и ставишь вопрос. -
Значит плохо нужно, если сам разбираться не хочешь и не догоняешь.
-
Всё есть на форуме, например вот тема:
Всё работает, вероятно ты задаёшь что то неверно.
-
3 минуты назад, Alex2411 сказал:
128 байт тогда как сделать ?
Используй alloc, например:
[ENABLE] alloc(teleport, 128) [DISABLE] dealloc(teleport)
-
1 минуту назад, Pitronic сказал:
Мне нужен вопервых на несколько слотов сохранения, плюс возврат в исходную позицию, вот тут я и затупил.
В таком случае раступливайся и сделай самостоятельно, тебе постоянно всё дописывают. Основ должно хватать, что бы разобраться.
-
Если у тебя так не работает, тогда напиши с if else условия
-
36 минут назад, Ravenjm сказал:
Да, я там ещё скобки упустил, но это не так важно
А при чём тут скобки? Я говорю не про скобки, а про то, что у тебя стоит условие на проверку RAX > чем, в обоих случаях, и стоит and между ними. Что получается за проверка по твоему? Сам подумай.
-
А что это у тебя за условие такое?
(RAX >= 0xFFFFFFFF) and -> (RAX >= 0x00000010) <- Зачем вот эта, вторая часть? Это ведь одно и тоже получается.
-
Это ерунда, предметы на сервере, у тебя всё визуально, а названия и текст письма составляется на клиенте, вот и весь секрет.
-
Для одной онлайн игры так же, как и для другой онлайн игры.
-
Потому что всё записывается в json формате, изучай википедию майнкрафта там есть всё про json и структуры предмета, поищи странички консоли, команд, предметов, entity сущностей.
-
Да, все материалы можно найти на этом сайте
-
Мне кажется что тебе будет проще все эти штуковины сделать в игре самостоятельно ?
А если очень хочется, то нужно узнать как производится проверка, если через связь с сервером, тогда даже все изменения для кода игры могут присылаться с сервера. А ещё можешь попробовать просто через Cheat Engine, ищешь в игре значение - неизвестное, исполняемое, включаешь галочку в чите, в игре отсеиваешь значения по параметрам: изменилось, исполняемое , и так можешь узнать что меняет в игре эта программа, а потом использовать. -
Он тебе сказал - не знает как обрабатывать такие параметры функции создания строки. Попробуй просто
sListBox1->Items->Strings[sListBox1->ItemIndex].t_str()
И вообще, судя по твоему вопросу, код ты не сам писал. Предполагаю что тут пытаются получить позицию подстроки, или что то такое.
sListBox1->Items->Strings[sListBox1->ItemIndex].Pos("|")-2
С одним кодом без контекста ничего точно не понятно.
-
45 минут назад, valeriyanka сказал:
возможно ли сделать такое
Устанавливай точку отладчика на нужную инструкцию, потом получай регистр (хранится в переменной с таким же названием, например EBX), а затем запускай выполнение кода дальше, и так каждый раз. Все необходимые функции описаны вот в этом местечке.
- 1
-
23 минуты назад, Dison сказал:
А другие, это какие?
Другие, которые обращаются к этим что бы измениться, попробуй поискать через инструкции обращения
- 1
[CE] Вопрос по возврату значения в [DISABLE]
in Вопросы по созданию читов в одиночных играх
Опубликовано
Тогда попробуй
[ENABLE] aobscanregion(SUPER_WPN, BoardHUD:Invalidate+615, BoardHUD:Invalidate+661, 48 8B 41 78 48 63 89 10 01 00 00) // should be unique alloc(newmem,$1000,SUPER_WPN) label(code) label(return) label(saveaddr) /// registersymbol(SUPER_WPN) newmem: push rbx push rdi mov rbx,[rcx+78] mov rdi,[rbx+20] test rdi,rdi jz @F mov rdi,[rdi+18] mov [rdi+50],#1 mov [rdi+78],#1 mov [rdi+a0],#1 mov [saveaddr],rdi /// 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 saveaddr: /// dq 0 SUPER_WPN: jmp newmem nop 6 return: [DISABLE] [saveaddr]+13c: /// dd 0 [saveaddr]+140: /// dd 0 SUPER_WPN: db 48 8B 41 78 48 63 89 10 01 00 00 unregistersymbol(SUPER_WPN) dealloc(newmem)
И почему ты используешь dd, ведь тут 8 байт регистр