GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Mafia II-DE v.1.0.1 вращение колёс

    Запланировано Прикреплена Закрыта Перенесена Общий
    15 Сообщения 4 Posters 350 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • Partizan1078P
      Partizan1078
      отредактировано

      Захотель я ускорить тачку путём накрутки вращения колёс.
      Но столкнулся с ситуацией.
      Дело такое. Если я просто возьму и пропишу значение допустим 1000. То всё работает.

       mov [r14+000003BC],(float)1000
       mulss xmm14,[r14+000003BC]
      

      А ну да в инструкции срабатывает только 4 адреса моих колёс. Других нет.
      Инструция на чтение.
      Но хочется прикрутить горячую кнопку.

      И как только я делаю так.

      [ENABLE]
      aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F)
      alloc(newmem,$1000,car_02)
      label(return)
      label(hot_key)
      registersymbol(hot_key)
      registersymbol(car_02)
      
      newmem:
        cmp [hot_key],01
        jne short @F
        mov [r14+000003BC],(float)1000
        mov [hot_key],00
      @@:
        mulss xmm14,[r14+000003BC]
        jmp return
      
      hot_key:
      dd 00
      
      car_02:
        jmp newmem
        nop 4
      return:
      
      [DISABLE]
      car_02:
      db F3 45 0F 59 B6 BC 03 00 00
      unregistersymbol(*)
      dealloc(newmem)
      {
      // ORIGINAL CODE - INJECTION POINT: Mafia II Definitive Edition.exe+4D8131
      Mafia II Definitive Edition.exe+4D80E6: F3 41 0F 11 A6 1C 02 00 00  - movss [r14+0000021C],xmm4
      Mafia II Definitive Edition.exe+4D80EF: F3 41 0F 10 86 D0 01 00 00  - movss xmm0,[r14+000001D0]
      Mafia II Definitive Edition.exe+4D80F8: F3 41 0F 10 8E E0 01 00 00  - movss xmm1,[r14+000001E0]
      Mafia II Definitive Edition.exe+4D8101: F3 41 0F 10 96 F0 01 00 00  - movss xmm2,[r14+000001F0]
      Mafia II Definitive Edition.exe+4D810A: F3 41 0F 11 86 00 02 00 00  - movss [r14+00000200],xmm0
      Mafia II Definitive Edition.exe+4D8113: F3 41 0F 11 8E 10 02 00 00  - movss [r14+00000210],xmm1
      Mafia II Definitive Edition.exe+4D811C: F3 41 0F 11 96 20 02 00 00  - movss [r14+00000220],xmm2
      Mafia II Definitive Edition.exe+4D8125: 49 8B 86 48 04 00 00        - mov rax,[r14+00000448]
      Mafia II Definitive Edition.exe+4D812C: 48 85 C0                    - test rax,rax
      Mafia II Definitive Edition.exe+4D812F: 74 1B                       - je "Mafia II Definitive Edition.exe"+4D814C
      // ---------- INJECTING HERE ----------
      Mafia II Definitive Edition.exe+4D8131: F3 45 0F 59 B6 BC 03 00 00  - mulss xmm14,[r14+000003BC]
      // ---------- DONE INJECTING  ----------
      Mafia II Definitive Edition.exe+4D813A: F3 44 0F 58 B0 DC 03 00 00  - addss xmm14,[rax+000003DC]
      Mafia II Definitive Edition.exe+4D8143: F3 44 0F 11 B0 DC 03 00 00  - movss [rax+000003DC],xmm14
      Mafia II Definitive Edition.exe+4D814C: 44 0F 28 74 24 40           - movaps xmm14,[rsp+40]
      Mafia II Definitive Edition.exe+4D8152: 4C 8D 9C 24 D0 00 00 00     - lea r11,[rsp+000000D0]
      Mafia II Definitive Edition.exe+4D815A: 49 8B 5B 10                 - mov rbx,[r11+10]
      Mafia II Definitive Edition.exe+4D815E: 49 8B 73 18                 - mov rsi,[r11+18]
      Mafia II Definitive Edition.exe+4D8162: 49 8B 7B 20                 - mov rdi,[r11+20]
      Mafia II Definitive Edition.exe+4D8166: 41 0F 28 73 F0              - movaps xmm6,[r11-10]
      Mafia II Definitive Edition.exe+4D816B: 41 0F 28 7B E0              - movaps xmm7,[r11-20]
      Mafia II Definitive Edition.exe+4D8170: 45 0F 28 43 D0              - movaps xmm8,[r11-30]
      }
      

      То по непонятной мне причине моё значение пишется только в 1 (первый) адрес.

      Вопрос. Почему так происходит???
      Первый раз с таким столкнулся.
      Может из-за того что взял инструкцию с умножением?

      G 3 ответов Последний ответ Ответить Цитировать 0
      • G
        garik66 @Partizan1078
        отредактировано

        Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:

        cmp [hot_key],01
        jne short @F
        mov [r14+000003BC],(float)1000
        mov [hot_key],00 // просто не обнуляй,

        1 ответ Последний ответ Ответить Цитировать 0
        • G
          garik66 @Partizan1078
          отредактировано

          @Partizan1078 либо можно сделать счетчик на 4 записи, чтобы все 4 колеса получили 1000.

          Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
          • Partizan1078P
            Partizan1078 @garik66
            отредактировано

            @garik66 Я тоже сразу подумал что за один проход не может эта инсрукция записать все 4 адреса. Прикручивал счётчик. Итог тот-же. Счётчик доводил до 100 циклов. Писалось только в первый адрес.

            1 ответ Последний ответ Ответить Цитировать 0
            • G
              garik66 @Partizan1078
              отредактировано

              Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
              Попробуй все-таки так:

              newmem:
              cmp [hot_key],01
              jne short @F
              mov [r14+000003BC],(float)1000
              // mov [hot_key],00 // без этой строки
              @@:
              mulss xmm14,[r14+000003BC]
              jmp return

              Partizan1078P 1 ответ Последний ответ Ответить Цитировать 0
              • Partizan1078P
                Partizan1078 @garik66
                отредактировано

                @garik66 Тогда как мне заставить машину больше не разгоняться. Если только в самой таблице вешать ещё одну кнопку на обнуление.

                G 1 ответ Последний ответ Ответить Цитировать 0
                • G
                  garik66 @Partizan1078
                  отредактировано

                  Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:

                  Если только в самой таблице вешать ещё одну кнопку на обнуление.

                  как вариант.
                  Странно что счетчик не сработал - я предполагал, что инструкция пробегает поочередно все 4 колеса.

                  StoneWeaverS 1 ответ Последний ответ Ответить Цитировать 0
                  • StoneWeaverS
                    StoneWeaver administrators @garik66
                    отредактировано

                    @garik66 инструкция может работать параллельно в четырех потоках, как вариант.

                    @Partizan1078 тебе нужно комплексное условие. Проще всего это сделать на Lua в СЕ, но можно и на ассемблере. Суть в том, что тебе нужен не один флаг, а четыре - на каждое колесо, и хранить во флаге не только сам флаг, но и адрес колеса. По адресу сверяться, включен ли флаг, а по горячей клавише выставлять флаг для всех четырех адресов. Если непонятно, пиши, попробую подробнее объяснить

                    1 ответ Последний ответ Ответить Цитировать 0
                    • Partizan1078P
                      Partizan1078
                      отредактировано

                      Забил и сделал проще просто повесил на обнуление ещё одну кнопку. Проще говоря одна боковая кнопка мыши включает а другая боковая кнопка выключает.

                        cmp [hot_key],01
                        jne @F
                        mov [r14+000003BC],(float)300
                      @@:
                        mulss xmm14,[r14+000003BC]
                      

                      А вот такой скрипт со счётчиком.

                      [ENABLE]
                      aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F)
                      alloc(newmem,$1000,car_02)
                      label(return)
                      label(check)
                      label(hot_key)
                      registersymbol(hot_key)
                      registersymbol(car_02)
                      
                      newmem:
                        cmp [hot_key],01
                        jne @F
                        mov [r14+000003BC],(float)100
                        add [check],01
                        cmp [check],03
                        jne newmem
                        mov [hot_key],00
                        mov [check],00
                      @@:
                        mulss xmm14,[r14+000003BC]
                        jmp return
                      
                      hot_key:
                      dd 00
                      check:
                      dd 00
                      
                      car_02:
                        jmp newmem
                        nop 4
                      return:
                      
                      [DISABLE]
                      car_02:
                      db F3 45 0F 59 B6 BC 03 00 00
                      unregistersymbol(*)
                      dealloc(newmem)
                      

                      И он не работает.

                      G 2 ответов Последний ответ Ответить Цитировать 0
                      • G
                        garik66 @Partizan1078
                        отредактировано

                        Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:

                        И он не работает.

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

                        1 ответ Последний ответ Ответить Цитировать 0
                        • G
                          garik66 @Partizan1078
                          отредактировано garik66

                          Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:

                          И он не работает.

                          Попробуй так:

                          newmem:
                            cmp [hot_key],01
                            jne @F
                            mov [r14+000003BC],(float)100
                            add [check],01
                            cmp [check],03
                            jne @F
                            mov [hot_key],00
                            mov [check],00
                          @@:
                            mulss xmm14,[r14+000003BC]
                            jmp return
                          

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

                          Partizan1078P 1 ответ Последний ответ Ответить Цитировать 1
                          • Partizan1078P
                            Partizan1078 @garik66
                            отредактировано Partizan1078

                            @garik66 Большое спасибо!
                            Чтот я тупанул и не обратил внимания на свою ошибку.
                            Сделал как вы посоветовали.
                            И всё заработало как надо.

                            [ENABLE]
                            aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F)
                            alloc(newmem,$1000,car_02)
                            label(return)
                            label(check)
                            label(hot_key)
                            registersymbol(hot_key)
                            registersymbol(car_02)
                            
                            newmem:
                              cmp [hot_key],01
                              jne @F
                              mov [r14+000003BC],(float)500
                              add [check],01
                              cmp [check],64
                              jne @F
                              mov [hot_key],00
                              mov [check],00
                            @@:
                              mulss xmm14,[r14+000003BC]
                              jmp return
                            
                            hot_key:
                            dd 00
                            check:
                            dd 00
                            
                            car_02:
                              jmp newmem
                              nop 4
                            return:
                            
                            [DISABLE]
                            car_02:
                            db F3 45 0F 59 B6 BC 03 00 00
                            unregistersymbol(*)
                            dealloc(newmem)
                            

                            https://youtu.be/YkAjpX1aaBI

                            Чтобы скрипт обернуть в тег есть кнопочка "код"

                            G 1 ответ Последний ответ Ответить Цитировать 2
                            • G
                              garik66 @Partizan1078
                              отредактировано

                              Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:

                              И всё заработало как надо.

                              Рад

                              1 ответ Последний ответ Ответить Цитировать 0
                              • A
                                Antonshka
                                отредактировано

                                Предполагаю что ошибка в отсутствии pushfq и popfq.
                                Инструкция cmp меняет флаги. По правильному нужно всегда сохранять/восстанавливать регистр EFLAGS.

                                newmem:
                                pushfq 
                                  cmp [hot_key],01
                                  jne short @F
                                  mov [r14+000003BC],(float)1000
                                  mov [hot_key],00
                                @@:
                                popfq
                                  mulss xmm14,[r14+000003BC]
                                  jmp return
                                
                                G 1 ответ Последний ответ Ответить Цитировать 0
                                • G
                                  garik66 @Antonshka
                                  отредактировано

                                  Пользователь @Antonshka написал в Mafia II-DE v.1.0.1 вращение колёс:

                                  Предполагаю что ошибка в отсутствии pushfq и popfq.

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

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • Первое сообщение
                                    Последнее сообщение