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

Partizan

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

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

  • Посещение

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

    17

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

  1. В 26.10.2022 в 21:00, Antonshka сказал:

    В скрипте нужно еще учитывать углы поворота транспорта. Для лучшего эффекта. Иначе при движении по дуге и при использовании спидхака транспорт будет уезжать с дороги. Это насколько я помню.

    Конечно нужно. Но способ рабочий. Причём не только для этой игры но и для тех игр где можно найти velocity. 

    Как пример.

    Спойлер
    [ENABLE]
    {$lua}
    function SpeedHack1()
    boost = 1.5
    if (readBytes('[_date_01]') ~= nil) then
    writeFloat ('[_date_01]', readFloat('[_date_01]')*boost)
    writeFloat ('[_date_01]+04', readFloat('[_date_01]+04')*boost)
    end
    end
    createHotkey(SpeedHack1, VK_XBUTTON1)
    
    function SpeedHack2()
    boost = 0.5
    if (readBytes('[_date_01]') ~= nil) then
    writeFloat ('[_date_01]', readFloat('[_date_01]')*boost)
    writeFloat ('[_date_01]+04', readFloat('[_date_01]+04')*boost)
    end
    end
    createHotkey(SpeedHack2, VK_XBUTTON2)
    {$asm}
    aobscanmodule(Boost,GTA5.exe,F3 ? ? ? F3 ? ? ? ? F3 ? ? ? F3 ? ? ? F3 ? ? ? ? ? ? ? 44 39)
    alloc(newmem,$1000,Boost)
    label(return)
    label(_date_01)
    registersymbol(_date_01)
    registersymbol(Boost)
    
    newmem:
      mov [_date_01],rax
      mulss xmm0,[rax]
      mulss xmm6,[rax+08]
      jmp return
    
    _date_01:
    dq 00
    
    Boost:
      jmp newmem
      nop 4
    return:
    
    [DISABLE]
    Boost:
    db F3 0F 59 00 F3 0F 59 70 08
    unregistersymbol(*)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: GTA5.exe+A54169
    GTA5.exe+A54140: 0F 84 05 01 00 00        - je GTA5.exe+A5424B
    GTA5.exe+A54146: 48 8B 07                 - mov rax,[rdi]
    GTA5.exe+A54149: 0F 28 77 70              - movaps xmm6,[rdi+70]
    GTA5.exe+A5414D: 48 8B CF                 - mov rcx,rdi
    GTA5.exe+A54150: FF 90 70 03 00 00        - call qword ptr [rax+00000370]
    GTA5.exe+A54156: 0F 28 FE                 - movaps xmm7,xmm6
    GTA5.exe+A54159: 0F 28 C6                 - movaps xmm0,xmm6
    GTA5.exe+A5415C: 0F C6 FE 55              - shufps xmm7,xmm6,55
    GTA5.exe+A54160: 0F C6 F6 AA              - shufps xmm6,xmm6,-56
    GTA5.exe+A54164: F3 0F 59 78 04           - mulss xmm7,[rax+04]
    // ---------- INJECTING HERE ----------
    GTA5.exe+A54169: F3 0F 59 00              - mulss xmm0,[rax]
    // ---------- DONE INJECTING  ----------
    GTA5.exe+A5416D: F3 0F 59 70 08           - mulss xmm6,[rax+08]
    GTA5.exe+A54172: F3 0F 58 F8              - addss xmm7,xmm0
    GTA5.exe+A54176: F3 0F 58 FE              - addss xmm7,xmm6
    GTA5.exe+A5417A: F3 0F 59 3D DA 3E FB 00  - mulss xmm7,[GTA5.exe+1A0805C]
    GTA5.exe+A54182: 44 39 BD 98 00 00 00     - cmp [rbp+00000098],r15d
    GTA5.exe+A54189: 0F 84 89 00 00 00        - je GTA5.exe+A54218
    GTA5.exe+A5418F: 48 8B CF                 - mov rcx,rdi
    GTA5.exe+A54192: E8 E1 74 4C 00           - call GTA5.exe+F1B678
    GTA5.exe+A54197: 84 C0                    - test al,al
    GTA5.exe+A54199: 74 7D                    - je GTA5.exe+A54218
    }

     

    V. 1.0.2699/1.63

  2. 55 минут назад, kenshin сказал:

    Ребят, выложите пожалуйста эмуль с отладчиком

    И правда ссылка битая. Хорошо что у меня остался он на диске.

    Gens 2.11_DBG

    virustotal    4 из 61 ругаются на изменённый упаковщик upx

  3. 12 часов назад, BadBoy сказал:

    Ещё хотел узнать, вы в конце скрипта, в колонке [DISABLE] прописали команду unregistersymbol(*), таким образом вы удалили два ранее созданных registersymbol(_item) и registersymbol(Items)?

    Да. Также можно и delloc(*) и всё остальное.

     

    6 часов назад, Xipho сказал:

    В данном случае int3 и jmp return в секции newmem не имеют смысла, поскольку выход из инъекции произойдет по ret. Их можно даже не прописывать в newmem.

    Это СЕ так создал скрипт а я не обратил внимание. 

  4. У тебя в скрипте 2 раза прописано 

    registersymbol(_Items)

    Есть alloc(_pitem,8) но нету delloc(_pitem,8)

    И как по мне метка exit: мусор

    Я переделал твой скрипт так как привык делать я.

    Спойлер
    [ENABLE]
    aobscanmodule(Items,Anno5.exe,CC CC CC CC CC CC 8B 41 ? C3 CC CC CC CC CC CC CC CC CC CC CC CC 48 89 ? ? ? 53 48 83 EC ? 48 8B ? 48 8D)
    alloc(newmem,$1000,Items)
    label(return)
    label(_item)
    registersymbol(_item)
    registersymbol(Items)
    
    newmem:
      mov [_item],rcx
      mov eax,[rcx+0C]
      ret 
      int 3 
      jmp return
    
    _item:
    db 00
    
    Items+06:
      jmp newmem
    return:
    
    [DISABLE]
    Items+06:
    db 8B 41 0C C3 CC
    unregistersymbol(*)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: Anno5.CGUIEventScriptingSlot::GetContext+9780
    Anno5.CGUIEventScriptingSlot::GetContext+976D: E8 8E 6E 6E 00  - call Anno5.exe+76F4A0
    Anno5.CGUIEventScriptingSlot::GetContext+9772: 48 89 73 20     - mov [rbx+20],rsi
    Anno5.CGUIEventScriptingSlot::GetContext+9776: B0 01           - mov al,01
    Anno5.CGUIEventScriptingSlot::GetContext+9778: EB CB           - jmp Anno5.CGUIEventScriptingSlot::GetContext+9745
    Anno5.CGUIEventScriptingSlot::GetContext+977A: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+977B: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+977C: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+977D: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+977E: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+977F: CC              - int 3 
    // ---------- INJECTING HERE ----------
    Anno5.CGUIEventScriptingSlot::GetContext+9780: 8B 41 0C        - mov eax,[rcx+0C]
    // ---------- DONE INJECTING  ----------
    Anno5.CGUIEventScriptingSlot::GetContext+9783: C3              - ret 
    Anno5.CGUIEventScriptingSlot::GetContext+9784: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+9785: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+9786: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+9787: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+9788: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+9789: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+978A: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+978B: CC              - int 3 
    Anno5.CGUIEventScriptingSlot::GetContext+978C: CC              - int 3 
    }

     

    В таблицу добавляешь адрес [_item]+0C

    • Плюс 1
  5. Почему я могу редактировать свои сообщения только N-ное кол-во времени. Почему не сделать эту возможность постоянной.

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

  6. Косяк с скриптом.Поспешил. ecx+14 это оказалось ранг

    Спойлер
    [ENABLE]
    aobscanmodule(HP,cf3.exe,2C 8B 10 89 11 8B 50 04)
    alloc(newmem,$1000)
    label(return)
    registersymbol(HP)
    
    newmem:
      cmp [esp+0C],4E//фильтр от всего кроме игрока и врагов
      jne short @F
      cmp [ecx+18],03//непосредственно фильтр на игрока
      jne short @F
      mov edx,(float)1000
      mov [ecx+14],(float)16//Ранг игрока 16 максимум
    @@:
      mov [ecx],edx
      mov edx,[eax+04]
      jmp return
    
    
    HP+03:
      jmp newmem
    return:
    
    [DISABLE]
    HP+03:
    db 89 11 8B 50 04
    unregistersymbol(*)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: cf3.exe+199D95
    
    cf3.exe+199D75: E8 76 F0 FF FF     - call cf3.exe+198DF0
    cf3.exe+199D7A: 8B F8              - mov edi,eax
    cf3.exe+199D7C: 83 C4 0C           - add esp,0C
    cf3.exe+199D7F: 85 FF              - test edi,edi
    cf3.exe+199D81: 75 6E              - jne cf3.exe+199DF1
    cf3.exe+199D83: 8B 4C 24 10        - mov ecx,[esp+10]
    cf3.exe+199D87: 83 46 08 F8        - add dword ptr [esi+08],-08
    cf3.exe+199D8B: 80 66 05 F7        - and byte ptr [esi+05],-09
    cf3.exe+199D8F: 8B 44 24 2C        - mov eax,[esp+2C]
    cf3.exe+199D93: 8B 10              - mov edx,[eax]
    // ---------- INJECTING HERE ----------
    cf3.exe+199D95: 89 11              - mov [ecx],edx
    // ---------- DONE INJECTING  ----------
    cf3.exe+199D97: 8B 50 04           - mov edx,[eax+04]
    cf3.exe+199D9A: 89 51 04           - mov [ecx+04],edx
    cf3.exe+199D9D: B9 04 00 00 00     - mov ecx,00000004
    cf3.exe+199DA2: 39 48 04           - cmp [eax+04],ecx
    cf3.exe+199DA5: 0F 8C 8C 00 00 00  - jl cf3.exe+199E37
    cf3.exe+199DAB: 8B 00              - mov eax,[eax]
    cf3.exe+199DAD: F6 40 05 03        - test byte ptr [eax+05],03
    cf3.exe+199DB1: 0F 84 80 00 00 00  - je cf3.exe+199E37
    cf3.exe+199DB7: 84 4B 05           - test [ebx+05],cl
    cf3.exe+199DBA: 74 7B              - je cf3.exe+199E37
    }

     

     

  7. Как же оказалось всё просто. И что я раньше тупил? С этими жизнями.

    Спойлер
    [ENABLE]
    aobscanmodule(HP,cf3.exe,2C 8B 10 89 11 8B 50 04)
    alloc(newmem,$1000)
    label(return)
    registersymbol(HP)
    
    newmem:
      cmp [esp+0C],4E//фильтр от всего кроме игрока и врагов
      jne short @F
      cmp [ecx+14],3F800000//непосредственно фильтр на игрока
      jne short @F
      mov edx,(float)10
    @@:
      mov [ecx],edx
      mov edx,[eax+04]
      jmp return
    
    HP+03:
      jmp newmem
    return:
    
    [DISABLE]
    HP+03:
    db 89 11 8B 50 04
    unregistersymbol(*)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: cf3.exe+199D95
    cf3.exe+199D75: E8 76 F0 FF FF     - call cf3.exe+198DF0
    cf3.exe+199D7A: 8B F8              - mov edi,eax
    cf3.exe+199D7C: 83 C4 0C           - add esp,0C
    cf3.exe+199D7F: 85 FF              - test edi,edi
    cf3.exe+199D81: 75 6E              - jne cf3.exe+199DF1
    cf3.exe+199D83: 8B 4C 24 10        - mov ecx,[esp+10]
    cf3.exe+199D87: 83 46 08 F8        - add dword ptr [esi+08],-08
    cf3.exe+199D8B: 80 66 05 F7        - and byte ptr [esi+05],-09
    cf3.exe+199D8F: 8B 44 24 2C        - mov eax,[esp+2C]
    cf3.exe+199D93: 8B 10              - mov edx,[eax]
    // ---------- INJECTING HERE ----------
    cf3.exe+199D95: 89 11              - mov [ecx],edx
    // ---------- DONE INJECTING  ----------
    cf3.exe+199D97: 8B 50 04           - mov edx,[eax+04]
    cf3.exe+199D9A: 89 51 04           - mov [ecx+04],edx
    cf3.exe+199D9D: B9 04 00 00 00     - mov ecx,00000004
    cf3.exe+199DA2: 39 48 04           - cmp [eax+04],ecx
    cf3.exe+199DA5: 0F 8C 8C 00 00 00  - jl cf3.exe+199E37
    cf3.exe+199DAB: 8B 00              - mov eax,[eax]
    cf3.exe+199DAD: F6 40 05 03        - test byte ptr [eax+05],03
    cf3.exe+199DB1: 0F 84 80 00 00 00  - je cf3.exe+199E37
    cf3.exe+199DB7: 84 4B 05           - test [ebx+05],cl
    cf3.exe+199DBA: 74 7B              - je cf3.exe+199E37
    }

     

    Спойлер

     

     

  8. Посмотрел я её. Версия  39 GOG

    Не чего там в стеке крутить не надо.

    Просто трейсиш с условием и поднимаешься вверх.  Смотришь за регистрами.

    В условие трейса ставишь то что выдаёт сработавшая инструкция на адресе.

    На жизни и патроны получилось так сделать.

     

    найти все вариации в смещений "ebp-38"?

    ищи выше по коду что пишет в ebp-38

     

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

    Остальное пришлось сравнивать по стеку.

     

    • Плюс 1
  9. Положу это сюда. Может кому пригодится.

     

    Спойлер
    [ENABLE]
    {$lua}
    function SpeedHack1()
    boost = 1.5
    if (readBytes('[coord_X_Y]') ~= nil) then
    writeFloat ('[coord_X_Y]+18', readFloat('[coord_X_Y]+18')*boost)
    writeFloat ('[coord_X_Y]+20', readFloat('[coord_X_Y]+20')*boost)
    end
    end
    createHotkey(SpeedHack1, VK_UP)
    
    function SpeedHack2()
    boost = 0.1
    if (readBytes('[coord_X_Y]') ~= nil) then
    writeFloat ('[coord_X_Y]+18', readFloat('[coord_X_Y]+18')*boost)
    writeFloat ('[coord_X_Y]+20', readFloat('[coord_X_Y]+20')*boost)
    end
    end
    createHotkey(SpeedHack2, VK_DOWN)
    
    {$asm}
    aobscanmodule(SpeedXY,MTX.exe,D9 ? ? D9 ? ? ? D8 ? ? D9 ? ? D9 ? ? ? ? ? D9 ? D8)
    alloc(newmem,$1000)
    label(return)
    label(coord_X_Y)
    registersymbol(coord_X_Y)
    registersymbol(SpeedXY)
    
    newmem:
      mov [coord_X_Y],esi
      fstp dword ptr [esi+20]
      fld dword ptr [esp+14]
      jmp return
    
    coord_X_Y:
    db 00
    
    SpeedXY:
      jmp newmem
      nop 2
    return:
    [DISABLE]
    
    SpeedXY:
    db D9 5E 20 D9 44 24 14
    unregistersymbol(*)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: MTX.exe+BB15C
    MTX.exe+BB13C: D9 C9              - fxch st(1)
    MTX.exe+BB13E: D8 4E 34           - fmul dword ptr [esi+34]
    MTX.exe+BB141: D9 5C 24 14        - fstp dword ptr [esp+14]
    MTX.exe+BB145: D8 46 18           - fadd dword ptr [esi+18]
    MTX.exe+BB148: D9 5E 18           - fstp dword ptr [esi+18]
    MTX.exe+BB14B: D9 44 24 0C        - fld dword ptr [esp+0C]
    MTX.exe+BB14F: D8 46 1C           - fadd dword ptr [esi+1C]
    MTX.exe+BB152: D9 5E 1C           - fstp dword ptr [esi+1C]
    MTX.exe+BB155: D9 44 24 10        - fld dword ptr [esp+10]
    MTX.exe+BB159: D8 46 20           - fadd dword ptr [esi+20]
    // ---------- INJECTING HERE ----------
    MTX.exe+BB15C: D9 5E 20           - fstp dword ptr [esi+20]
    // ---------- DONE INJECTING  ----------
    MTX.exe+BB15F: D9 44 24 14        - fld dword ptr [esp+14]
    MTX.exe+BB163: D8 46 24           - fadd dword ptr [esi+24]
    MTX.exe+BB166: D9 5E 24           - fstp dword ptr [esi+24]
    MTX.exe+BB169: D9 86 C0 04 00 00  - fld dword ptr [esi+000004C0]
    MTX.exe+BB16F: D9 C0              - fld st(0)
    MTX.exe+BB171: D8 4E 58           - fmul dword ptr [esi+58]
    MTX.exe+BB174: D9 C1              - fld st(1)
    MTX.exe+BB176: D8 4E 5C           - fmul dword ptr [esi+5C]
    MTX.exe+BB179: D9 5C 24 0C        - fstp dword ptr [esp+0C]
    MTX.exe+BB17D: D9 C1              - fld st(1)
    }

     

     

    • Плюс 1
  10. Всё нормально ищется. Ищи координаты. Как найдёшь в их структуре уже ищи значения.

    При наборе скорости если значение координаты увеличивается то ищи значение как увеличилось 

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

    Когда стоишь отсеивай как диапазон от -1 до +1.

    Так найдешь значения отвечающие за ускорение. На каждой координате оно своё.

     

     

     

    • Плюс 2
×
×
  • Создать...

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

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