BitKit Опубликовано 6 августа, 2019 Поделиться Опубликовано 6 августа, 2019 Спойлер // Player Hero at Mission (all the time) _MonPlayerHero: mov [pHero],r14 _ExitMPH: lea rcx,[r14+00000688] // Original code jmp _BackMPH // Back to main code //========================================= 200b # // During Mission (Health points) _GodMode: mov [pLast],rcx movss [fLast],xmm1 cmp rcx,[pHero] je _GodMD00 mov rax,[rcx+00000658] test rax,rax jz _ExitGMD cmp byte ptr [rax+00000174],00 jne _GodMD01 cmp dword ptr [iEnableGMO],0 je _ExitGMD // Jump if feature is disabled _GodMD00: cmp dword ptr [iEnableGMD],0 je _ExitGMD // Jump if feature is disabled maxss xmm1,[fSmallval] jmp _ExitGMD //-- _GodMD01: cmp dword ptr [iEnableMQK],0 je _ExitGMD // Jump if feature is disabled minss xmm1,[fBigVal] _ExitGMD: mov rsi,r9 // Original code mov r13,r8 // Original code jmp _BackGMD // Back to main code //--------------- fSmallval: dd (float)0.0001 fBigVal: dd (float)-16800.0 Скрипт взят с fearlessrevolution.com С первоначальным автором скрипта (для версий до 2.0.0b) связаться не удалось, поэтому пытаюсь сам понять ход его действий, выходит так себе. К сути. Есть участок кода, отвечающий за бессмертие и быстрое убийство.Чтобы не подыхать на старте задания от действия скрипта происходит проверка "на миссии ли игрок", далее каким то образом происходит проверка "свой чужой". При просмотре адресов и структур, с которыми взаимодействуют приведенные строки кода вменяемая картина тоже не вырисовывается. Значения адресов, с которыми происходит взаимодействие, с каждым шагом приобретают рандомные значения и понять к чему они относятся не удается. Попытка поиска функций чтения-записи здоровья по поиску экранных значений так же ни к чему не привели - поиск находит 0 адресов по поиску по значению, а тот float, который изменяется от 0 до 1, не помог как точка отсчета. Итого: 1. Непонятно к чему именно создатель чита привязался для проверки "игрок на миссии". 2. Как он вышел на приведенную функцию и почему использует метод "наибольшее" для бессмертия и "наименьшее" для быстрого убийства. Ссылка на комментарий Поделиться на другие сайты Поделиться
BitKit Опубликовано 6 августа, 2019 Автор Поделиться Опубликовано 6 августа, 2019 Полный листинг: Спойлер <?xml version="1.0" encoding="utf-8"?> <CheatTable CheatEngineTableVersion="28"> <CheatEntries> <CheatEntry> <ID>0</ID> <Description>"CompactMode"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] LuaCall(function cycleFullCompact(sender,force) local state = not(compactmenuitem.Caption == 'Compact View Mode'); if force~=nil then state = not force end; compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'; getMainForm().Splitter1.Visible = state; getMainForm().Panel4.Visible = state; getMainForm().Panel5.Visible = state; end; function addCompactMenu() if compactmenualreadyexists then return end; local parent = getMainForm().Menu.Items; compactmenuitem = createMenuItem(parent); parent.add(compactmenuitem); compactmenuitem.Caption = 'Compact View Mode'; compactmenuitem.OnClick = cycleFullCompact; compactmenualreadyexists = 'yes'; end; addCompactMenu(); cycleFullCompact(nil,true)) [DISABLE] LuaCall(cycleFullCompact(nil,false)) </AssemblerScript> </CheatEntry> <CheatEntry> <ID>141</ID> <Description>"[X] <== Warhammer Inquisitor - Martyr v2.1.0b Steam"</Description> <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/> <LastState Activated="1"/> <Color>FF0000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>{ =========================================== Game Title : Warhammer 40K Inquisitor Martyr Game Version : 2.1.0b Game Sponsor : Myself (with Patreon funds) Process Name : Warhammer.exe Relevant Info : 64bits/RPG Authors : Recifense / Zanzer / Gigex Features: - God Mode - Include companions (s1.1) - Adrenaline - Suppression Resistense - Unlimited Ammo - No Weapon Heat (new)(s2.0) - Quick Kill (new)(s3.0) - Quick Warp Heat recover (s4.5) - Movement Speed - Unlimited Zoom - No Cooldown =========================================== } [ENABLE] AOBScanModule(MOPH,Warhammer.exe,49 8d 8e 88 06 00 00 e8 ?? ?? ?? ?? 44 0f 28 c0 49 8b 06 49 8b) AOBScanModule(GDMD,Warhammer.exe,49 8b f1 4d 8b e8 0f 28 f9 48 8b f9 48 8b 01 ff 90 68 01 00 00) AOBScanModule(MOHA,Warhammer.exe,45 8B F8 44 0F 28 C1 48 8B F9 4C 8D B1 30 0B 00 00 49 8B C6 B9) AOBScanModule(MOHS,Warhammer.exe,48 8b 9b b0 0a 00 00 48 85 db ?? ?? 48 8d 4b 08 e8 ?? ?? ?? ?? f3) AOBScanModule(MOPA,Warhammer.exe,48 8b f1 8b ea 48 83 c1 40 e8 ?? ?? ?? ?? 48 8b ce 8b d8 e8 ??) AOBScanModule(MOWH,Warhammer.exe,48 89 5c 24 08 57 48 83 ec 40 48 8b d9 0f 29 74 24 30 0f 29 7c) //========================================= alloc(MyCode,4096,$process) //========================================= // Declaration section label(_MonPlayerHero) label(_BackMPH) label(_GodMode) label(_BackGMD) label(_MonHeroAdrenaline) label(_BackMHA) label(_MonHeroSupression) label(_BackMHS) label(_MonPlayerAmmo) label(_BackMPA) label(_MonWeaponHeat) label(_BackMWH) label(iEnableGMD) label(iEnableGMO) label(iEnableMHA) label(iEnableMHS) label(iEnableMPA) label(iEnableMWH) label(iEnableMQK) label(iEnableMHW) label(pHero) label(pCredits) label(pHeroB) label(pLast) label(fLast) label(fBigVal) label(fSmallval) label(fressourceinc) label(fressourcedec) //========================================= // Registering Symbols registersymbol(MyCode) registersymbol(iEnableGMD) registersymbol(iEnableGMO) registersymbol(iEnableMHA) registersymbol(iEnableMHS) registersymbol(iEnableMPA) registersymbol(iEnableMWH) registersymbol(iEnableMQK) registersymbol(iEnableMHW) registersymbol(pHero) registersymbol(pCredits) registersymbol(pHeroB) registersymbol(pLast) registersymbol(fLast) registersymbol(fBigVal) registersymbol(fSmallval) registersymbol(MOPH) registersymbol(GDMD) registersymbol(MOHA) registersymbol(MOHS) registersymbol(MOPA) registersymbol(MOWH) //========================================= MyCode: //========================================= 200b * // Player Hero at Mission (all the time) _MonPlayerHero: mov [pHero],r14 _ExitMPH: lea rcx,[r14+00000688] // Original code jmp _BackMPH // Back to main code //========================================= 200b # // During Mission (Health points) _GodMode: mov [pLast],rcx movss [fLast],xmm1 cmp rcx,[pHero] je _GodMD00 mov rax,[rcx+00000658] test rax,rax jz _ExitGMD cmp byte ptr [rax+00000174],00 jne _GodMD01 cmp dword ptr [iEnableGMO],0 je _ExitGMD // Jump if feature is disabled _GodMD00: cmp dword ptr [iEnableGMD],0 je _ExitGMD // Jump if feature is disabled maxss xmm1,[fSmallval] jmp _ExitGMD //-- _GodMD01: cmp dword ptr [iEnableMQK],0 je _ExitGMD // Jump if feature is disabled minss xmm1,[fBigVal] _ExitGMD: mov rsi,r9 // Original code mov r13,r8 // Original code jmp _BackGMD // Back to main code //--------------- fSmallval: dd (float)0.0001 fBigVal: dd (float)-16800.0 //========================================= 200b * (s4.5) // During Mission (Adrenaline) and (Warp Heat s4.5) _MonHeroAdrenaline: cmp rcx,[pHero] jne _ExitMHA cmp dword ptr [iEnableMHA],0 je _MonHA00 // Jump if feature is disabled maxss xmm1,[fressourceinc] jmp _ExitMHA //-- _MonHA00: cmp dword ptr [iEnableMHW],0 je _ExitMHA // Jump if feature is disabled minss xmm1,[fressourcedec] _ExitMHA: mov r15d,r8d // Original code movaps xmm8,xmm1 // Original code jmp _BackMHA // Back to main code fressourceinc: dd (float)0.0001 fressourcedec: dd (float)-100.0 //========================================= 200b * (s2.1)(s4.1 fix) // During Mission (Supression Resistense) _MonHeroSupression: cmp dword ptr [iEnableMHS],0 je _ExitMHS // Jump if feature is disabled cmp rbx,[pHero] jne _ExitMHS minss xmm6,[fMedVal] _ExitMHS: mov rbx,[rbx+00000AB0] // Original code jmp _BackMHS // Back to main code fMedVal: dd (float)-1.00 //========================================= 104 X // When updating Ammo _MonPlayerAmmo: cmp dword ptr [iEnableMPA],0 je _ExitMPA // Jump if feature is disabled cmp rsi,[pHero] jne _ExitMPA test edx,edx jns _ExitMPA xor edx,edx _ExitMPA: mov rsi,rcx // Original code mov ebp,edx // Original code add rcx,40 // Original code jmp _BackMPA // Back to main code //========================================= new S2.0 104 X // When updating weapon heat _MonWeaponHeat: cmp dword ptr [iEnableMWH],0 je _ExitMWH // Jump if feature is disabled ret //-- _ExitMWH: mov [rsp+08],rbx // Original code jmp _BackMWH // Back to main code //========================================= align 10,'=' //========================================= db '===============================>' db 'CE6.7 Script by Recifense 190621' //========================================= // Variables iEnableGMD: dd 0 iEnableGMO: dd 0 iEnableMHA: dd 0 iEnableMHS: dd 0 iEnableMPA: dd 0 iEnableMWH: dd 0 iEnableMQK: dd 0 iEnableMHW: dd 0 pHero: dq 0 pCredits: dq 0 pVal: dq 0 pHeroB: dq 0 pRAX: dq 0 pLast: dq 0 fLast: dd 0 //========================================= // Hacking Points MOPH: jmp _MonPlayerHero nop nop _BackMPH: GDMD: jmp _GodMode nop _BackGMD: MOHA: jmp _MonHeroAdrenaline nop nop _BackMHA: MOHS: jmp _MonHeroSupression nop nop _BackMHS: MOPA: jmp _MonPlayerAmmo nop nop nop nop _BackMPA: MOWH: jmp _MonWeaponHeat _BackMWH: //========================================= // Script for Restoring Original Codes [DISABLE] MOPH: // 49 8D 8E 88060000 - lea rcx,[r14+00000688] db 49 8d 8e 88 06 00 00 GDMD: // 49 8B F1 - mov rsi,r9 // 4D 8B E8 - mov r13,r8 db 49 8b f1 4d 8b e8 MOHA: // 45 8B F8 - mov r15d,r8d // 44 0F28 C1 - movaps xmm8,xmm1 db 45 8B F8 44 0F 28 C1 MOHS: // 48 8B 9B B00A0000 - mov rbx,[rbx+00000AB0] db 48 8b 9b b0 0a 00 00 MOPA: // 48 8B F1 - mov rsi,rcx // 8B EA - mov ebp,edx // 48 83 C1 40 - add rcx,40 { 64 } db 48 8b f1 8b ea 48 83 c1 40 MOWH: // 48 89 5C 24 08 - mov [rsp+08],rbx db 48 89 5c 24 08 //========================================= // Unregistering Symbols unregistersymbol(MyCode) unregistersymbol(iEnableGMD) unregistersymbol(iEnableGMO) unregistersymbol(iEnableMHA) unregistersymbol(iEnableMHS) unregistersymbol(iEnableMPA) unregistersymbol(iEnableMWH) unregistersymbol(iEnableMQK) unregistersymbol(iEnableMHW) unregistersymbol(pHero) unregistersymbol(pCredits) unregistersymbol(pHeroB) unregistersymbol(fLast) unregistersymbol(pLast) unregistersymbol(fBigVal) unregistersymbol(fSmallval) unregistersymbol(MOPH) unregistersymbol(GDMD) unregistersymbol(MOHA) unregistersymbol(MOHS) unregistersymbol(MOPA) unregistersymbol(MOWH) //========================================= dealloc(MyCode) //============= Scripts End =============== // **************************************** // NOTES // **************************************** { } </AssemblerScript> <CheatEntries> <CheatEntry> <ID>242</ID> <Description>"pPlayer"</Description> <ShowAsHex>1</ShowAsHex> <VariableType>4 Bytes</VariableType> <Address>pHero</Address> <Offsets> <Offset>0</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>96</ID> <Description>"[X] <== God Mode"</Description> <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableGMD",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableGMD",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> <CheatEntries> <CheatEntry> <ID>248</ID> <Description>"Monster Damage (Positive value heals)"</Description> <LastState Value="0.00009999999747" RealAddress="7FF63D5100AE"/> <VariableType>Float</VariableType> <Address>fSmallval</Address> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>142</ID> <Description>"[X] <== Include Companions"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableGMO",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableGMO",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>144</ID> <Description>"[X] <== Unlimited Suppression Resistense"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMHS",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMHS",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>145</ID> <Description>"[X] <== Unlimited Ammo (no releoad needed)"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMPA",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMPA",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>229</ID> <Description>"[X] <== No Weapon Heat"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMWH",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMWH",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>239</ID> <Description>"[X] <== Quick Kill"</Description> <Options moHideChildren="1"/> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMQK",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMQK",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> <CheatEntries> <CheatEntry> <ID>247</ID> <Description>"Player Damage"</Description> <LastState Value="-16800" RealAddress="7FF63D5100B2"/> <VariableType>Float</VariableType> <Address>fBigVal</Address> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>143</ID> <Description>"[X] <== Full Adrenaline/Focus/Data-flux (No Warp Heat should be OFF)"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMHA",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMHA",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>241</ID> <Description>"[X] <== No Warp Heat (Full Adrenaline should be OFF)"</Description> <LastState/> <Color>C08000</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[enable] {$LUA} writeInteger("iEnableMHW",1) memrec.Color=0x0004000 {$ASM} [disable] {$LUA} writeInteger("iEnableMHW",0) memrec.Color=0x0c08000 {$ASM} </AssemblerScript> </CheatEntry> <CheatEntry> <ID>86</ID> <Description>"[X] <== Set Movement Speed"</Description> <Options moHideChildren="1"/> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanmodule(movement,Warhammer.exe,F3 0F 11 B3 C0 05 00 00) alloc(newmem,$1000,movement) //label(code) label(return) label(movement_speed) newmem: cmp rbx,[pHero] jne code push rax mov rax,movement_speed movss xmm6,[rax] pop rax code: movss [rbx+000005C0],xmm6 jmp return movement_speed: dd (float)200 movement: jmp newmem nop nop nop return: registersymbol(movement) registersymbol(movement_speed) [DISABLE] movement: db F3 0F 11 B3 C0 05 00 00 unregistersymbol(movement) unregistersymbol(movement_speed) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Warhammer_x64_11.exe"+32A9B0 "Warhammer_x64_11.exe"+32A989: F3 0F 59 F1 - mulss xmm6,xmm1 "Warhammer_x64_11.exe"+32A98D: 48 8B 03 - mov rax,[rbx] "Warhammer_x64_11.exe"+32A990: BA 3C 00 00 00 - mov edx,0000003C "Warhammer_x64_11.exe"+32A995: 48 8B CB - mov rcx,rbx "Warhammer_x64_11.exe"+32A998: FF 90 C8 00 00 00 - call qword ptr [rax+000000C8] "Warhammer_x64_11.exe"+32A99E: 84 C0 - test al,al "Warhammer_x64_11.exe"+32A9A0: 74 0E - je Warhammer_x64_11.exe+32A9B0 "Warhammer_x64_11.exe"+32A9A2: B9 2B 0C 00 00 - mov ecx,00000C2B "Warhammer_x64_11.exe"+32A9A7: E8 34 FE 67 00 - call Warhammer_x64_11.exe+9AA7E0 "Warhammer_x64_11.exe"+32A9AC: F3 0F 59 F0 - mulss xmm6,xmm0 // ---------- INJECTING HERE ---------- "Warhammer_x64_11.exe"+32A9B0: F3 0F 11 B3 78 05 00 00 - movss [rbx+00000578],xmm6 // ---------- DONE INJECTING ---------- "Warhammer_x64_11.exe"+32A9B8: C6 83 80 05 00 00 00 - mov byte ptr [rbx+00000580],00 "Warhammer_x64_11.exe"+32A9BF: F3 0F 10 83 78 05 00 00 - movss xmm0,[rbx+00000578] "Warhammer_x64_11.exe"+32A9C7: 0F 28 74 24 40 - movaps xmm6,[rsp+40] "Warhammer_x64_11.exe"+32A9CC: 0F 28 7C 24 30 - movaps xmm7,[rsp+30] "Warhammer_x64_11.exe"+32A9D1: 48 83 C4 50 - add rsp,50 "Warhammer_x64_11.exe"+32A9D5: 5B - pop rbx "Warhammer_x64_11.exe"+32A9D6: C3 - ret "Warhammer_x64_11.exe"+32A9D7: CC - int 3 "Warhammer_x64_11.exe"+32A9D8: CC - int 3 "Warhammer_x64_11.exe"+32A9D9: CC - int 3 } </AssemblerScript> <CheatEntries> <CheatEntry> <ID>84</ID> <Description>"Movement Speed (Set)"</Description> <VariableType>Float</VariableType> <Address>movement_speed</Address> </CheatEntry> <CheatEntry> <ID>267</ID> <Description>"Movement Speed"</Description> <VariableType>Float</VariableType> <Address>pHero</Address> <Offsets> <Offset>5C0</Offset> </Offsets> </CheatEntry> </CheatEntries> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>250</ID> <Description>"Unlimited Zoom"</Description> <Options moHideChildren="1"/> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanmodule(zoom,Warhammer.exe,C7 83 30 04 00 00 00 00 80 3F) zoom: //db C7 83 28 04 00 00 00 00 40 40 db 90 90 90 90 90 90 90 90 90 90 registersymbol(zoom) [DISABLE] zoom: db C7 83 30 04 00 00 00 00 80 3F unregistersymbol(zoom) unregistersymbol(zoom_speed) { ORIGINAL CODE - INJECTION POINT: "Warhammer_x64_11.exe"+2E6617 "Warhammer.exe"+2E65FA - 73 0A - jae Warhammer.exe+2E6606 "Warhammer.exe+2E65FC - C7 83 30040000 00000000 - mov [rbx+00000430],00000000 "Warhammer.exe"+2E6606 - F3 0F10 05 F2005D01 - movss xmm0,[Warhammer.exe+18B6700] "Warhammer.exe"+2E660E - 0F2F 83 30040000 - comiss xmm0,[rbx+00000430] "Warhammer.exe"+2E6615 - 73 0A - jae Warhammer.exe+2E6621 "Warhammer.exe"+2E6617 - C7 83 30040000 0000803F - mov [rbx+00000430],3F800000 "Warhammer.exe"+2E6621 - 48 8B 5C 24 40 - mov rbx,[rsp+40] "Warhammer.exe"+2E6626 - 48 83 C4 30 - add rsp,30 "Warhammer.exe"+2E662A - 5F - pop rdi } </AssemblerScript> </CheatEntry> <CheatEntry> <ID>261</ID> <Description>"No Cooldown"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanmodule(cooldown,Warhammer.exe,F3 0F 10 87 BC 01 00 00 F3 0F 5C) cooldown: db 0F 57 C0 90 90 90 90 90 registersymbol(cooldown) [DISABLE] cooldown: db F3 0F 10 87 BC 01 00 00 unregistersymbol(cooldown) { // ORIGINAL CODE - INJECTION POINT: "Warhammer_x64_11.exe"+66EE67 Warhammer_x64_11.exe+A196D1 - 76 13 - jna Warhammer_x64_11.exe+A196E6 Warhammer_x64_11.exe+A196D3 - 44 0F2F 87 B8010000 - comiss xmm8,[rdi+000001B8] Warhammer_x64_11.exe+A196DB - 76 09 - jna Warhammer_x64_11.exe+A196E6 Warhammer_x64_11.exe+A196DD - F3 0F11 BC 24 D8000000 - movss [rsp+000000D8],xmm7 Warhammer_x64_11.exe+A196E6 - 0F28 BC 24 90000000 - movaps xmm7,[rsp+00000090] Warhammer_x64_11.exe+A196EE - F3 0F58 B4 24 D8000000 - addss xmm6,dword ptr [rsp+000000D8] // ---------- INJECTING HERE ---------- Warhammer_x64_11.exe+A196F7 - F3 0F10 87 BC010000 - movss xmm0,[rdi+000001BC] // ---------- DONE INJECTING ---------- Warhammer_x64_11.exe+A196FF - F3 0F5C C6 - subss xmm0,xmm6 Warhammer_x64_11.exe+A19703 - F3 0F11 87 BC010000 - movss [rdi+000001BC],xmm0 Warhammer_x64_11.exe+A1970B - 44 0F2F 8F BC010000 - comiss xmm9,[rdi+000001BC] Warhammer_x64_11.exe+A19713 - 72 07 - jb Warhammer_x64_11.exe+A1971C Warhammer_x64_11.exe+A19715 - 48 89 AF B8010000 - mov [rdi+000001B8],rbp Warhammer_x64_11.exe+A1971C - 48 8B 87 00020000 - mov rax,[rdi+00000200] Warhammer_x64_11.exe+A19723 - 8B F5 - mov esi,ebp } </AssemblerScript> </CheatEntry> </CheatEntries> <UserdefinedSymbols> <SymbolEntry> <Name>player_ptr</Name> <Address>20901240000</Address> </SymbolEntry> <SymbolEntry> <Name>Recifense</Name> <Address>20190621</Address> </SymbolEntry> </UserdefinedSymbols> </CheatTable> Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 7 августа, 2019 Поделиться Опубликовано 7 августа, 2019 Весь листинг не смотрел, но судя по первому скрипту, автор нашел инструкцию, которая работает только с героем, и с нее записывает указатель на героя. А в остальных местах уже работает именно с этим указателем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 августа, 2019 Поделиться Опубликовано 7 августа, 2019 В 06.08.2019 в 09:47, BitKit сказал: Итого: 1. Непонятно к чему именно создатель чита привязался для проверки "игрок на миссии". 2. Как он вышел на приведенную функцию и почему использует метод "наибольшее" для бессмертия и "наименьшее" для быстрого убийства. 1. Инструкция, как и написал @Xipho работает в миссии по-видимому и по вот этой проверке: mov rax,[rcx+00000658] // защита от нулевого значения test rax,rax // Т.е. сработала инструкция или нет jz _ExitGMD // И появился ли адрес в [rcx+00000658] но это указатель на структуры всех НПС скорее всего, потому-что фильтр свой/чужой это: В 06.08.2019 в 10:57, BitKit сказал: cmp byte ptr [rax+00000174],00 // при 0 - это НАШ jne _GodMD01 2. Автор скрипта юзает не здоровье, а УРОН судя по записям: maxss xmm1,[fSmallval] /////////////////////// minss xmm1,[fBigVal] /////////////////////// fSmallval: dd (float)0.0001 fBigVal: dd (float)-16800.0 Ну а так информации в выложенном коде предостаточно, чтобы восстановить работу скрипта, если поменялась версия игры. ЗЫ: Только что, Garik66 сказал: Как он вышел Конечно от здоровья - реверс кода скорее всего. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
BitKit Опубликовано 7 августа, 2019 Автор Поделиться Опубликовано 7 августа, 2019 @Garik66Вот теперь стало яснее что тут происходит, спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения