[Code]
[Enable]
alloc(VisibleHook2,2048,"Overwatch.exe"+777F3D)
registersymbol(VisibleHook2)
alloc(MouseHook,2048,"Overwatch.exe"+4E96D3)
registersymbol(MouseHook)
alloc(SpeedUpHook2,2048,"Overwatch.exe"+7768FA)
registersymbol(SpeedUpHook2)
Define(SpeedUpEnd,Overwatch.exe+7768FA)
Define(MouseFunc,Overwatch.exe+4E96D3)
Define(Filter,Overwatch.exe+777F3D)
registersymbol(SpeedUpEnd)
registersymbol(MouseFunc)
registersymbol(Filter)
//label(return3)
//EIP > SpeedUpEnd -> SpeedUpHook2
//EIP > MouseFunc -> MouseHook
//EIP > Filter -> VisibleHook2
Alloc(MouseExist,16)
Alloc(CurrentMouse,32)
GlobalAlloc(Switch,4)
Switch:
dd 1
globalalloc(adjust,16)
adjust:
dd (float)0.0
dd (float)-0.01
dd (float)0.0
globalalloc(LeftTrigger,8)
LeftTrigger:
dd 0
globalalloc(MiddleTrigger,8)
MiddleTrigger:
dd 1
globalalloc(RightTrigger,8)
RightTrigger:
dd 0
globalalloc(comp_cos,4)
comp_cos:
dd (float)0.93969262078590838405410927732473
alloc(init_cos,4)
init_cos:
dd (float)-2.0
alloc(save_cos,4)
save_cos:
dd (float)-2.0
alloc(EnemyExist,8)
alloc(final_vector,60)
alloc(temp_vector,60)
label(LeftNext)
label(RightNext)
Alloc(IsTriggered,1024)
IsTriggered:
//mouse trigger
push rcx
push rdx
xor rdx,rdx
cmp [LeftTrigger],0
je LeftNext
mov rcx,1 //mouse left
call getasynckeystate
or rdx,rax
LeftNext:
cmp [RightTrigger],0
je RightNext
mov rcx,2 //mouse right
call getasynckeystate
or rdx,rax
RightNext:
cmp [MiddleTrigger],0
je MiddleNext
mov rcx,4 //mouse middle
call getasynckeystate
or rdx,rax
MiddleNext:
xor rax,rax
and rdx,8000
test rdx,rdx
pop rdx
pop rcx
je Disabled
inc rax
Disabled:
ret
alloc(save_r13,8)
label(CompareEnd)
label(SpeedUpHook2Original)
//process+1663d30
SpeedUpHook2:
push rax
mov rax,[rsp+8]
cmp [rax+3],00000360 //lea rcx,[rbp+08]
jne SpeedUpHook2Original
//filter Enemy
mov rax,r12
cmp byte ptr [rax+81],0
mov byte ptr [rax+81],0
je CompareSkip
//MouseCheck
cmp [MouseExist],0
je CompareSkip
movups xmm0,[rbp+00000350] //enemy
movups xmm1,[rbp+00000360] //me
subps xmm0,xmm1 //dir = enemy - me
movups xmm1,[adjust] //adjust
addps xmm0,xmm1 //dir = dir + adjust
movups xmm1,xmm0 //copy dir to xmm1
//xmm1 = (x, y, z)
//dpps xmm1,xmm1,ff
db 66 0f 3a 40 c9 ff //xmm1 = (x^2+y^2+z^2, x^2+y^2+z^2, x^2+y^2+z^2)
rsqrtps xmm1,xmm1 //xmm1 = 1 / root(xmm1)
mulps xmm0,xmm1 //xmm0 = xmm0 * xmm1
//xmm0 has been normalized
movups xmm1,[CurrentMouse] //mouse
//dpps xmm1,xmm0,ff
db 66 0f 3a 40 c8 ff //xmm1 = xmm0 * xmm1 (dot product)
sub esp, 4
movss [esp],xmm1
fld [esp]
add esp, 4
fld [comp_cos]
//if comp_cos >= curr_cos then jump to next
fcomip st(0),st(1)
jnb CompareSkip
fld [save_cos]
//if save_cos >= curr_cos then jump to next
fcomip st(0),st(1)
jnb CompareSkip
//save curr_cos
fst [save_cos]
//save directon vector
movups [temp_vector],xmm0
CompareSkip:
//pop curr_cos
fstp st(0)
mov eax,[r13+78]
cmp [r13+80],eax
jmp CompareEnd
CompareEnd:
mov [EnemyExist],0
mov [MouseExist],0
//No enemy to shot
mov eax,[save_cos]
cmp eax,[init_cos]
je Init
//Switch offed
cmp [Switch],1
jne Init
//apply vector
mov [EnemyExist],1
movups xmm0,[temp_vector]
movups [final_vector],xmm0
Init:
mov eax,[init_cos]
mov [save_cos],eax
SpeedUpHook2Original:
pop rax
ret
label(MouseNext)
label(MouseEnd)
MouseHook: //process+1426ba7
push rax
//return address check
mov rax,[rsp+8]
cmp [rax+d],000001A0
jne MouseEnd
call IsTriggered
test rax,rax
je MouseNext
cmp [EnemyExist],0
je MouseNext
mov [EnemyExist],0
movaps xmm0,[final_vector]
movaps [rbp+60],xmm0
MouseNext:
//original code
movaps xmm0,[rbp+60]
movaps [CurrentMouse],xmm0
mov [MouseExist],1
MouseEnd:
pop rax
ret
label(VisibleHook2Next)
VisibleHook2: //process+1665edd
cmp byte ptr [rax+80],0
mov byte ptr [rax+81],0
je VisibleHook2Next
mov byte ptr [rax+81],1
VisibleHook2Next:
jmp Overwatch.exe+777F44
[disable]