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

DarkPower2

Пользователи
  • Постов

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

  • Посещение

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

  1. 21 минуту назад, Garik66 сказал:

    Странно.

    Снова проверил. Теперь флажок ставится, а игра крашится моментально.

    Моим способом все отличо.

     

    Суть в чем, я как-то переходил по адресам через CTRL+G на значение от ("s1_sp64_ship.exe"+03C19040) и 143F10150 - итог разные участки памяти и данные  были, хотя сам cheat engine показывает что

    ["s1_sp64_ship.exe"+03C19040] <=> 143F10150 (В табллице)

     

    Ну или может потому что конечное число статическое.

    Т.е. сразу зеленое s1_sp64_ship.exe+3F10708

  2. 12 минут назад, Garik66 сказал:

    А так в СЕ разве не работает?

    Нет. Флажок не переключается в enable

    Разве что так:

    Спойлер
    
     mov rax, s1_sp64_ship.exe
     add rax, 03C19040
     mov rax, [rax]
    
     mov [rax+5B8], 15 //ammo

     

     

  3. Разобрался, если кому нужно будет пример таймера, то вот:

    Спойлер
    
    [ENABLE]
    globalalloc(newmem,1024)
    globalalloc(end, 4)
    createthread(newmem)
    label(end)
    registersymbol(end)
    
    newmem:
     push eax
     push ecx
    
     //logic start
     mov rax, s1_sp64_ship.exe
     add rax, 03C19040
     mov rax, [rax]
     add rax, 5B8
     mov [rax], 15
     //logic end
    
     //wait
     mov ecx, 00001388 //5000ms - mov ecx, #5000
     call kernel32.sleep
    
     pop ecx
     pop eax
    
     cmp [end], 1
     jne newmem
     //jmp newmem
     ret
    
    end:
     dd 0
    
    [disable]
    end:
     dd 1
    //dealloc(newmem)

     

     

  4. 38 минут назад, MasterGH сказал:

    Пошаговая отладка в Cheat Engine подскажет что не так. Заранее вручную создаем newMem-память, метку и вручную запускаем поток и там делаем пошаговую отладку. Разбираемся в причинах. Правим. Проверяем и так пока не будет работать.

    Так и сделал.

     

    Поток - работает.

    JMP - работает.

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

     

     mov eax, ["s1_sp64_ship.exe"+03C19040] //Тут я озадачен - получаем в ответ [00000000]

     

  5. Доброго времени суток.

     

    Вступление

    Хочу написать некий телепорт.
    Игра CoD: AW. 

    Когда-то делал Grab скрипт для SAMP'a, вот решил провернуть что-то такое в CoD средствами CE (AA).

    Есть вектор игрока и вектор камеры (2 координаты).

     

    Сами проблемы

    1. Столкнулся с проблемой обычного изменения координаты в АА
      Спойлер
      
      [ENABLE]
      loadlibrary(luaclient-x86_64.dll)
      globalalloc(newmem,4096)
      createthread(newmem)
      label(end)
      registersymbol(end)
      
      newmem:
       push eax
       push ecx
      
       //Помещаем 15 патронов
       mov eax, ["s1_sp64_ship.exe"+03C19040]
       mov [eax+5B8], 15
      
       luacall(speakEnglish("It Work", true))
       //luacall(showMessage(eax))
      
      
       pop ecx
       pop eax
      
       push 0x000003e8
       call kernel32.Sleep //Игнорит
      
       luacall(speakEnglish("It Work 2", true))
      
       cmp [end], 1
       jne newmem
       //jmp newmem //Все равно не срабатывает
      
       luacall(speakEnglish("It Work 3", true))
       ret
      
      end:
       dd 0
      
      [disable]
      end:
       dd 1

       


      Посмотрел примеры, как делали в интернете. Создают поток. Создал - и ничего.
      Т.е. luacall(speakEnglish("It Work", true)) работает.
      Патроны не меняются, пробовал на прямой адрес (без указателей) - результат тот же.
       
      143F10708 = 30 //Патроны
      5B8 -> 143F10150+5B8 = 143F10708
      "s1_sp64_ship.exe"+03C19040 -> 143F10150 //Игрок

       

    2. В коде выше просто игнорятся:
      call kernel32.Sleep //Игнорит

      и
      cmp [end], 1
       jne newmem
       //jmp newmem //Все равно не срабатывает
      Почему такое происходит?
      И как мне сделать Таймер?
       
    3. Как вывести значение из регистра в МеседжБокс?
      luacall(showMessage(eax))

      Что-то типа такого

     

    Сокращения и аббревиатуры:

    CoD: AW - Call of Duty: Advanced Warfare

    Grab - Перетаскивание(изменениее координат) чего-либо с помощью обзора мышки. Установка координат объекту с помощью направления камеры, растояния и позиции.

    SAMP - San Andreas Multiplayer

    AA - Auto Assembler

     

    P.S. Знаю, что можно реализовать это все не в АА (C#, lua, C++ и другие), но меня интересует именно это направление.

  6. Суть проблемы: в чужом окне есть RichEdit в котором при нажатии клавиши Enter отсылается текст. 
    Написал код на Delphi которой добавляет текст и нажимает клавишу ентер - все отлично работает!
    Написал код на C# который добавляет текст и нажимает клавишу ентер - текст пишет нормально, а вот ентер пишет в РичЕдит, тоесть не отсылает текст...

    Код на Delphi:

    Скрытый текст

    SendMessage(EDITCtrl, WM_SETTEXT, 0, Integer(Edit2.Text));
    SendMessage(EDITCtrl, WM_KEYDOWN, VK_RETURN, 0);
    SendMessage(EDITCtrl, WM_KEYUP, VK_RETURN, 0);

     

    Код на C#:

    Скрытый текст

    WIN32.SendMessage(hwnd_edit, WM_SETTEXT, IntPtr.Zero, textBox1.Text);
    WIN32.SendMessage(hwnd_edit, WM_KEYDOWN, (IntPtr)VK_ENTER, IntPtr.Zero);
    WIN32.SendMessage(hwnd_edit, WM_KEYUP, (IntPtr)VK_ENTER, IntPtr.Zero);

     

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

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

     

    
    lea edi,[ebx+000001B4]
    lea esi,[ebp-20]
    movsd 
    movsd 
    movsd 

    позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI.

    3 MOVSD = 3 координаты. Наверное здесь.

    Как то странно, 3 раза копирует одно и тоже в edi.

  8. Цитата

    3. А скрипт у тебя точно рабочий? Просто, если оригинальная инструкция например эта:

    Там 2 оригинальных инструкции... просто если персонаж совпадает с моим, то пропускается одна инструкция. 

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

    Вот, можно ли проверить есть ли данные по указоному адресу или еще как-то, что считать их без краха?

  9. 23 минуты назад, Garik66 сказал:

    По выложенному тобой участку кода, это не понятно.

    Ну вот побольше сделал.

     

    Скрытый текст
    
    test eax,eax
    mov [ebp+0C],eax
    fild dword ptr [ebp+0C]
    jnl cnc3game.Debug::PostStaticInit+23017D
    fadd dword ptr [cnc3game.dat+62AE40]
    fdivr dword ptr [cnc3game.dat+634448]
    movss xmm1,[ebp+08]
    comiss xmm1,[edi+40]
    fstp dword ptr [ebp+0C]
    jna cnc3game.Debug::PostStaticInit+2301AA
    test byte ptr [edi+54],01
    jne cnc3game.Debug::PostStaticInit+2301AA
    push ebx
    mov ecx,edi
    call cnc3game.Debug::PostStaticInit+22F82A
    fadd dword ptr [edi+40]
    movss xmm1,[ebp+08]
    fstp dword ptr [edi+40]
    movss xmm0,[edi+40]
    comiss xmm0,xmm1
    jna cnc3game.Debug::PostStaticInit+2301C8
    subss xmm0,[ebp-04]
    comiss xmm1,xmm0
    movss [edi+40],xmm0
    jna cnc3game.Debug::PostStaticInit+2301C8
    movss [edi+40],xmm1
    movss xmm0,[esi]
    mov ecx,[ebp+14]
    test ecx,ecx
    movss [ebp-30],xmm0
    movss xmm0,[esi+04]
    movss [ebp-2C],xmm0
    movss xmm0,[esi+08]
    movss [ebp-28],xmm0
    movss xmm0,[edi+40]
    movss [ebp+08],xmm0
    je cnc3game.Debug::PostStaticInit+230380
    cmp byte ptr [ecx+0E],00
    je cnc3game.Debug::PostStaticInit+23020C
    xorps xmm0,xmm0
    movss [edi+40],xmm0
    mov byte ptr [ecx+0E],00
    inc [ecx]
    push edi
    lea eax,[ebp-24]
    push eax
    call cnc3game.Debug::PostStaticInit+2F38F6
    mov esi,eax
    lea edi,[ebp-4C]
    movsd 
    movsd 
    movsd 
    movsd 
    lea esi,[ebp-48]
    lea edi,[ebp-30]
    movsd 
    movsd 
    movsd 
    mov esi,[ebp-08]
    push 01
    push ecx
    fld dword ptr [esi+40]
    mov ecx,[ebp+14]
    lea eax,[ebp-30]
    fstp dword ptr [esp]
    push eax
    call cnc3game.Debug::PostStaticInit+30E788
    mov ecx,[ebp+14]
    push esi
    lea eax,[ebp-24]
    push eax
    call cnc3game.Debug::PostStaticInit+2F38F6
    mov ecx,[ebp+14]
    mov esi,eax
    mov eax,[ecx]
    test eax,eax
    lea edi,[ebp-4C]
    movsd 
    movsd 
    movsd 
    movsd 
    je cnc3game.Debug::PostStaticInit+230264
    dec eax
    mov [ecx],eax
    movss xmm0,[ebp-48]
    movss [ebp-20],xmm0
    movss xmm0,[ebp-44]
    movss [ebp-1C],xmm0
    movss xmm0,[ebp-40]
    movss [ebp-18],xmm0
    lea edi,[ebx+000001B4]
    lea esi,[ebp-20]
    movsd 
    movsd 
    mov byte ptr [ebx+000001C2],01
    movsd 
    movss xmm1,[ebp-30] //этот xmm1 не совпадает
    movss xmm0,[ebp-2C]
    cmp byte ptr [ebx+000001C2],00
    lea eax,[ebx+38]
    movss xmm2,[eax+08]
    movss [ebp-28],xmm2
    je cnc3game.Debug::PostStaticInit+2302BB
    lea eax,[ebx+000001B4]
    movss xmm3,[eax]
    movss [ebp-20],xmm3
    movss xmm3,[eax+04]
    movss [ebp-1C],xmm3
    movss [ebp-18],xmm2
    lea edi,[ebx+000001B4]
    lea esi,[ebp-20]
    movsd 
    movsd 
    movsd 
    mov esi,[ebp-08]
    mov byte ptr [ebx+000001C2],01
    lea eax,[esi+78]
    movss [eax+1C],xmm0
    movss [eax+0C],xmm1 //xmm1 не совпадает с вот этим
    movss [eax+2C],xmm2

     

     

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

    Скрытый текст
    
    newmem:
    push R13
    mov R13, ["server.dll"+01C508B8]
    mov R13, [R13]
    mov R13, [R13+48]
    cmp rbx, [R13]
    je exit
    movss [rbx+000007EC],xmm7
    
    exit:
    pop R13
    movss xmm1, [rbx+7EC]
    jmp returnhere
    
    "server.dll"+884A2A:
    push RDI
    mov RDI, newmem
    jmp RDI
    nop
    nop
    returnhere:
    pop RDI

     

     

  11. 9 минут назад, Garik66 сказал:

    отому что здесь идёт просто пересылка координат, но не их расчёт. Т.е. тебе нужно искать инструкция откуда в [ebp-30] и т.д. попадают значения, причём не по еbp, а по конкретному адресу, так как регистр может и поменяться.

    Вот только, почему в xmm1 (то что сверху) не совпадают координатами xmm1 (то что снизу)?

  12. 9 минут назад, Garik66 сказал:

    Короче попробуй сделать "Анализ структуры" например из этой инструкции:

     

    
    movss xmm0,[ebp-2C]

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

    Спасибо, попробую. Я обновил пост из другой темы (про чтение из несуществующего адреса).

  13. 6 часов назад, Garik66 сказал:

    Выложи свой скрипт, посмотрим что можно сделать.

    А так - нужно дополнительно фильтровать в скрипте - делать проверку.

     

    Скрытый текст
    
    newmem:
    originalcode:
    mov R13, ["server.dll"+01C508B8] //вот тут бывакт
    mov R13, [R13]
    mov R13, [R13+48]
    cmp rbx, [R13]
    je exit
    movss [rbx+000007EC],xmm7
    
    exit:
    movss xmm1, [rbx+7EC]
    jmp returnhere
    
    "server.dll"+884A2A:
    push RDI
    mov RDI, newmem
    jmp RDI
    nop
    nop
    returnhere:
    pop RDI

     

     

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

    Именно этими инструкциями и  меняются координаты, которые находятся в [eax+1C], [eax+0C] и [eax+2C]. А в xmm0 (и соответственно в других) лежит новое значение координат.

    А что ты пишешь? Для чего искал координаты? Телепорт?

    Да я понимаю... Вот я и хочу как раз узнать где меняются новые координаты... Хочу ускорить моего персонажа.

  15. 1 минуту назад, Garik66 сказал:

    Скорее всего вот они все три координаты:

    
    movss [eax+1C],xmm0
    movss [eax+0C],xmm1
    movss [eax+2C],xmm2

     

    Да, это они, но где они изменяются, это меня интересует. То есть где меняется xmm1 к примеру.

  16. Как бороться с вот этим?

    Цитата

    Чтение(или запись) из не существующего адреса (или адреса с протекцией памяти не для чтения) и случай выполнения перемещённой инструкции.

     

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

  17. Игра: Command and Conquer 3.

    Указатель на координаты: найден. 

    Там 3 адреса  на 1 координату которые зависят друг от друга...

    В итоге я дошел до такой команды: movss [eax+0C],xmm1

    В xmm1 и содержится координата. Полистав выше, в поисках кто и что пишет в xmm1, я нашел только: movss xmm1,[ebp-30]

    Регистр ebp вроде бы негде не менялся, я взял регистр ebp, отнял от него 30 по хексу и добавил его в СЕ.

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

     

    Помогите найти инструкцию изменения координаты, вот листинг от movss [eax+0C],xmm1 и выше...

    Скрытый текст
    
    movss xmm1,[ebp-30]
    movss xmm0,[ebp-2C]
    cmp byte ptr [ebx+000001C2],00
    lea eax,[ebx+38]
    movss xmm2,[eax+08]
    movss [ebp-28],xmm2
    je cnc3game.Debug::PostStaticInit+2302BB
    lea eax,[ebx+000001B4]
    movss xmm3,[eax]
    movss [ebp-20],xmm3
    movss xmm3,[eax+04]
    movss [ebp-1C],xmm3
    movss [ebp-18],xmm2
    lea edi,[ebx+000001B4]
    lea esi,[ebp-20]
    movsd 
    movsd 
    movsd 
    mov esi,[ebp-08]
    mov byte ptr [ebx+000001C2],01
    lea eax,[esi+78]
    movss [eax+1C],xmm0
    movss [eax+0C],xmm1
    movss [eax+2C],xmm2

     

     

  18. +тебе не обязательно сохр регистр, посмотри какие там ниже не юзаются и выбери временный из RAX RCX RDX R8 R9 R10 R11

    +лучше оформи через call [xxxxx]

    Можете показать пример через call?
  19. АА это автоассемблер...сделать скрипт на эту инструкцию movss [rbx+000007EC],xmm7, то есть выбираешь её в отладчике жмёшь на:

    "Инструменты -> автоассемблер -> Появится окно далее шаблон -> Вставить секции -> Инъекция кода.

    Ну а там уже можешь скриптить\делать внедрения своего кода в эту инструкцию movss [rbx+000007EC],xmm7

     

    Странно как то твой модуль отображается в отладчике...учитывая что твоя метка отключена:

    В отладчике отображается так: "server.-crt_debugger_hook+2D668A"

    В скрипте выглядит так: "server.dll"+884A2A

    Ну я так и делал, просто потом мне надо будет внедрять это все в память через c#... И там нету асмблеровсой вставки, все по хексу...  А делать dll на c++ не вариант.  

    В четинейдже прыгает на 8 байтный адрес с помощю 4 байтов (отниманием "куда прыжок" от "откуда прыжок" и "колово байт на прыжок" -  не помогает - прыгает на неверный адрес), я уже пробовал по разному, самый лучший вариант - поместить 8 байтный адрес в регистр, а потом прыгать не регистр, но при таком раскладе игра крашится...

     

    "server.-crt_debugger_hook+2D668A" - это в доте так...

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

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

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