king48488,
thx for your advice. I EB all the fake conditional jumps to hard jmps. But end up encountering an infinite loop starting at offset D037E0 (.text:00007FF61D7637E0 since my base is at 0x7FF61CA60000). The jmp will just ultimately loop back to this offset. As a result IDA says it cannot analyse the sp showing this in the disassembly:
.text:00007FF61D763860 ClntObjMgrGetPointerToActivePlayer_ endp ; sp-analysis failed
The decompiler says 'stack frame too big'. I am not sure if this is another anti-reversing trick used. Did u encounter this when u generated the listing u posted previously?
Code:
.text:00007FF61D7637E0 loc_7FF61D7637E0: ; CODE XREF: ClntObjMgrGetPointerToActivePlayer_+8B1j
.text:00007FF61D7637E0 0B0 84 E9 test cl, ch ; carry =0
.text:00007FF61D7637E2 0B0 8A D2 mov dl, dl
.text:00007FF61D7637E4 0B0 EB 02 jmp short loc_7FF61D7637E8
.text:00007FF61D7637E4 ; ---------------------------------------------------------------------------
.text:00007FF61D7637E6 0B0 81 db 81h ; u
.text:00007FF61D7637E7 0B0 C5 db 0C5h ; +
.text:00007FF61D7637E8 ; ---------------------------------------------------------------------------
.text:00007FF61D7637E8
.text:00007FF61D7637E8 loc_7FF61D7637E8: ; CODE XREF: ClntObjMgrGetPointerToActivePlayer_+7A4j
.text:00007FF61D7637E8 0B0 EB 56 jmp short loc_7FF61D763840
.text:00007FF61D7637EA ; ---------------------------------------------------------------------------
.text:00007FF61D7637EA 0B0 34 77 xor al, 77h
.text:00007FF61D7637EC 0B0 79 48 jns short near ptr loc_7FF61D763832+4
.text:00007FF61D7637EE 0B0 F6 D8 neg al
.text:00007FF61D7637F0 0B0 0F 84 81 AB 00 00 jz near ptr loc_7FF61D76E376+1
.text:00007FF61D7637F6 0B0 81 C0 50 B1 EC 10 add eax, 10ECB150h
.text:00007FF61D7637FC 0B0 E8 38 6D 00 00 call near ptr loc_7FF61D76A536+3
.text:00007FF61D763801 0B0 C7 C2 96 FD FD F9 mov edx, 0F9FDFD96h
.text:00007FF61D763807
.text:00007FF61D763807 loc_7FF61D763807: ; CODE XREF: .text:00007FF61D76386Ej
.text:00007FF61D763807 0B0 83 C3 E1 add ebx, 0FFFFFFE1h
.text:00007FF61D76380A 0B0 80 C0 70 add al, 70h
.text:00007FF61D76380D 0B0 C6 C0 0A mov al, 0Ah
.text:00007FF61D763810 0B0 0F 31 rdtsc
.text:00007FF61D763812 0B0 81 E8 0C 9E 3E 7B sub eax, 7B3E9E0Ch
.text:00007FF61D763818 0B0 F6 DB neg bl
.text:00007FF61D76381A 0B0 81 E9 76 78 CA 3F sub ecx, 3FCA7876h
.text:00007FF61D763820 0B0 6A A6 push 0FFFFFFFFFFFFFFA6h
.text:00007FF61D763822 0B8 F6 DD neg ch
.text:00007FF61D763824 0B8 5E pop rsi
.text:00007FF61D763825 0B0 0F 31 rdtsc
.text:00007FF61D763827 0B0 56 push rsi
.text:00007FF61D763828 0B8 0F 87 24 D3 00 00 ja near ptr loc_7FF61D770B50+2
.text:00007FF61D76382E 0B8 70 12 jo short near ptr loc_7FF61D763840+2
.text:00007FF61D763830
.text:00007FF61D763830 loc_7FF61D763830: ; CODE XREF: ClntObjMgrGetPointerToActivePlayer_:loc_7FF61D763830j
.text:00007FF61D763830 0B8 75 FE jnz short loc_7FF61D763830
.text:00007FF61D763832
.text:00007FF61D763832 loc_7FF61D763832: ; CODE XREF: ClntObjMgrGetPointerToActivePlayer_+7ACj
.text:00007FF61D763832 0B8 E8 43 CE 01 00 call near ptr loc_7FF61D780677+3
.text:00007FF61D763837 0B8 F6 D8 neg al
.text:00007FF61D763839 0B8 57 push rdi
.text:00007FF61D763839 ; ---------------------------------------------------------------------------
.text:00007FF61D76383A 0C0 F6 db 0F6h ; ÷
.text:00007FF61D76383B 0C0 82 db 82h ; e
.text:00007FF61D76383C 0C0 27 db 27h ; '
.text:00007FF61D76383D 0C0 AF db 0AFh ; ?
.text:00007FF61D76383E 0C0 29 db 29h ; )
.text:00007FF61D76383F 0C0 98 db 98h ; y
.text:00007FF61D763840 ; ---------------------------------------------------------------------------
.text:00007FF61D763840
.text:00007FF61D763840 loc_7FF61D763840: ; CODE XREF: ClntObjMgrGetPointerToActivePlayer_:loc_7FF61D7637E8j
.text:00007FF61D763840 ; ClntObjMgrGetPointerToActivePlayer_+7EEj
.text:00007FF61D763840 0C0 4C 89 45 40 mov [rbp+arg_0], r8
.text:00007FF61D763844 0C0 33 D2 xor edx, edx
.text:00007FF61D763846 0C0 48 8B 45 40 mov rax, [rbp+arg_0]
.text:00007FF61D76384A 0C0 48 89 45 40 mov [rbp+arg_0], rax
.text:00007FF61D76384E 0C0 48 8B 4D 40 mov rcx, [rbp+arg_0]
.text:00007FF61D763852 0C0 48 8B 7D E0 mov rdi, [rbp+var_20]
.text:00007FF61D763856 0C0 48 8B C7 mov rax, rdi
.text:00007FF61D763859 0C0 48 F7 F1 div rcx
.text:00007FF61D76385C 0C0 88 07 mov [rdi], al
.text:00007FF61D76385E 0C0 66 90 xchg ax, ax
.text:00007FF61D763860 0C0 EB 08 jmp short loc_7FF61D76386A
.text:00007FF61D763860 ClntObjMgrGetPointerToActivePlayer_ endp ; sp-analysis failed <--------------ERROR
:
:
The jmps ultimately lead to this:
Code:
:
:
.text:00007FF61D76389B loc_7FF61D76389B: ; CODE XREF: .text:loc_7FF61D763865j
.text:00007FF61D76389B ; ClntObjMgrGetPointerToActivePlayer_:loc_7FF61D76386Aj
.text:00007FF61D76389B 0C0 48 C7 45 40 31 07+ mov [rbp+arg_0], 731h
.text:00007FF61D7638A3 0C0 48 8D 7D E8 lea rdi, [rbp+var_18]
.text:00007FF61D7638A7 0C0 48 8B 45 40 mov rax, [rbp+arg_0]
.text:00007FF61D7638AB 0C0 48 05 85 F8 FF FF add rax, 0FFFFFFFFFFFFF885h
.text:00007FF61D7638B1 0C0 48 89 45 40 mov [rbp+arg_0], rax
.text:00007FF61D7638B5 0C0 48 8B 45 40 mov rax, [rbp+arg_0]
.text:00007FF61D7638B9 0C0 48 05 4A 10 00 00 add rax, 104Ah
.text:00007FF61D7638BF 0C0 48 89 45 40 mov [rbp+arg_0], rax
.text:00007FF61D7638C3 0C0 48 C7 45 48 31 F7+ mov [rbp+arg_8], 0FFFFFFFFFFFFF731h
.text:00007FF61D7638CB 0C0 48 8B 45 48 mov rax, [rbp+arg_8]
.text:00007FF61D7638CF 0C0 48 05 85 F8 FF FF add rax, 0FFFFFFFFFFFFF885h
.text:00007FF61D7638D5 0C0 48 89 45 48 mov [rbp+arg_8], rax
.text:00007FF61D7638D9 0C0 48 8B 45 48 mov rax, [rbp+arg_8]
.text:00007FF61D7638DD 0C0 48 05 4A 10 00 00 add rax, 104Ah
.text:00007FF61D7638E3 0C0 48 89 45 48 mov [rbp+arg_8], rax
.text:00007FF61D7638E7 0C0 48 8B 4D 40 mov rcx, [rbp+arg_0]
.text:00007FF61D7638EB 0C0 48 8B 45 48 mov rax, [rbp+arg_8]
.text:00007FF61D7638EF 0C0 F3 AA rep stosb
.text:00007FF61D7638F1 0C0 E9 EA FE FF FF jmp loc_7FF61D7637E0 //<-------------INFINITE LOOP
.text:00007FF61D7638F1 ; END OF FUNCTION CHUNK FOR ClntObjMgrGetPointerToActivePlayer_