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

Partizan

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

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

  • Посещение

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

    17

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

  1. В 12.12.2022 в 19:14, Эдвард сказал:

    Сейчас пытаюсь сделать отдельный трейнер в виде EXE файла, хочу замораживать таймер, но не работает, подозреваю, что трейнер не верно собирается.

    А он наверно просто не аттачится к игре.

    Ты запускаешь трейнер уже с включенной игрой?

    Я могу дать несколько скриптов для аттача к процессу.

    Спойлер
    function myattach(timer)
      if getProcessIDFromProcessName("xxx.exe") ~= nil then
        object_destroy(timer)
        openProcess("xxx.exe") 
      end
    end
    
    t=createTimer(nil);
    timer_setInterval(t,10)
    timer_onTimer(t,myattach)

     

    Спойлер
    --------
    -------- Auto Attach to Process
    --------
    PROCESS_NAME = 'Game.exe'
    local autoAttachTimer = nil
    local autoAttachTimerInterval = 100
    local autoAttachTimerTicks = 0
    local autoAttachTimerTickMax = 5000
    
    local function autoAttachTimer_tick(timer)
        if getProcessIDFromProcessName(PROCESS_NAME) ~= nil then
            timer.destroy()
            openProcess(PROCESS_NAME)
        elseif autoAttachTimerTickMax > 0 and autoAttachTimerTicks >= autoAttachTimerTickMax then
            timer.destroy()
        end
        autoAttachTimerTicks = autoAttachTimerTicks + 1
    end
    
    autoAttachTimer = createTimer(MainForm)
    autoAttachTimer.Interval = autoAttachTimerInterval
    autoAttachTimer.OnTimer = autoAttachTimer_tick

     

    Спойлер
    attachlist=getAutoAttachList()
    stringlist_add(attachlist,"XXX.exe");

     

    Спойлер
    PROCESS_NAME = 'XXXXXXXXX.exe'
    --------
    -------- Check for process and auto attach if need be
    --------
    local autoAttachTimer = nil          ---- Declaration for our static timer object (no destroy here!)
    local autoAttachTimerInterval = 5000 ---- Timer in milliseconds
    
    function clearUserDefinedSymbols()
    	local mv,sf = getMemoryViewForm()
    	if not mv.frmSymbolhandler then
    		local mvHidden
    		if not mv.Visible then mvHidden=true,mv.Show() end
    		mv.miuserdefinedsymbols:OnClick()
    		if mvHidden then mv.hide()end
    		sf = mv.frmSymbolhandler
    		sf.Hide()
    	else
    		sf = mv.frmSymbolhandler
    	end
    	if sf ~= nil then
    		local symbol
    		for i = sf.Listview1.Items.Count - 1, 0, -1 do
    			symbol = sf.Listview1.Items.Item[i].Caption
    			unregisterSymbol(symbol)
    		end
    	end
    end
    
    local function autoAttachTimer_tick(timer) ---- Timer callback
    	---- Check to see if we are attached to the right process
    	if getProcessIDFromProcessName(PROCESS_NAME) ~= getOpenedProcessID() then
    		---- If not the right process, check if process is running and attach if exists
    		AddressList.disableAllWithoutExecute()
    		clearUserDefinedSymbols()
    		if getProcessIDFromProcessName(PROCESS_NAME) ~= nil then
    			openProcess(PROCESS_NAME) ---- Open the process
    		end
    	end
    end
    
    autoAttachTimer = createTimer(getMainForm())       ---- Create timer with the main form as it's parent
    autoAttachTimer.Interval = autoAttachTimerInterval ---- Set timer interval
    autoAttachTimer.OnTimer = autoAttachTimer_tick     ---- Set timer tick call back

     

     

    • Плюс 1
  2. 11 часов назад, Partizan сказал:

    На многих играх сделанных на анрил присутствует чит менеджер.

    Он изначально есть в конструкторе движка.

    И это не значит что разрабы не прикрутили к игре что-то другое. Другой костыль.

  3. Если поставить бряк на жизни.

    На адрес FF97CE  то он не сработает а чтобы сработал

    нужно ставить на диапазон от -1 байт от адреса до +1 байт от адреса.

    Т.е. от FF97CD до FF97CF.

    Тогда дебаггер остановится на нужной инструкции.

  4. 16 часов назад, TurkishSea сказал:

    Нашел нужный Адрес на Бесконечные жизни - FF97CE. Прочитал инструкцию по вшитию чита, но далее не понял как его найти через HEX-редактор. Какой редактор лучше взять?

    FF97CE Это адрес памяти а не рома. На него нужно установить брекпоинт. И уже на сработавшей инструкции производить манипуляции. Сделать GameGinieCode или сразу править ром.

  5. Держи ещё скрипт на Халявный крафт.(его было сделать сложней чем таймер)

    Для "приятной игры"

    Спойлер
    [ENABLE]
    aobscanmodule(FreeCraft,ProjectZeppelin-Win64-Shipping.exe,44 8B 43 08 48 8B CF 48 8B 13 E8 F1)
    alloc(newmem,$1000,FreeCraft)
    label(return)
    registersymbol(FreeCraft)
    
    newmem:
      mov [rbx+08],00
      mov r8d,[rbx+08]
      mov rcx,rdi
      jmp return
    
    FreeCraft:
      jmp newmem
      nop 2
    return:
    
    [DISABLE]
    FreeCraft:
    db 44 8B 43 08 48 8B CF
    unregistersymbol(FreeCraft)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+30
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+11: 48 8B FA        - mov rdi,rdx
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+14: 48 89 02        - mov [rdx],rax
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+17: 48 89 42 08     - mov [rdx+08],rax
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+1B: 48 8B 59 50     - mov rbx,[rcx+50]
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+1F: 48 63 71 58     - movsxd  rsi,dword ptr [rcx+58]
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+23: 48 C1 E6 04     - shl rsi,04
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+27: 48 03 F3        - add rsi,rbx
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+2A: 48 3B DE        - cmp rbx,rsi
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+2D: 74 19           - je ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+48
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+2F: 90              - nop 
    // ---------- INJECTING HERE ----------
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+30: 44 8B 43 08     - mov r8d,[rbx+08]
    // ---------- DONE INJECTING  ----------
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+34: 48 8B CF        - mov rcx,rdi
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+37: 48 8B 13        - mov rdx,[rbx]
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+3A: E8 F1 A0 FE FF  - call ProjectZeppelin-Win64-Shipping.exe+1383C80
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+3F: 48 83 C3 10     - add rbx,10
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+43: 48 3B DE        - cmp rbx,rsi
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+46: 75 E8           - jne ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+30
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+48: 48 8B 5C 24 30  - mov rbx,[rsp+30]
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+4D: 48 8B C7        - mov rax,rdi
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+50: 48 8B 74 24 38  - mov rsi,[rsp+38]
    ProjectZeppelin-Win64-Shipping.UCraftingRecipe::GetIngredientSet+55: 48 83 C4 20     - add rsp,20
    }

     

     

    • Плюс 1
  6. Как нашёл таймер. Воспользовался инструментом от Cake-san.

    И так-как уже не раз ковырял игры на Unreal Engine решил просмотреть наиболее очевидные разделы в структуре от "Мира"

    И таки да. Наткнулся на таймер.

    Спойлер

     

     

    • Плюс 1
  7. Включи скрипт а потом добавь адреса

    Спойлер
    [ENABLE]
    aobscanmodule(World,ProjectZeppelin-Win64-Shipping.exe,48 8B ? ? ? ? ? 40 88 ? ? ? ? ? 48 85 ? 74 ? 48 8B ? ? ? ? ? EB)
    alloc(newmem,$1000,World)
    label(return)
    label(_World)
    registersymbol(_World)
    registersymbol(World)
    
    newmem:
      mov [_World],rdi
      mov rax,[rdi+00000180]
      jmp return
    
    _World:
    dq 00
    
    World:
      jmp newmem
      nop 2
    return:
    
    [DISABLE]
    World:
    db 48 8B 87 80 01 00 00
    unregistersymbol(*)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E28C
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E26A: 48 85 C0              - test rax,rax
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E26D: 74 15                 - je ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E284
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E26F: 48 8B 80 88 00 00 00  - mov rax,[rax+00000088]
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E276: 48 85 C0              - test rax,rax
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E279: 74 09                 - je ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E284
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E27B: 83 B8 34 01 00 00 03  - cmp dword ptr [rax+00000134],03
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E282: 75 05                 - jne ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E289
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E284: 40 B6 01              - mov sil,01
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E287: EB 03                 - jmp ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E28C
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E289: 40 32 F6              - xor sil,sil
    // ---------- INJECTING HERE ----------
    ProjectZeppelin-Win64-Shipping.exe+307E28C: 48 8B 87 80 01 00 00  - mov rax,[rdi+00000180]
    // ---------- DONE INJECTING  ----------
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E293: 40 88 B5 40 01 00 00  - mov [rbp+00000140],sil
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E29A: 48 85 C0              - test rax,rax
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E29D: 74 09                 - je ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2A8
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E29F: 48 8B 80 D8 00 00 00  - mov rax,[rax+000000D8]
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2A6: EB 07                 - jmp ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2AF
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2A8: 48 8D 87 70 03 00 00  - lea rax,[rdi+00000370]
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2AF: 48 8B C8              - mov rcx,rax
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2B2: 48 89 45 A0           - mov [rbp-60],rax
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2B6: E8 65 B5 FE FF        - call ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+3069820
    ProjectZeppelin-Win64-Shipping.exe.unpacked.exe+307E2BB: 40 84 F6              - test sil,sil
    }

     

    [[_World]+120]+278 PlayTime

    [[_World]+118]+48C PlayTimeLimit

    Спойлер

    qwe213423.png

     

    • Плюс 1
  8. Спойлер

     

    Спойлер
    [ENABLE]
    aobscanmodule(TimerMss,DriverParallelLines.exe,D9 01 D8 64 24 04)
    alloc(newmem,$1000)
    label(return)
    registersymbol(TimerMss)
    
    newmem:
      mov [ecx],(float)6250
      fld dword ptr [ecx]
      fsub dword ptr [esp+04]//Можно просто её занопить
      jmp return
    
    TimerMss:
      jmp newmem
      nop
    return:
    
    [DISABLE]
    TimerMss:
    db D9 01 D8 64 24 04
    unregistersymbol(TimerMss)
    dealloc(newmem)
    {
    // ORIGINAL CODE - INJECTION POINT: DriverParallelLines.exe+6B0CC
    DriverParallelLines.exe+6B0B1: C2 04 00                 - ret 0004
    DriverParallelLines.exe+6B0B4: 80 79 05 00              - cmp byte ptr [ecx+05],00
    DriverParallelLines.exe+6B0B8: 74 04                    - je DriverParallelLines.exe+6B0BE
    DriverParallelLines.exe+6B0BA: D9 01                    - fld dword ptr [ecx]
    DriverParallelLines.exe+6B0BC: EB 14                    - jmp DriverParallelLines.exe+6B0D2
    DriverParallelLines.exe+6B0BE: 80 79 06 00              - cmp byte ptr [ecx+06],00
    DriverParallelLines.exe+6B0C2: 74 08                    - je DriverParallelLines.exe+6B0CC
    DriverParallelLines.exe+6B0C4: D9 44 24 04              - fld dword ptr [esp+04]
    DriverParallelLines.exe+6B0C8: D8 01                    - fadd dword ptr [ecx]
    DriverParallelLines.exe+6B0CA: EB 06                    - jmp DriverParallelLines.exe+6B0D2
    // ---------- INJECTING HERE ----------
    DriverParallelLines.exe+6B0CC: D9 01                    - fld dword ptr [ecx]
    // ---------- DONE INJECTING  ----------
    DriverParallelLines.exe+6B0CE: D8 64 24 04              - fsub dword ptr [esp+04]
    DriverParallelLines.exe+6B0D2: C2 04 00                 - ret 0004
    DriverParallelLines.exe+6B0D5: A1 B0 C5 70 00           - mov eax,[DriverParallelLines.exe+30C5B0]
    DriverParallelLines.exe+6B0DA: F3 0F 2A 40 04           - cvtsi2ss xmm0,[eax+04]
    DriverParallelLines.exe+6B0DF: F3 0F 59 05 F4 13 64 00  - mulss xmm0,[DriverParallelLines.exe+2413F4]
    DriverParallelLines.exe+6B0E7: 32 C0                    - xor al,al
    DriverParallelLines.exe+6B0E9: F3 0F 11 01              - movss [ecx],xmm0
    DriverParallelLines.exe+6B0ED: 88 41 04                 - mov [ecx+04],al
    DriverParallelLines.exe+6B0F0: C6 41 05 01              - mov byte ptr [ecx+05],01
    DriverParallelLines.exe+6B0F4: 88 41 06                 - mov [ecx+06],al
    }

     

    Время хранится как 3 разных числа

    1 чило минуты 2 секунды и тд.

    хранятся они как float но заморозить их не выйдет.

    Как ломал

    От инструкции сработавщей на секундах трейсил и шёл вверх по коду.

    И снова трейсил от начала вызова. 

    И наткнулся на это.

    • Плюс 2
  9. Mazeltov Я не знаю как устроена структура этой игры на пс. Но на пк игровое бессмертие лежит в начале структуры игрока.

    Спойлер
    0000 - 4 Bytes    12E731E0 : 0    
    0004 - GodMode=1  12E731E4 : 0    
    0008 - 4 Bytes    12E731E8 : 1    
    000C - 4 Bytes    12E731EC : 0    
    0010 - Double     12E731F0 : 396  
    0018 - Double     12E731F8 : 156  
    0020 - Coord_X    12E73200 : 445.606160083037   
    0028 - Coord_Y    12E73208 : 86   
    00E8 - Jump_Hight 12E732C8 : 1   

     

    Можно попробовать найти координату Х и уже от неё бессмертие.

    Как найти координату Х. Бежишь влево уменьшилось вправо увеличилось.(double)

    И уже координата Х -1C. Это и будет адресс бессмертия(игрового)

  10. DieVis ты в своём скрипте на бессмертие явно что-то забыл дописать.

    Спойлер
    { Game   : N++.exe
      Version: v24.04.2017 Fixed Repack
      Date   : 2022-09-29
      Author : DieVision }
    [ENABLE]
    aobscanmodule(GodMode,npp.dll,8B 0E 83 F9 08)
    alloc(newmem,$1000)
    label(code)
    label(return)
    registersymbol(GodMode)
    newmem:
      cmp edi,08
      mov [esi+4],(byte)1
    code:
      mov ecx,[esi]
      cmp ecx,08
      jmp return
    
    GodMode:
      jmp newmem
    
    return:
    [DISABLE]
    GodMode:
      db 8B 0E 83 F9 08
    unregistersymbol(GodMode)
    dealloc(newmem)
    { // ORIGINAL CODE - INJECTION POINT: npp.dll.text+19267B
    npp.dll.text+19266C: CC                    - int 3 
    npp.dll.text+19266D: CC                    - int 3 
    npp.dll.text+19266E: CC                    - int 3 
    npp.dll.text+19266F: CC                    - int 3 
    npp.dll.text+192670: 55                    - push ebp
    npp.dll.text+192671: 8B EC                 - mov ebp,esp
    npp.dll.text+192673: 83 EC 14              - sub esp,14
    npp.dll.text+192676: 33 C0                 - xor eax,eax
    npp.dll.text+192678: 56                    - push esi
    npp.dll.text+192679: 8B F1                 - mov esi,ecx
    // ---------- INJECTING HERE ----------
    npp.dll.text+19267B: 8B 0E                 - mov ecx,[esi]
    // ---------- DONE INJECTING  ----------
    npp.dll.text+19267D: 83 F9 08              - cmp ecx,08
    npp.dll.text+192680: 73 12                 - jae npp.dll.text+192694
    npp.dll.text+192682: A1 B8 E4 80 72        - mov eax,[npp.dll+E8E4B8]
    npp.dll.text+192687: 8B 80 10 08 00 00     - mov eax,[eax+00000810]
    npp.dll.text+19268D: 8B 84 88 10 B7 B3 06  - mov eax,[eax+ecx*4+06B3B710]
    npp.dll.text+192694: 3B 86 40 0B 00 00     - cmp eax,[esi+00000B40]
    npp.dll.text+19269A: 74 0D                 - je npp.dll.text+1926A9
    npp.dll.text+19269C: 8B CE                 - mov ecx,esi
    npp.dll.text+19269E: 89 86 40 0B 00 00     - mov [esi+00000B40],eax
    npp.dll.text+1926A4: E8 27 04 00 00        - call npp.dll.text+192AD0 }

     

    Сравнение есть а прыжка нету.

  11. Тоже стало интересно. Решил глянуть.

    Искал так. 

    1 поиск 4 байта неизвестное

    2 умер отсеил как увеличилось

    3 воскрес отсеил как уменьшилось

    4 побегал туда-сюда. Не изменилось.

    5 умер увеличилось. Ну и тд.

    В итоге нашёлся адресс. 0=жив; 6-7=мёртв.

    Ну а дальше всё просто. Бряк на запись. При смерти срабатывает 2 инструкции. Беру ту что выше стоит по коду

    mov [esi+000000D0],00000006

    Если просто занопить то ни чё не выйдет.

    Ставлю трейс. Выхожу из кола. 

    728F2DBD - mov ecx,[esi+000000D0]
    728F2DC3 - cmp ecx,09
    728F2DC6 - je 728F365D
    728F2DCC - cmp ecx,06
    728F2DCF - je 728F365D
    728F2DD5 - cmp ecx,07
    728F2DD8 - jne 728F2DEC
    728F2DDA - sub esp,08
    728F2DDD - mov ecx,esi
    728F2DDF - call 728F3700--вышел из него
    728F2DE4 - pop edi
    728F2DE5 - pop esi

    Что-то пишется в есх.

    3 сравнения с перепрыгивание вызова но 2 из них далеко прыгают.

    Меняю jne 728F2DEC на безусловный.

    Всё ГГ не умирает. По крайней мере от мин.(дальше проходить нет желания чтоб проверить на чём то другом)

    P.S. Если взять esi как начало структуры от этой инструкции mov ecx,[esi+000000D0]

    поменять на единичку esi+4. То включится игровое бессмертие ГГ.

     

    Спойлер
    [ENABLE]
    aobscanmodule(GodMod,npp.dll,75 ? 83 ? ? 8B ? E8 ? ? ? ? 5F 5E)
    registersymbol(GodMod)
    GodMod:
    db EB 12
    
    [DISABLE]
    GodMod:
    db 75 12
    unregistersymbol(GodMod)
    {
    // ORIGINAL CODE - INJECTION POINT: npp.dll+192DD8
    npp.dll+192DA1: 75 1A                          - jne npp.dll+192DBD
    npp.dll+192DA3: F3 0F 6F 86 20 01 00 00        - movdqu xmm0,[esi+00000120]
    npp.dll+192DAB: C7 86 90 01 00 00 00 00 00 00  - mov [esi+00000190],00000000
    npp.dll+192DB5: F3 0F 7F 86 A8 01 00 00        - movdqu [esi+000001A8],xmm0
    npp.dll+192DBD: 8B 8E D0 00 00 00              - mov ecx,[esi+000000D0]
    npp.dll+192DC3: 83 F9 09                       - cmp ecx,09
    npp.dll+192DC6: 0F 84 91 08 00 00              - je npp.dll+19365D
    npp.dll+192DCC: 83 F9 06                       - cmp ecx,06
    npp.dll+192DCF: 0F 84 88 08 00 00              - je npp.dll+19365D
    npp.dll+192DD5: 83 F9 07                       - cmp ecx,07
    // ---------- INJECTING HERE ----------
    npp.dll+192DD8: 75 12                          - jne npp.dll+192DEC
    // ---------- DONE INJECTING  ----------
    npp.dll+192DDA: 83 EC 08                       - sub esp,08
    npp.dll+192DDD: 8B CE                          - mov ecx,esi
    npp.dll+192DDF: E8 1C 09 00 00                 - call npp.dll+193700
    npp.dll+192DE4: 5F                             - pop edi
    npp.dll+192DE5: 5E                             - pop esi
    npp.dll+192DE6: 8B E5                          - mov esp,ebp
    npp.dll+192DE8: 5D                             - pop ebp
    npp.dll+192DE9: C2 0C 00                       - ret 000C
    npp.dll+192DEC: 83 F9 08                       - cmp ecx,08
    npp.dll+192DEF: 75 2E                          - jne npp.dll+192E1F
    }

     

     

    • Плюс 1
  12. 19 часов назад, Antonshka сказал:

    Да, это для плавности. Домножение должно осуществляться в самой игровой функции, самим игровым потоком. Через FPU или SSE.

    Я поток не создавал. Использовал созданый игрой. А чем плохо умножение Float через xmm/

     

    Спойлер

    Я бы сказал у xmm даже есть приимущество по сравнению с FPU процессором

    Можно в 1 регистр записать сразу 4 значения.

     

    Я не гнушаюсь и FPU.

    Спойлер

     

     

    Спойлер
    [ENABLE]
    aobscanmodule(MoveSpeed,cf3.exe,D9 00 D9 1B D9 40 04 D9 5B 04 D9 40 08 D9 5B 08 EB C4 56 E8 80)
    aobscanmodule(MoveSpeed_02,cf3.exe,D9 00 D9 1B D9 40 04 D9 5B 04 D9 40 08 D9 5B 08 EB C4 56 E8 80)
    alloc(newmem,$1000)
    alloc(newmem_02,$1000)
    label(return)
    label(return_02)
    label(imul_value)
    registersymbol(imul_value)
    registersymbol(MoveSpeed)
    registersymbol(MoveSpeed_02)
    
    newmem:
      fld dword ptr [eax]
      cmp [esp+38],80000000
      jne short @F
      fmul [imul_value]
    @@:
      fstp dword ptr [ebx]
      fld dword ptr [eax+04]
      jmp return
    
    newmem_02:
      fld dword ptr [eax+08]
      cmp [esp+38],80000000
      jne short @F
      fmul [imul_value]
    @@:
      fstp dword ptr [ebx+08]
      jmp return_02
    
    imul_value:
    dd (float)2
    
    MoveSpeed:
      jmp newmem
      nop 2
    return:
    
    MoveSpeed_02+0A:
      jmp newmem_02
      nop
    return_02:
    
    [DISABLE]
    MoveSpeed:
    db D9 00 D9 1B D9 40 04
    MoveSpeed_02+0A:
    db D9 40 08 D9 5B 08
    unregistersymbol(*)
    dealloc(*)
    {
    // ORIGINAL CODE - INJECTION POINT: cf3.exe+3EB828
    cf3.exe+3EB811: E8 EA 21 FD FF  - call cf3.exe+3BDA00
    cf3.exe+3EB816: 83 C4 0C        - add esp,0C
    cf3.exe+3EB819: 5F              - pop edi
    cf3.exe+3EB81A: 5D              - pop ebp
    cf3.exe+3EB81B: 5B              - pop ebx
    cf3.exe+3EB81C: B8 01 00 00 00  - mov eax,00000001
    cf3.exe+3EB821: 5E              - pop esi
    cf3.exe+3EB822: 59              - pop ecx
    cf3.exe+3EB823: C3              - ret 
    cf3.exe+3EB824: 8B 44 24 10     - mov eax,[esp+10]
    // ---------- INJECTING HERE ----------
    cf3.exe+3EB828: D9 00           - fld dword ptr [eax]
    // ---------- DONE INJECTING  ----------
    cf3.exe+3EB82A: D9 1B           - fstp dword ptr [ebx]
    cf3.exe+3EB82C: D9 40 04        - fld dword ptr [eax+04]
    cf3.exe+3EB82F: D9 5B 04        - fstp dword ptr [ebx+04]
    cf3.exe+3EB832: D9 40 08        - fld dword ptr [eax+08]
    cf3.exe+3EB835: D9 5B 08        - fstp dword ptr [ebx+08]
    cf3.exe+3EB838: EB C4           - jmp cf3.exe+3EB7FE
    cf3.exe+3EB83A: 56              - push esi
    cf3.exe+3EB83B: E8 80 FA FF FF  - call cf3.exe+3EB2C0
    cf3.exe+3EB840: 83 C4 04        - add esp,04
    cf3.exe+3EB843: 5E              - pop esi
    }

     

     

  13. В 10.11.2022 в 07:43, Antonshka сказал:

    Но как по мне, лучше дать самому потоку плавно домножать velocity. 

    Согласень так лучше смотрелось бы. Вопрос реализации.

    Показал бы как хоть на той же МТХ.

    А про горячие кнопки....???? Смысл?

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

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

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