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

imaginary

Помогаторы
  • Постов

    319
  • Зарегистрирован

  • Посещение

  • Победитель дней

    43

Сообщения, опубликованные imaginary

  1. Тогда попробуй

     

    Спойлер
    
    [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 байт регистр

  2. Нужно создать метку, сохранить туда адрес того что нужно потом восстановить, и после записать в неё:
     

    Спойлер
    
    [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 твоё значение

     

     

  3. Не знаю как работает Bitmap.Canvas.Pixels[x,y], но мне кажется это не просто доступ к массиву, если бы у тебя сразу bitmap обрабатывалась как массив, тогда бы у тебя и один поток наверное всё бы успевал, SetPixel это вообще супер медленный метод! А несколько потоков простых, например созданных через CreateThread и работающих со своими bitmap вообще никак не могут друг друга заблокировать, они при такой проблеме скорей бы вызвали ошибку, это всё язык на котором ты пишешь и его навороты, что он там сотворяет внутри.

  4. Всё можно сравнить с помощью 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 //прыжок куда нужно

     


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

  5. Видимо ты не понимаешь что LP означает указатель указатель, то есть LPWSTR это тоже самое что &(wstring[0]), тебе нужно конвертировать string в wstring, а как это сделать, задаёшь вопрос в поисковике, и сразу же первые ссылки. Какой смысл тут об этом спрашивать? Только время своё теряешь. Wstring всего лишь означает что строка в юникоде, и символы занимают 2 байта, а не 1, как в простой строке. Зная это, можно конвертировать даже не используя существующий конвертер, а просто составив строку пропуская лишние байты, или добавляя.

  6. 1 час назад, Pitronic сказал:

    А ты когда начинала сразу всё догоняла?

    Конечно, посмотри, попробуй найти тут на форуме хоть один вопрос от меня, тут есть только одна тема за всё время, и там никто не ответил. А тебе "помогать" нету смысла, потому что ты ко всем пристаёшь, и мне в лс ты тоже писал, только с другим. Ничего сам не делаешь, даже твои таблички что ты выкладывал для разных игр, это куски работы разных пользователей, а не твоей. Где тут изучение? Это называется - воровство. Только другого вида.
    Тебе даже тему прислали где всё практически есть, надо чуть чуть подумать, но нет, лучше ты будешь писать что ничего не понятно, и тебе нужен готовый код. Собственно ты так и ставишь вопрос.

  7. 1 минуту назад, Pitronic сказал:

    Мне нужен вопервых на несколько слотов сохранения, плюс возврат в исходную позицию, вот тут я и затупил.

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

  8. 36 минут назад, Ravenjm сказал:

    Да, я там ещё скобки упустил, но это не так важно

    А при чём тут скобки? Я говорю не про скобки, а про то, что у тебя стоит условие на проверку RAX > чем, в обоих случаях, и стоит and между ними. Что получается за проверка по твоему? Сам подумай.

  9. Потому что всё записывается в json формате, изучай википедию майнкрафта там есть всё про json и структуры предмета, поищи странички консоли, команд, предметов, entity сущностей.

  10. Мне кажется что тебе будет проще все эти штуковины сделать в игре самостоятельно ?
    А если очень хочется, то нужно узнать как производится проверка, если через связь с сервером, тогда даже все изменения для кода игры могут присылаться с сервера. А ещё можешь попробовать просто через Cheat Engine, ищешь в игре значение - неизвестное, исполняемое, включаешь галочку в чите, в игре отсеиваешь значения по параметрам: изменилось, исполняемое , и так можешь узнать что меняет в игре эта программа, а потом использовать.

  11. Он тебе сказал - не знает как обрабатывать такие параметры функции создания строки. Попробуй просто

    sListBox1->Items->Strings[sListBox1->ItemIndex].t_str()

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

    sListBox1->Items->Strings[sListBox1->ItemIndex].Pos("|")-2

    С одним кодом без контекста ничего точно не понятно.

  12. 45 минут назад, valeriyanka сказал:

    возможно ли сделать такое

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

    • Понравилось 1
×
×
  • Создать...

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

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